From 9e24c12422814712e7db11e3d753950946748de8 Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Wed, 17 Aug 2016 15:14:29 +0700 Subject: [PATCH] doabs tag wip --- Assembly-CSharp-Editor.csproj | 2 + .../Examples/Animations/Tests/8_actions.fla | Bin 0 -> 24694 bytes .../Animations/Tests/8_actions.fla.meta | 8 + .../Editor/SwfTools/SwfContextExecuter.cs | 12 +- .../Editor/SwfTools/SwfStreamReader.cs | 8 +- .../Editor/SwfTools/SwfTags/DoABCTag.cs | 794 ++++++++++++++++++ .../Editor/SwfTools/SwfTags/DoABCTag.cs.meta | 12 + .../Editor/SwfTools/SwfTags/SwfTagBase.cs | 6 +- .../Editor/SwfTools/SwfTags/SwfTagVisitor.cs | 2 + .../Editor/SwfTools/SwfTags/SymbolClassTag.cs | 41 + .../SwfTools/SwfTags/SymbolClassTag.cs.meta | 12 + .../Editor/SwfTools/SwfTags/UnknownTag.cs | 4 +- Tools/FlashExport.jsfl | 29 - 13 files changed, 895 insertions(+), 35 deletions(-) create mode 100644 Assets/FlashTools/Examples/Animations/Tests/8_actions.fla create mode 100644 Assets/FlashTools/Examples/Animations/Tests/8_actions.fla.meta create mode 100644 Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/DoABCTag.cs create mode 100644 Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/DoABCTag.cs.meta create mode 100644 Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/SymbolClassTag.cs create mode 100644 Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/SymbolClassTag.cs.meta diff --git a/Assembly-CSharp-Editor.csproj b/Assembly-CSharp-Editor.csproj index e787c16..7d33f70 100644 --- a/Assembly-CSharp-Editor.csproj +++ b/Assembly-CSharp-Editor.csproj @@ -61,6 +61,7 @@ + @@ -73,6 +74,7 @@ + diff --git a/Assets/FlashTools/Examples/Animations/Tests/8_actions.fla b/Assets/FlashTools/Examples/Animations/Tests/8_actions.fla new file mode 100644 index 0000000000000000000000000000000000000000..ac61b6061f050bb4f9da00dda4a3b7181d549b3a GIT binary patch literal 24694 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 YBHbOYhe0y2;izGM2H*_)4i4^r0Kc6SuK)l5 literal 0 HcmV?d00001 diff --git a/Assets/FlashTools/Examples/Animations/Tests/8_actions.fla.meta b/Assets/FlashTools/Examples/Animations/Tests/8_actions.fla.meta new file mode 100644 index 0000000..5085cc5 --- /dev/null +++ b/Assets/FlashTools/Examples/Animations/Tests/8_actions.fla.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 234e21b51b9db45c6882667df9fb6d40 +timeCreated: 1471328196 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfContextExecuter.cs b/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfContextExecuter.cs index a6156cf..932d2f0 100644 --- a/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfContextExecuter.cs +++ b/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfContextExecuter.cs @@ -196,8 +196,18 @@ namespace FlashTools.Internal.SwfTools { return dl; } + public SwfDisplayList Visit(SymbolClassTag tag, SwfDisplayList dl) { + Debug.Log(tag); + return dl; + } + public SwfDisplayList Visit(DefineSceneAndFrameLabelDataTag tag, SwfDisplayList dl) { - Debug.LogWarning(tag); + Debug.Log(tag); + return dl; + } + + public SwfDisplayList Visit(DoABCTag tag, SwfDisplayList dl) { + Debug.Log(tag); return dl; } diff --git a/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfStreamReader.cs b/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfStreamReader.cs index 42ad74f..726b9ed 100644 --- a/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfStreamReader.cs +++ b/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfStreamReader.cs @@ -66,7 +66,9 @@ namespace FlashTools.Internal.SwfTools { } public byte[] ReadBytes(int count) { - return _binaryReader.ReadBytes(count); + return count <= 0 + ? new byte[0] + : _binaryReader.ReadBytes(count); } public char ReadChar() { @@ -74,7 +76,9 @@ namespace FlashTools.Internal.SwfTools { } public char[] ReadChars(int count) { - return _binaryReader.ReadChars(count); + return count <= 0 + ? new char[0] + : _binaryReader.ReadChars(count); } public short ReadInt16() { diff --git a/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/DoABCTag.cs b/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/DoABCTag.cs new file mode 100644 index 0000000..0cdd6f5 --- /dev/null +++ b/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/DoABCTag.cs @@ -0,0 +1,794 @@ +using UnityEngine; +using System; +using System.Collections.Generic; + +namespace FlashTools.Internal.SwfTools.SwfTags { + public class DoABCTag : SwfTagBase { + public bool ExecuteImmediately; + public string Name; + public ABCFileInfo ABCFile; + + public override SwfTagType TagType { + get { return SwfTagType.DoABC; } + } + + public override TResult AcceptVistor(SwfTagVisitor visitor, TArg arg) { + return visitor.Visit(this, arg); + } + + public override string ToString() { + return "DoABC."; + } + + public static DoABCTag Create(SwfStreamReader reader) { + const int kDoAbcLazyInitializeFlag = 1; + var flags = reader.ReadUInt32(); + var name = reader.ReadString(); + var abc_file = ParseABCFileInfo(reader); + return new DoABCTag{ + ExecuteImmediately = (flags & kDoAbcLazyInitializeFlag) == 0, + Name = name, + ABCFile = abc_file + }; + } + + // ------------------------------------------------------------------------ + // + // ABCFile data + // + // ------------------------------------------------------------------------ + + public class ABCFileInfo { + public ushort MinorVersion; + public ushort MajorVersion; + public ConstantPoolInfo ConstantPool; + public List Methods; + public List Metadata; + public List Instances; + public List Classes; + public List Scripts; + public List MethodBodies; + } + + public class ConstantPoolInfo { + public List Integers; + public List UIntegers; + public List Doubles; + public List Strings; + public List Namespaces; + public List NSSets; + public List Multinames; + } + + public class NamespaceInfo { + public enum Kinds : byte { + Namespace = 0x08, + PackageNamespace = 0x16, + PackageInternalNs = 0x17, + ProtectedNamespace = 0x18, + ExplicitNamespace = 0x19, + StaticProtectedNs = 0x1A, + PrivateNs = 0x05 + } + public Kinds Kind = Kinds.Namespace; + public uint Name = 0; + } + + public class NSSetInfo { + public List Ns = new List(); + } + + public class MultinameInfo { + public enum Kinds : byte { + QName = 0x07, + QNameA = 0x0D, + RTQName = 0x0F, + RTQNameA = 0x10, + RTQNameL = 0x11, + RTQNameLA = 0x12, + Multiname = 0x09, + MultinameA = 0x0E, + MultinameL = 0x1B, + MultinameLA = 0x1C, + Multiname0x1D = 0x1D + } + public class TypeQName { + public uint Namespace; + public uint NameIndex; + } + public class TypeRTQName { + public uint NameIndex; + } + public class TypeRTQNameL { + } + public class TypeMultiname { + public uint NameIndex; + public uint NsSet; + } + public class TypeMultinameL { + public uint NsSet; + } + public class Type0x1D { + public uint NameIndex; + public List TypeIndices; + } + public Kinds Kind = Kinds.RTQNameL; + public TypeQName KindQName = null; + public TypeRTQName KindRTQName = null; + public TypeRTQNameL KindRTQNameL = new TypeRTQNameL(); + public TypeMultiname KindMultiname = null; + public TypeMultinameL KindMultinameL = null; + public Type0x1D Kind0x1D = null; + } + + public class MethodInfo { + public struct OptionInfo { + public uint Val; + public byte Kind; + } + public uint ReturnType; + public List ParamTypes; + public uint Name; + public bool FlagNeedArguments; + public bool FlagActivation; + public bool FlagNeedRest; + public bool FlagHasOptional; + public bool FlagSetDxns; + public bool FlagHasParamNames; + public List Options; + public List ParamNames; + } + + public class MetadataInfo { + public struct ItemInfo { + public uint Key; + public uint Value; + } + public uint Name; + public List Items; + } + + public class InstanceInfo { + public uint Name; + public uint Supername; + public bool FlagClassSealed; + public bool FlagClassFinal; + public bool FlagClassInterface; + public bool FlagClassProtectedNs; + public uint ProtectedNs; + public List Interface; + public uint Iinit; + public List Traits; + } + + public class TraitInfo { + public enum Kinds : byte { + Slot = 0, + Method = 1, + Getter = 2, + Setter = 3, + Class = 4, + Function = 5, + Const = 6, + } + public class KindSlot { + public uint SlotId; + public uint TypeName; + public uint Vindex; + public byte Vkind; + } + + public class KindClass { + public uint SlotId; + public uint ClassI; + } + + public class KindFunction { + public uint SlotId; + public uint Funciton; + } + + public class KindMethod { + public uint DispID; + public uint Method; + } + public uint Name; + public Kinds Kind; + public bool AttrFinal; + public bool AttrOverride; + public bool AttrMetadata; + public KindSlot Slot; + public KindClass Class; + public KindFunction Function; + public KindMethod Method; + public List Metadata; + } + + public class ClassInfo { + public uint Cinit; + public List Traits; + } + + public class ScriptInfo { + public uint Init; + public List Traits; + } + + public class MethodBodyInfo { + public uint Method; + public uint MaxStack; + public uint LocalCount; + public uint InitScopeDepth; + public uint MaxScopeDepth; + public byte[] Code; + public List Exceptions; + public List Traits; + } + + public class ExceptionInfo { + public uint From; + public uint To; + public uint Target; + public uint ExcType; + public uint VarName; + } + + // ------------------------------------------------------------------------ + // + // ABCFile parsers + // + // ------------------------------------------------------------------------ + + /*abcFile{ + u16 minor_version + u16 major_version + cpool_info constant_pool + u30 method_count + method_info method[method_count] + u30 metadata_count + metadata_info metadata[metadata_count] + u30 class_count + instance_info instance[class_count] + class_info class[class_count] + u30 script_count + script_info script[script_count] + u30 method_body_count + method_body_info method_body[method_body_count] + }*/ + static ABCFileInfo ParseABCFileInfo(SwfStreamReader reader) { + var abc_file_info = new ABCFileInfo(); + + abc_file_info.MinorVersion = reader.ReadUInt16(); + abc_file_info.MajorVersion = reader.ReadUInt16(); + + abc_file_info.ConstantPool = ParseConstantPoolInfo(reader); + + abc_file_info.Methods = new List((int)reader.ReadEncodedU32()); + for ( var i = 0; i < abc_file_info.Methods.Capacity; ++i ) { + abc_file_info.Methods.Add(ParseMethodInfo(reader)); + } + + abc_file_info.Metadata = new List((int)reader.ReadEncodedU32()); + for ( var i = 0; i < abc_file_info.Metadata.Capacity; ++i ) { + abc_file_info.Metadata.Add(ParseMetadataInfo(reader)); + } + + abc_file_info.Instances = new List((int)reader.ReadEncodedU32()); + abc_file_info.Classes = new List(abc_file_info.Instances.Capacity); + for ( var i = 0; i < abc_file_info.Instances.Capacity; ++i ) { + abc_file_info.Instances.Add(ParseInstanceInfo(reader)); + abc_file_info.Classes.Add(ParseClassInfo(reader)); + } + + abc_file_info.Scripts = new List((int)reader.ReadEncodedU32()); + for ( var i = 0; i < abc_file_info.Scripts.Capacity; ++i ) { + abc_file_info.Scripts.Add(ParseScriptInfo(reader)); + } + + abc_file_info.MethodBodies = new List((int)reader.ReadEncodedU32()); + for ( var i = 0; i < abc_file_info.MethodBodies.Capacity; ++i ) { + abc_file_info.MethodBodies.Add(ParseMethodBodyInfo(reader)); + } + return abc_file_info; + } + + /*cpool_info{ + u30 int_count + s32 integer[int_count] + u30 uint_count + u32 uinteger[uint_count] + u30 double_count + d64 double[double_count] + u30 string_count + string_info string[string_count] + u30 namespace_count + namespace_info namespace[namespace_count] + u30 ns_set_count + ns_set_info ns_set[ns_set_count] + u30 multiname_count + multiname_info multiname[multiname_count] + }*/ + static ConstantPoolInfo ParseConstantPoolInfo(SwfStreamReader reader) { + var integer_count = reader.ReadEncodedU32(); + var integers = new List((int)integer_count); + integers.Add(0); + for ( var i = 1; i < integer_count; ++i ) { + integers.Add(reader.ReadInt32()); + } + + var uinteger_count = reader.ReadEncodedU32(); + var uintegers = new List((int)uinteger_count); + uintegers.Add(0); + for ( var i = 1; i < uinteger_count; ++i ) { + uintegers.Add(reader.ReadUInt32()); + } + + var double_count = reader.ReadEncodedU32(); + var doubles = new List((int)double_count); + doubles.Add(double.NaN); + for ( var i = 1; i < double_count; ++i ) { + doubles.Add(reader.ReadDouble64()); + } + + var string_count = reader.ReadEncodedU32(); + var strings = new List((int)string_count); + strings.Add(string.Empty); + for ( var i = 1; i < string_count; ++i ) { + strings.Add(ParseStringInfo(reader)); + } + + var namespace_count = reader.ReadEncodedU32(); + var namespaces = new List((int)namespace_count); + namespaces.Add(new NamespaceInfo()); + for ( var i = 1; i < namespace_count; ++i ) { + namespaces.Add(ParseNamespaceInfo(reader)); + } + + var ns_set_count = reader.ReadEncodedU32(); + var ns_sets = new List((int)ns_set_count); + ns_sets.Add(new NSSetInfo()); + for ( var i = 1; i < ns_set_count; ++i ) { + ns_sets.Add(ParseNSSetInfo(reader)); + } + + var multiname_count = reader.ReadEncodedU32(); + var multinames = new List((int)multiname_count); + multinames.Add(new MultinameInfo()); + for ( var i = 1; i < multiname_count; ++i ) { + multinames.Add(ParseMultinameInfo(reader)); + } + + return new ConstantPoolInfo{ + Integers = integers, + UIntegers = uintegers, + Doubles = doubles, + Strings = strings, + Namespaces = namespaces, + NSSets = ns_sets, + Multinames = multinames}; + } + + /*string_info{ + u30 size + u8 utf8[size] + }*/ + static string ParseStringInfo(SwfStreamReader reader) { + var size = reader.ReadEncodedU32(); + var bytes = reader.ReadBytes((int)size); + return System.Text.Encoding.UTF8.GetString(bytes); + } + + /*namespace_info{ + u8 kind + u30 name + }*/ + static NamespaceInfo ParseNamespaceInfo(SwfStreamReader reader) { + var kind_id = reader.ReadByte(); + if ( !Enum.IsDefined(typeof(NamespaceInfo.Kinds), (byte)kind_id) ) { + throw new UnityException(string.Format( + "Incorrect NamespaceInfo.Kinds id: {0}", + kind_id)); + } + var name = reader.ReadEncodedU32(); + return new NamespaceInfo{ + Kind = (NamespaceInfo.Kinds)kind_id, + Name = name}; + } + + /*ns_set_info{ + u30 count + u30 ns[count] + }*/ + static NSSetInfo ParseNSSetInfo(SwfStreamReader reader) { + var ns = new List((int)reader.ReadEncodedU32()); + for ( var i = 0; i < ns.Capacity; ++i ) { + ns.Add(reader.ReadEncodedU32()); + } + return new NSSetInfo{ + Ns = ns}; + } + + /*multiname_info { + u8 kind + u8 data[] + } + multiname_kind_QName { + u30 ns + u30 name + } + multiname_kind_RTQName { + u30 name + } + multiname_kind_RTQNameL { + } + multiname_kind_Multiname { + u30 name + u30 ns_set + } + multiname_kind_MultinameL { + u30 ns_set + }*/ + static MultinameInfo ParseMultinameInfo(SwfStreamReader reader) { + var info = new MultinameInfo(); + + var kind_id = reader.ReadByte(); + if ( !Enum.IsDefined(typeof(MultinameInfo.Kinds), (byte)kind_id) ) { + throw new UnityException(string.Format( + "Incorrect MultinameInfo.Kinds id: {0}", + kind_id)); + } + + info.Kind = (MultinameInfo.Kinds)kind_id; + switch ( info.Kind ) { + case MultinameInfo.Kinds.QName: + case MultinameInfo.Kinds.QNameA: + { + info.KindQName = new MultinameInfo.TypeQName(); + info.KindQName.Namespace = reader.ReadEncodedU32(); + info.KindQName.NameIndex = reader.ReadEncodedU32(); + break; + } + case MultinameInfo.Kinds.RTQName: + case MultinameInfo.Kinds.RTQNameA: + { + info.KindRTQName = new MultinameInfo.TypeRTQName(); + info.KindRTQName.NameIndex = reader.ReadEncodedU32(); + break; + } + case MultinameInfo.Kinds.RTQNameL: + case MultinameInfo.Kinds.RTQNameLA: + { + info.KindRTQNameL = new MultinameInfo.TypeRTQNameL(); + break; + } + case MultinameInfo.Kinds.Multiname: + case MultinameInfo.Kinds.MultinameA: + { + info.KindMultiname = new MultinameInfo.TypeMultiname(); + info.KindMultiname.NameIndex = reader.ReadEncodedU32(); + info.KindMultiname.NsSet = reader.ReadEncodedU32(); + break; + } + case MultinameInfo.Kinds.MultinameL: + case MultinameInfo.Kinds.MultinameLA: + { + info.KindMultinameL = new MultinameInfo.TypeMultinameL(); + info.KindMultinameL.NsSet = reader.ReadEncodedU32(); + break; + } + case MultinameInfo.Kinds.Multiname0x1D: + { + info.Kind0x1D = new MultinameInfo.Type0x1D(); + info.Kind0x1D.NameIndex = reader.ReadEncodedU32(); + info.Kind0x1D.TypeIndices = new List((int)reader.ReadEncodedU32()); + for ( var i = 0; i < info.Kind0x1D.TypeIndices.Capacity; ++i ) { + info.Kind0x1D.TypeIndices.Add(reader.ReadEncodedU32()); + } + break; + } + default: + throw new UnityException(string.Format( + "Incorrect MultinameInfo.Kinds id: {0}", + kind_id)); + } + return info; + } + + /* + method_info + { + u30 param_count + u30 return_type + u30 param_type[param_count] + u30 name + u8 flags + option_info options + param_info param_names + } + option_info + { + u30 option_count + option_detail option[option_count] + } + option_detail + { + u30 val + u8 kind + } + param_info + { + u30 param_name[param_count] + }*/ + static MethodInfo ParseMethodInfo(SwfStreamReader reader) { + var info = new MethodInfo(); + var param_count = reader.ReadEncodedU32(); + info.ReturnType = reader.ReadEncodedU32(); + info.ParamTypes = new List((int)param_count); + for ( var i = 0; i < info.ParamTypes.Capacity; ++i ) { + info.ParamTypes.Add(reader.ReadEncodedU32()); + } + info.Name = reader.ReadEncodedU32(); + var flags = reader.ReadByte(); + info.FlagNeedArguments = ((flags & 0x01) != 0); + info.FlagActivation = ((flags & 0x02) != 0); + info.FlagNeedRest = ((flags & 0x04) != 0); + info.FlagHasOptional = ((flags & 0x08) != 0); + info.FlagSetDxns = ((flags & 0x40) != 0); + info.FlagHasParamNames = ((flags & 0x80) != 0); + if ( info.FlagHasOptional ) { + info.Options = new List((int)reader.ReadEncodedU32()); + for ( var i = 0; i < info.Options.Capacity; ++i ) { + info.Options.Add(new MethodInfo.OptionInfo{ + Val = reader.ReadEncodedU32(), + Kind = reader.ReadByte()}); + } + } else { + info.Options = new List(); + } + if ( info.FlagHasParamNames ) { + info.ParamNames = new List((int)param_count); + for ( var i = 0; i < info.ParamNames.Capacity; ++i ) { + info.ParamNames.Add(reader.ReadEncodedU32()); + } + } else { + info.ParamNames = new List(); + } + return info; + } + + /* + metadata_info + { + u30 name + u30 item_count + item_info items[item_count] + } + item_info + { + u30 key + u30 value + }*/ + static MetadataInfo ParseMetadataInfo(SwfStreamReader reader) { + var info = new MetadataInfo(); + info.Name = reader.ReadEncodedU32(); + info.Items = new List((int)reader.ReadEncodedU32()); + for ( var i = 0; i < info.Items.Capacity; ++i ) { + info.Items.Add(new MetadataInfo.ItemInfo{ + Key = reader.ReadEncodedU32(), + Value = reader.ReadEncodedU32()}); + } + return info; + } + + /* + traits_info + { + u30 name + u8 kind + u8 data[] + u30 metadata_count + u30 metadata[metadata_count] + }*/ + static List ParseTraitsInfo(SwfStreamReader reader) { + var traits = new List((int)reader.ReadEncodedU32()); + for ( var i = 0; i < traits.Capacity; ++i ) { + traits.Add(ParseTraitInfo(reader)); + } + return traits; + } + + static TraitInfo ParseTraitInfo(SwfStreamReader reader) { + var info = new TraitInfo(); + info.Name = reader.ReadEncodedU32(); + + var kind_attr = reader.ReadByte(); + var kind_id = (kind_attr & 0x0F); + var attr = ((kind_attr & 0xF0) >> 4); + + if ( !Enum.IsDefined(typeof(TraitInfo.Kinds), (byte)kind_id) ) { + throw new UnityException(string.Format( + "Incorrect TraitInfo.Kinds id: {0}", + kind_id)); + } + + info.Kind = (TraitInfo.Kinds)kind_id; + info.AttrFinal = (attr & 0x01) != 0; + info.AttrOverride = (attr & 0x02) != 0; + info.AttrMetadata = (attr & 0x04) != 0; + + var kind = (TraitInfo.Kinds)kind_id; + switch ( kind ) { + case TraitInfo.Kinds.Slot: + case TraitInfo.Kinds.Const: + { + info.Slot = new TraitInfo.KindSlot(); + info.Slot.SlotId = reader.ReadEncodedU32(); + info.Slot.TypeName = reader.ReadEncodedU32(); + info.Slot.Vindex = reader.ReadEncodedU32(); + if ( 0 != info.Slot.Vindex ) { + info.Slot.Vkind = reader.ReadByte(); + } else { + info.Slot.Vkind = 0; + } + break; + } + case TraitInfo.Kinds.Class: + { + info.Class = new TraitInfo.KindClass(); + info.Class.SlotId = reader.ReadEncodedU32(); + info.Class.ClassI = reader.ReadEncodedU32(); + break; + } + case TraitInfo.Kinds.Function: + { + info.Function = new TraitInfo.KindFunction(); + info.Function.SlotId = reader.ReadEncodedU32(); + info.Function.Funciton = reader.ReadEncodedU32(); + break; + } + case TraitInfo.Kinds.Method: + case TraitInfo.Kinds.Getter: + case TraitInfo.Kinds.Setter: + { + info.Method = new TraitInfo.KindMethod(); + info.Method.DispID = reader.ReadEncodedU32(); + info.Method.Method = reader.ReadEncodedU32(); + break; + } + default: + throw new UnityException(string.Format( + "Incorrect TraitInfo.Kinds id: {0}", + kind_id)); + } + if ( info.AttrMetadata ) { + info.Metadata = new List((int)reader.ReadEncodedU32()); + for ( var i = 0; i < info.Metadata.Capacity; ++i ) { + info.Metadata.Add(reader.ReadEncodedU32()); + } + } else { + info.Metadata = new List(); + } + return info; + } + + /* + exception_info + { + u30 from + u30 to + u30 target + u30 exc_type + u30 var_name + }*/ + static List ParseExceptionsInfo(SwfStreamReader reader) { + var exceptions = new List((int)reader.ReadEncodedU32()); + for ( var i = 0; i < exceptions.Capacity; ++i ) { + exceptions.Add(ParseExceptionInfo(reader)); + } + return exceptions; + } + + static ExceptionInfo ParseExceptionInfo(SwfStreamReader reader) { + var info = new ExceptionInfo(); + info.From = reader.ReadEncodedU32(); + info.To = reader.ReadEncodedU32(); + info.Target = reader.ReadEncodedU32(); + info.ExcType = reader.ReadEncodedU32(); + info.VarName = reader.ReadEncodedU32(); + return info; + } + + /* + instance_info + { + u30 name + u30 super_name + u8 flags + u30 protectedNs + u30 intrf_count + u30 interface[intrf_count] + u30 iinit + u30 trait_count + traits_info trait[trait_count] + }*/ + static InstanceInfo ParseInstanceInfo(SwfStreamReader reader) { + var info = new InstanceInfo(); + info.Name = reader.ReadEncodedU32(); + info.Supername = reader.ReadEncodedU32(); + var flags = reader.ReadByte(); + info.FlagClassSealed = (flags & 0x01 ) != 0; + info.FlagClassFinal = (flags & 0x02 ) != 0; + info.FlagClassInterface = (flags & 0x04 ) != 0; + info.FlagClassProtectedNs = (flags & 0x08 ) != 0; + if ( info.FlagClassProtectedNs ) { + info.ProtectedNs = reader.ReadEncodedU32(); + } else { + info.ProtectedNs = 0; + } + + info.Interface = new List((int)reader.ReadEncodedU32()); + for ( var i = 0; i < info.Interface.Capacity; ++i ) { + info.Interface.Add(reader.ReadEncodedU32()); + } + info.Iinit = reader.ReadEncodedU32(); + info.Traits = ParseTraitsInfo(reader); + return info; + } + + /* + class_info + { + u30 cinit + u30 trait_count + traits_info traits[trait_count] + }*/ + static ClassInfo ParseClassInfo(SwfStreamReader reader) { + var info = new ClassInfo(); + info.Cinit = reader.ReadEncodedU32(); + info.Traits = ParseTraitsInfo(reader); + return info; + } + + /* + script_info + { + u30 init + u30 trait_count + traits_info trait[trait_count] + }*/ + static ScriptInfo ParseScriptInfo(SwfStreamReader reader) { + var info = new ScriptInfo(); + info.Init = reader.ReadEncodedU32(); + info.Traits = ParseTraitsInfo(reader); + return info; + } + + /* + method_body_info + { + u30 method + u30 max_stack + u30 local_count + u30 init_scope_depth + u30 max_scope_depth + u30 code_length + u8 code[code_length] + u30 exception_count + exception_info exception[exception_count] + u30 trait_count + traits_info trait[trait_count] + }*/ + static MethodBodyInfo ParseMethodBodyInfo(SwfStreamReader reader) { + var info = new MethodBodyInfo(); + info.Method = reader.ReadEncodedU32(); + info.MaxStack = reader.ReadEncodedU32(); + info.LocalCount = reader.ReadEncodedU32(); + info.InitScopeDepth = reader.ReadEncodedU32(); + info.MaxScopeDepth = reader.ReadEncodedU32(); + info.Code = reader.ReadBytes((int)reader.ReadEncodedU32()); + info.Exceptions = ParseExceptionsInfo(reader); + info.Traits = ParseTraitsInfo(reader); + return info; + } + } +} \ No newline at end of file diff --git a/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/DoABCTag.cs.meta b/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/DoABCTag.cs.meta new file mode 100644 index 0000000..a48d57d --- /dev/null +++ b/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/DoABCTag.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 96e986b6c0c7d4d07bc5b310e85c4a34 +timeCreated: 1471328562 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/SwfTagBase.cs b/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/SwfTagBase.cs index 0f63235..a7d84f9 100644 --- a/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/SwfTagBase.cs +++ b/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/SwfTagBase.cs @@ -26,7 +26,7 @@ //ScriptLimits = 65, //SetTabIndex = 66, //ImportAssets2 = 71, - //SymbolClass = 76, + SymbolClass = 76, //Metadata = 77, //DefineScalingGrid = 78, DefineSceneAndFrameLabelData = 86, @@ -37,7 +37,7 @@ //DoAction = 12, //DoInitAction = 59, - //DoABC = 82, + DoABC = 82, // ----------------------------- // Shape @@ -165,7 +165,9 @@ case (int)SwfTagType.SetBackgroundColor: return SetBackgroundColorTag.Create(reader); case (int)SwfTagType.FrameLabel: return FrameLabelTag.Create(reader); case (int)SwfTagType.End: return EndTag.Create(reader); + case (int)SwfTagType.SymbolClass: return SymbolClassTag.Create(reader); case (int)SwfTagType.DefineSceneAndFrameLabelData: return DefineSceneAndFrameLabelDataTag.Create(reader); + case (int)SwfTagType.DoABC: return DoABCTag.Create(reader); case (int)SwfTagType.DefineShape: return DefineShapeTag.Create(reader); case (int)SwfTagType.DefineShape2: return DefineShape2Tag.Create(reader); case (int)SwfTagType.DefineShape3: return DefineShape3Tag.Create(reader); diff --git a/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/SwfTagVisitor.cs b/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/SwfTagVisitor.cs index 910f2bf..2950cab 100644 --- a/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/SwfTagVisitor.cs +++ b/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/SwfTagVisitor.cs @@ -9,7 +9,9 @@ TResult Visit(SetBackgroundColorTag tag, TArg arg); TResult Visit(FrameLabelTag tag, TArg arg); TResult Visit(EndTag tag, TArg arg); + TResult Visit(SymbolClassTag tag, TArg arg); TResult Visit(DefineSceneAndFrameLabelDataTag tag, TArg arg); + TResult Visit(DoABCTag tag, TArg arg); TResult Visit(DefineShapeTag tag, TArg arg); TResult Visit(DefineShape2Tag tag, TArg arg); TResult Visit(DefineShape3Tag tag, TArg arg); diff --git a/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/SymbolClassTag.cs b/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/SymbolClassTag.cs new file mode 100644 index 0000000..e695b50 --- /dev/null +++ b/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/SymbolClassTag.cs @@ -0,0 +1,41 @@ +using System.Collections.Generic; + +namespace FlashTools.Internal.SwfTools.SwfTags { + public class SymbolClassTag : SwfTagBase { + public struct SymbolData { + public ushort Tag; + public string Name; + } + + public List Symbols; + + public override SwfTagType TagType { + get { return SwfTagType.SymbolClass; } + } + + public override TResult AcceptVistor(SwfTagVisitor visitor, TArg arg) { + return visitor.Visit(this, arg); + } + + public override string ToString() { + return string.Format( + "SymbolClass." + + "Symbols: {0}", + Symbols.Count); + } + + public static SymbolClassTag Create(SwfStreamReader reader) { + var symbol_count = reader.ReadUInt16(); + var symbols = new List(symbol_count); + for ( var i = 0; i < symbols.Capacity; ++i ) { + symbols.Add(new SymbolData{ + Tag = reader.ReadUInt16(), + Name = reader.ReadString() + }); + } + return new SymbolClassTag{ + Symbols = symbols + }; + } + } +} \ No newline at end of file diff --git a/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/SymbolClassTag.cs.meta b/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/SymbolClassTag.cs.meta new file mode 100644 index 0000000..42aab3e --- /dev/null +++ b/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/SymbolClassTag.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 11b01acac23de4201b4dfdfaa58b8faf +timeCreated: 1471329323 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/UnknownTag.cs b/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/UnknownTag.cs index 2deecb2..f0d57b5 100644 --- a/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/UnknownTag.cs +++ b/Assets/FlashTools/Scripts/Internal/Editor/SwfTools/SwfTags/UnknownTag.cs @@ -12,7 +12,9 @@ public override string ToString() { return string.Format( - "TagId: {0}", TagId); + "UnknownTag. " + + "TagId: {0}", + TagId); } public static UnknownTag Create(int tag_id) { diff --git a/Tools/FlashExport.jsfl b/Tools/FlashExport.jsfl index 88395e3..91d26e0 100644 --- a/Tools/FlashExport.jsfl +++ b/Tools/FlashExport.jsfl @@ -320,20 +320,8 @@ if (!Function.prototype.bind) { var fttim = {}; - fttim.remove_empty_layers = function(timeline) { - ft.type_assert(timeline, Timeline); - var layers = timeline.layers; - for ( var i = layers.length - 1; i >= 0; --i ) { - if (ftlay.is_empty(layers[i])) { - timeline.deleteLayer(i); - layers = timeline.layers; - } - } - }; - fttim.prepare_keyframes = function(timeline) { ft.type_assert(timeline, Timeline); - fttim.remove_empty_layers(timeline); if ( timeline.layers.length > 0 && timeline.frameCount > 1 ) { timeline.selectAllFrames(); //timeline.convertToKeyframes(); @@ -379,23 +367,6 @@ if (!Function.prototype.bind) { }.bind(this)); }; - ftlay.is_empty = function(layer) { - if ( !layer.visible ) { - return true; - } - if ( layer.layerType == "guide" || layer.layerType == "mask" || layer.layerType == "folder" ) { - return false; - } - var frames = layer.frames; - for ( var i = 0; i < frames.length; ++i ) { - var frame = frames[i]; - if ( frame.elements.length != 0 ) { - return false; - } - } - return true; - }; - ftlay.convert_shapes = function(layer, timeline, document) { ftlay.do_in_unlocked(layer, function() { ft.array_foreach(layer.frames, function(frame, index) {