mirror of
https://github.com/BlackMATov/unity-flash-tools.git
synced 2026-03-22 12:55:32 +07:00
load asset begin
This commit is contained in:
@@ -47,6 +47,7 @@
|
||||
<ItemGroup>
|
||||
<Compile Include="Assets\FlashTools\Scripts\Internal\Editor\FlashAnimAssetEditor.cs" />
|
||||
<Compile Include="Assets\FlashTools\Scripts\Internal\Editor\FlashAnimEditor.cs" />
|
||||
<Compile Include="Assets\FlashTools\Scripts\Internal\Editor\FlashAnimPostprocessor.cs" />
|
||||
<Reference Include="UnityEditor.Advertisements">
|
||||
<HintPath>/Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/Advertisements/Editor/UnityEditor.Advertisements.dll</HintPath>
|
||||
</Reference>
|
||||
|
||||
@@ -1,6 +1,104 @@
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace FlashTools {
|
||||
public class FlashAnimAsset : MonoBehaviour {
|
||||
public enum FlashAnimBlendMode {
|
||||
Normal,
|
||||
Layer,
|
||||
Multiply,
|
||||
Screen,
|
||||
Overlay,
|
||||
Hardlight,
|
||||
Lighten,
|
||||
Darken,
|
||||
Difference,
|
||||
Add,
|
||||
Subtract,
|
||||
Invert,
|
||||
Alpha,
|
||||
Erase
|
||||
}
|
||||
}
|
||||
|
||||
public enum FlashAnimLayerType {
|
||||
Normal,
|
||||
Guide,
|
||||
Guided,
|
||||
Mask,
|
||||
Masked,
|
||||
Folder
|
||||
}
|
||||
|
||||
public enum FlashAnimInstType {
|
||||
Bitmap,
|
||||
Symbol
|
||||
}
|
||||
|
||||
public enum FlashAnimInstSymbolType {
|
||||
Graphic,
|
||||
MovieClip
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
public class FlashAnimBitmapData {
|
||||
public string Id = string.Empty;
|
||||
public string ImageSource = string.Empty;
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
public class FlashAnimInstData {
|
||||
public FlashAnimInstType Type = FlashAnimInstType.Bitmap;
|
||||
public FlashAnimInstSymbolType SymbolType = FlashAnimInstSymbolType.Graphic;
|
||||
public FlashAnimBlendMode BlendMode = FlashAnimBlendMode.Normal;
|
||||
public string Asset = string.Empty;
|
||||
public bool Visible = true;
|
||||
// TODO: color_mode, looping, filters
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
public class FlashAnimElemData {
|
||||
public string Id = string.Empty;
|
||||
public int Depth = 0;
|
||||
public Matrix4x4 Matrix = Matrix4x4.identity;
|
||||
public List<FlashAnimInstData> Insts = new List<FlashAnimInstData>();
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
public class FlashAnimFrameData {
|
||||
public string Id = string.Empty;
|
||||
public int Index = 0;
|
||||
public int Duration = 0;
|
||||
public List<FlashAnimElemData> Elems = new List<FlashAnimElemData>();
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
public class FlashAnimLayerData {
|
||||
public string Id = string.Empty;
|
||||
public bool Visible = true;
|
||||
public FlashAnimLayerType LayerType = FlashAnimLayerType.Normal;
|
||||
public List<FlashAnimFrameData> Frames = new List<FlashAnimFrameData>();
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
public class FlashAnimSymbolData {
|
||||
public string Id = string.Empty;
|
||||
public List<FlashAnimLayerData> Layers = new List<FlashAnimLayerData>();
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
public class FlashAnimLibraryData {
|
||||
public List<FlashAnimBitmapData> Bitmaps = new List<FlashAnimBitmapData>();
|
||||
public List<FlashAnimSymbolData> Symbols = new List<FlashAnimSymbolData>();
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
public class FlashAnimData {
|
||||
public FlashAnimSymbolData Stage = new FlashAnimSymbolData();
|
||||
public FlashAnimLibraryData Library = new FlashAnimLibraryData();
|
||||
public List<string> Strings = new List<string>();
|
||||
}
|
||||
|
||||
public class FlashAnimAsset : ScriptableObject {
|
||||
public FlashAnimData Data = new FlashAnimData();
|
||||
public float PixelsPerUnit = 100.0f;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,195 @@
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace FlashTools.Internal {
|
||||
public class FlashAnimPostprocessor : AssetPostprocessor {
|
||||
static void OnPostprocessAllAssets(
|
||||
string[] imported_assets, string[] deleted_assets,
|
||||
string[] moved_assets, string[] moved_from_asset_paths)
|
||||
{
|
||||
var fta_assets = imported_assets
|
||||
.Where(p => Path.GetExtension(p).ToLower().Equals(".fta"));
|
||||
foreach ( var fta_asset in fta_assets ) {
|
||||
FtaAssetProcess(fta_asset);
|
||||
}
|
||||
}
|
||||
|
||||
static void FtaAssetProcess(string fta_asset) {
|
||||
var flash_anim_data = LoadFlashAnimFromFtaFile(fta_asset);
|
||||
if ( flash_anim_data != null ) {
|
||||
var new_asset_path = Path.ChangeExtension(fta_asset, ".asset");
|
||||
var new_asset = AssetDatabase.LoadAssetAtPath<FlashAnimAsset>(new_asset_path);
|
||||
if ( !new_asset ) {
|
||||
new_asset = ScriptableObject.CreateInstance<FlashAnimAsset>();
|
||||
AssetDatabase.CreateAsset(new_asset, new_asset_path);
|
||||
}
|
||||
new_asset.Data = flash_anim_data;
|
||||
EditorUtility.SetDirty(new_asset);
|
||||
AssetDatabase.SaveAssets();
|
||||
}
|
||||
}
|
||||
|
||||
static FlashAnimData LoadFlashAnimFromFtaFile(string fta_path) {
|
||||
try {
|
||||
var fta_root_elem = XDocument.Load(fta_path).Document.Root;
|
||||
var flash_anim_data = new FlashAnimData();
|
||||
LoadFlashAnimStageFromFtaRootElem (fta_root_elem, flash_anim_data);
|
||||
LoadFlashAnimLibraryFromFtaRootElem(fta_root_elem, flash_anim_data);
|
||||
LoadFlashAnimStringsFromFtaRootElem(fta_root_elem, flash_anim_data);
|
||||
return flash_anim_data;
|
||||
} catch ( Exception e ) {
|
||||
Debug.LogErrorFormat("Parsing FTA file error: {0}", e.Message);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------
|
||||
// Stage
|
||||
// -----------------------------
|
||||
|
||||
static void LoadFlashAnimStageFromFtaRootElem(XElement root_elem, FlashAnimData data) {
|
||||
var stage_elem = root_elem.Element("stage");
|
||||
LoadFlashAnimLayersFromFtaSymbolElem(stage_elem, data.Stage);
|
||||
}
|
||||
|
||||
// -----------------------------
|
||||
// Library
|
||||
// -----------------------------
|
||||
|
||||
static void LoadFlashAnimLibraryFromFtaRootElem(XElement root_elem, FlashAnimData data) {
|
||||
var library_elem = root_elem.Element("library");
|
||||
LoadFlashAnimBitmapsFromFtaLibraryElem(library_elem, data);
|
||||
LoadFlashAnimSymbolsFromFtaLibraryElem(library_elem, data);
|
||||
}
|
||||
|
||||
static void LoadFlashAnimBitmapsFromFtaLibraryElem(XElement library_elem, FlashAnimData data) {
|
||||
foreach ( var bitmap_elem in library_elem.Elements("bitmap") ) {
|
||||
var bitmap = new FlashAnimBitmapData();
|
||||
bitmap.Id = SafeLoadStrFromElemAttr(bitmap_elem, "id", bitmap.Id);
|
||||
if ( string.IsNullOrEmpty(bitmap.Id) ) {
|
||||
throw new UnityException("bitmap id not found");
|
||||
}
|
||||
bitmap.ImageSource = bitmap.Id + ".png";
|
||||
// TODO: add image importer check
|
||||
data.Library.Bitmaps.Add(bitmap);
|
||||
}
|
||||
}
|
||||
|
||||
static void LoadFlashAnimSymbolsFromFtaLibraryElem(XElement library_elem, FlashAnimData data) {
|
||||
foreach ( var symbol_elem in library_elem.Elements("symbol") ) {
|
||||
var symbol = new FlashAnimSymbolData();
|
||||
symbol.Id = SafeLoadStrFromElemAttr(symbol_elem, "id", symbol.Id);
|
||||
if ( string.IsNullOrEmpty(symbol.Id) ) {
|
||||
throw new UnityException("symbol id not found");
|
||||
}
|
||||
LoadFlashAnimLayersFromFtaSymbolElem(symbol_elem, symbol);
|
||||
data.Library.Symbols.Add(symbol);
|
||||
}
|
||||
}
|
||||
|
||||
static void LoadFlashAnimLayersFromFtaSymbolElem(XElement symbol_elem, FlashAnimSymbolData data) {
|
||||
foreach ( var layer_elem in symbol_elem.Elements("layer") ) {
|
||||
var layer = new FlashAnimLayerData();
|
||||
layer.Id = SafeLoadStrFromElemAttr (layer_elem, "id" , layer.Id);
|
||||
layer.Visible = SafeLoadBoolFromElemAttr(layer_elem, "visible" , layer.Visible);
|
||||
layer.LayerType = SafeLoadEnumFromElemAttr(layer_elem, "layer_type", FlashAnimLayerType.Normal);
|
||||
LoadFlashAnimFramesFromFtaLayerElem(layer_elem, layer);
|
||||
data.Layers.Add(layer);
|
||||
}
|
||||
}
|
||||
|
||||
static void LoadFlashAnimFramesFromFtaLayerElem(XElement layer_elem, FlashAnimLayerData data) {
|
||||
foreach ( var frame_elem in layer_elem.Elements("frame") ) {
|
||||
var frame = new FlashAnimFrameData();
|
||||
frame.Id = SafeLoadStrFromElemAttr(frame_elem, "id" , frame.Id);
|
||||
frame.Index = SafeLoadIntFromElemAttr(frame_elem, "index" , frame.Index);
|
||||
frame.Duration = SafeLoadIntFromElemAttr(frame_elem, "duration" , frame.Duration);
|
||||
LoadFlashAnimElemsFromFtaFrameElem(frame_elem, frame);
|
||||
data.Frames.Add(frame);
|
||||
}
|
||||
}
|
||||
|
||||
static void LoadFlashAnimElemsFromFtaFrameElem(XElement frame_elem, FlashAnimFrameData data) {
|
||||
foreach ( var elem_elem in frame_elem.Elements("element") ) {
|
||||
var elem = new FlashAnimElemData();
|
||||
elem.Id = SafeLoadStrFromElemAttr(elem_elem, "id" , elem.Id);
|
||||
elem.Depth = SafeLoadIntFromElemAttr(elem_elem, "depth" , elem.Depth);
|
||||
elem.Matrix = SafeLoadMatFromElemAttr(elem_elem, "matrix", elem.Matrix);
|
||||
LoadFlashAnimInstsFromFtaElemElem(elem_elem, elem);
|
||||
data.Elems.Add(elem);
|
||||
}
|
||||
}
|
||||
|
||||
static void LoadFlashAnimInstsFromFtaElemElem(XElement elem_elem, FlashAnimElemData data) {
|
||||
foreach ( var inst_elem in elem_elem.Elements("instance") ) {
|
||||
var inst = new FlashAnimInstData();
|
||||
inst.Type = SafeLoadEnumFromElemAttr(inst_elem, "type" , inst.Type);
|
||||
inst.SymbolType = SafeLoadEnumFromElemAttr(inst_elem, "symbol_type", inst.SymbolType);
|
||||
inst.BlendMode = SafeLoadEnumFromElemAttr(inst_elem, "blend_mode" , inst.BlendMode);
|
||||
inst.Asset = SafeLoadStrFromElemAttr (inst_elem, "asset" , inst.Asset);
|
||||
inst.Visible = SafeLoadBoolFromElemAttr(inst_elem, "visible" , inst.Visible);
|
||||
data.Insts.Add(inst);
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------
|
||||
// Strings
|
||||
// -----------------------------
|
||||
|
||||
static void LoadFlashAnimStringsFromFtaRootElem(XElement root_elem, FlashAnimData data) {
|
||||
var strings_elem = root_elem.Element("strings");
|
||||
foreach ( var string_elem in strings_elem.Elements("string") ) {
|
||||
var string_id = SafeLoadStrFromElemAttr(string_elem, "id" , null);
|
||||
var string_str = SafeLoadStrFromElemAttr(string_elem, "str", null);
|
||||
if ( !string.IsNullOrEmpty(string_id) && string_str != null ) {
|
||||
data.Strings.Add(string_id);
|
||||
data.Strings.Add(string_str);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------
|
||||
// Common
|
||||
// -----------------------------
|
||||
|
||||
static string SafeLoadStrFromElemAttr(XElement elem, string attr_name, string def_value) {
|
||||
if ( elem != null && elem.Attribute(attr_name) != null ) {
|
||||
return elem.Attribute(attr_name).Value;
|
||||
}
|
||||
return def_value;
|
||||
}
|
||||
|
||||
static int SafeLoadIntFromElemAttr(XElement elem, string attr_name, int def_value) {
|
||||
int value;
|
||||
if ( elem != null && int.TryParse(SafeLoadStrFromElemAttr(elem, attr_name, ""), out value) ) {
|
||||
return value;
|
||||
}
|
||||
return def_value;
|
||||
}
|
||||
|
||||
static bool SafeLoadBoolFromElemAttr(XElement elem, string attr_name, bool def_value) {
|
||||
bool value;
|
||||
if ( elem != null && bool.TryParse(SafeLoadStrFromElemAttr(elem, attr_name, ""), out value) ) {
|
||||
return value;
|
||||
}
|
||||
return def_value;
|
||||
}
|
||||
|
||||
static Matrix4x4 SafeLoadMatFromElemAttr(XElement elem, string attr_name, Matrix4x4 def_value) {
|
||||
// TODO: implme
|
||||
return def_value;
|
||||
}
|
||||
|
||||
static T SafeLoadEnumFromElemAttr<T>(XElement elem, string attr_name, T def_value) {
|
||||
try {
|
||||
return (T)Enum.Parse(typeof(T), SafeLoadStrFromElemAttr(elem, attr_name, ""));
|
||||
} catch ( Exception ) {
|
||||
return def_value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f429b99b17de54c74b0c1241e645b3c1
|
||||
timeCreated: 1455827111
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -815,13 +815,25 @@ if (typeof Object.create != 'function') {
|
||||
};
|
||||
|
||||
SymbolInst.prototype = Object.create(ElementInst.prototype);
|
||||
|
||||
SymbolInst.prototype.get_symbol_type = function () {
|
||||
var symbol_type = this.inst.symbolType;
|
||||
if ( symbol_type == "movie clip" ) {
|
||||
return "movieclip";
|
||||
} else if ( symbol_type == "graphic" ) {
|
||||
return "graphic";
|
||||
} else {
|
||||
throw "Unsupported symbol type ({0})!"
|
||||
.format(symbol_type);
|
||||
}
|
||||
};
|
||||
|
||||
SymbolInst.prototype.export_description = function (xml_node) {
|
||||
ft.type_assert(xml_node, XmlNode);
|
||||
var instance_node = ElementInst.prototype.export_description.call(this, xml_node)
|
||||
.child("instance")
|
||||
.attr("type" , "symbol")
|
||||
.attr("symbol_type", this.inst.symbolType)
|
||||
.attr("symbol_type", this.get_symbol_type())
|
||||
.attr("asset" , this.uniqueIds.get_string_id(this.inst.libraryItem.name))
|
||||
.attr("visible" , this.inst.visible)
|
||||
.attr("blend_mode" , this.inst.blendMode);
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
<Properties StartupItem="Assembly-CSharp.csproj">
|
||||
<MonoDevelop.Ide.Workspace ActiveConfiguration="Debug" PreferredExecutionTarget="Unity.Instance.Unity Editor" />
|
||||
<MonoDevelop.Ide.Workbench ActiveDocument="Assets/FlashTools/Scripts/Internal/Editor/FlashAnimAssetEditor.cs">
|
||||
<MonoDevelop.Ide.Workbench ActiveDocument="Assets/FlashTools/Scripts/Internal/Editor/FlashAnimPostprocessor.cs">
|
||||
<Files>
|
||||
<File FileName="Assets/FlashTools/Scripts/Internal/Editor/FlashAnimAssetEditor.cs" Line="6" Column="2" />
|
||||
<File FileName="Assets/FlashTools/Scripts/Internal/Editor/FlashAnimPostprocessor.cs" Line="26" Column="20" />
|
||||
<File FileName="Assets/FlashTools/Scripts/Internal/Editor/FlashAnimEditor.cs" Line="3" Column="32" />
|
||||
<File FileName="Assets/FlashTools/Scripts/FlashAnimAsset.cs" Line="12" Column="21" />
|
||||
</Files>
|
||||
</MonoDevelop.Ide.Workbench>
|
||||
<MonoDevelop.Ide.DebuggingService.Breakpoints>
|
||||
|
||||
Reference in New Issue
Block a user