From 4764fb88c6fe16b76829220867eb1b459edd6a3f Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Wed, 9 Mar 2016 03:34:24 +0600 Subject: [PATCH] swf parsing begin --- Assembly-CSharp-Editor.csproj | 6 + Assembly-CSharp.csproj | 3 + .../Examples/Animations/Tests/swf_test.fla | Bin 0 -> 15301 bytes .../Animations/Tests/swf_test.fla.meta | 8 + .../Editor/FlashAnimSwfPostprocessor.cs | 35 + .../Editor/FlashAnimSwfPostprocessor.cs.meta | 12 + .../Internal/Editor/FlashAnimSwfTags.cs | 758 ++++++++++++++++++ .../Internal/Editor/FlashAnimSwfTags.cs.meta | 12 + .../Internal/Editor/FlashAnimSwfUtils.cs | 400 +++++++++ .../Internal/Editor/FlashAnimSwfUtils.cs.meta | 12 + Assets/Plugins.meta | 9 + Assets/Plugins/Ionic.Zip.Unity.dll | Bin 0 -> 249856 bytes Assets/Plugins/Ionic.Zip.Unity.dll.meta | 24 + Tools/FlashExport.jsfl | 213 +++++ 14 files changed, 1492 insertions(+) create mode 100644 Assets/FlashTools/Examples/Animations/Tests/swf_test.fla create mode 100644 Assets/FlashTools/Examples/Animations/Tests/swf_test.fla.meta create mode 100644 Assets/FlashTools/Scripts/Internal/Editor/FlashAnimSwfPostprocessor.cs create mode 100644 Assets/FlashTools/Scripts/Internal/Editor/FlashAnimSwfPostprocessor.cs.meta create mode 100644 Assets/FlashTools/Scripts/Internal/Editor/FlashAnimSwfTags.cs create mode 100644 Assets/FlashTools/Scripts/Internal/Editor/FlashAnimSwfTags.cs.meta create mode 100644 Assets/FlashTools/Scripts/Internal/Editor/FlashAnimSwfUtils.cs create mode 100644 Assets/FlashTools/Scripts/Internal/Editor/FlashAnimSwfUtils.cs.meta create mode 100644 Assets/Plugins.meta create mode 100644 Assets/Plugins/Ionic.Zip.Unity.dll create mode 100644 Assets/Plugins/Ionic.Zip.Unity.dll.meta create mode 100644 Tools/FlashExport.jsfl diff --git a/Assembly-CSharp-Editor.csproj b/Assembly-CSharp-Editor.csproj index 843a48e..974f414 100644 --- a/Assembly-CSharp-Editor.csproj +++ b/Assembly-CSharp-Editor.csproj @@ -49,6 +49,9 @@ + + + /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/Advertisements/Editor/UnityEditor.Advertisements.dll @@ -103,6 +106,9 @@ /Applications/Unity/PlaybackEngines/MacStandaloneSupport/UnityEditor.OSXStandalone.Extensions.dll + + + /Users/matov/Programming/Projects/unityflash/Assets/Plugins/Ionic.Zip.Unity.dll diff --git a/Assembly-CSharp.csproj b/Assembly-CSharp.csproj index b0d445b..eac836c 100644 --- a/Assembly-CSharp.csproj +++ b/Assembly-CSharp.csproj @@ -53,6 +53,9 @@ /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/Networking/UnityEngine.Networking.dll + + + /Users/matov/Programming/Projects/unityflash/Assets/Plugins/Ionic.Zip.Unity.dll diff --git a/Assets/FlashTools/Examples/Animations/Tests/swf_test.fla b/Assets/FlashTools/Examples/Animations/Tests/swf_test.fla new file mode 100644 index 0000000000000000000000000000000000000000..603f6627cfc143c083783e800da9257aaa10932d GIT binary patch literal 15301 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 Path.GetExtension(p).ToLower().Equals(".swf")); + foreach ( var swf_asset_path in swf_asset_paths ) { + SwfAssetProcess(swf_asset_path); + } + } + + static void SwfAssetProcess(string swf_asset) { + Debug.LogFormat("SwfAssetProcess: {0}", swf_asset); + var reader = new SwfStreamReader(swf_asset); + var header = SwfHeader.Read(reader); + Debug.LogFormat("Header: {0}", header); + while ( !reader.IsEOF ) { + var tag_data = SwfTagData.Read(reader); + var tag = SwfTagBase.Create(tag_data); + Debug.LogFormat("Tag: {0} - {1}", tag.TagType.ToString(), tag.ToString()); + } + } + } +} diff --git a/Assets/FlashTools/Scripts/Internal/Editor/FlashAnimSwfPostprocessor.cs.meta b/Assets/FlashTools/Scripts/Internal/Editor/FlashAnimSwfPostprocessor.cs.meta new file mode 100644 index 0000000..cbe9645 --- /dev/null +++ b/Assets/FlashTools/Scripts/Internal/Editor/FlashAnimSwfPostprocessor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 27c44c175a74f4707bafa0bb1a8d47f7 +timeCreated: 1457365970 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/FlashTools/Scripts/Internal/Editor/FlashAnimSwfTags.cs b/Assets/FlashTools/Scripts/Internal/Editor/FlashAnimSwfTags.cs new file mode 100644 index 0000000..f5e834e --- /dev/null +++ b/Assets/FlashTools/Scripts/Internal/Editor/FlashAnimSwfTags.cs @@ -0,0 +1,758 @@ +using System.IO; +using System.Collections.Generic; +using Ionic.Zlib; + +namespace FlashTools.Internal { + enum SwfTagType : ushort { + // + // Display list + // + PlaceObject = 4, + PlaceObject2 = 26, + PlaceObject3 = 70, + RemoveObject = 5, + RemoveObject2 = 28, + ShowFrame = 1, + + // + // Control + // + SetBackgroundColor = 9, + FrameLabel = 43, + //Protect = 24, + End = 0, + //ExportAssets = 56, + //ImportAssets = 57, + //EnableDebugger = 58, + //EnableDebugger2 = 64, + //ScriptLimits = 65, + SetTabIndex = 66, + //ImportAssets2 = 71, + //SymbolClass = 76, + //Metadata = 77, + DefineScalingGrid = 78, + DefineSceneAndFrameLabelData = 86, + + // + // Actions + // + //DoAction = 12, + //DoInitAction = 59, + //DoABC = 82, + + // + // Shape + // + DefineShape = 2, + DefineShape2 = 22, + DefineShape3 = 32, + DefineShape4 = 83, + + // + // Bitmaps + // + DefineBits = 6, + JPEGTables = 8, + DefineBitsJPEG2 = 21, + DefineBitsJPEG3 = 35, + DefineBitsLossless = 20, + DefineBitsLossless2 = 36, + DefineBitsJPEG4 = 90, + + // + // Shape Morphing + // + //DefineMorphShape = 46, + //DefineMorphShape2 = 84, + + // + // Fonts and Text + // + //DefineFont = 10, + //DefineFontInfo = 13, + //DefineFontInfo2 = 62, + //DefineFont2 = 48, + //DefineFont3 = 75, + //DefineFontAlignZones = 73, + //DefineFontName = 88, + //DefineText = 11, + //DefineText2 = 33, + //DefineEditText = 37, + //CSMTextSettings = 74, + //DefineFont4 = 91, + + // + // Sounds + // + //DefineSound = 14, + //StartSound = 15, + //StartSound2 = 89, + //SoundStreamHead = 18, + //SoundStreamHead2 = 45, + //SoundStreamBlock = 19, + + // + // Buttons + // + //DefineButton = 7, + //DefineButton2 = 34, + //DefineButtonCxform = 23, + //DefineButtonSound = 17, + + // + // Sprites and Movie Clips + // + DefineSprite = 39, + + // + // Video + // + //DefineVideoStream = 60, + //VideoFrame = 61, + + // + // Metadata + // + FileAttributes = 69, + //EnableTelemetry = 93, + //DefineBinaryData = 87, + } + + struct SwfTagData { + public SwfTagType Type; + public byte[] Data; + + public static SwfTagData Read(SwfStreamReader reader) { + var type_and_size = reader.Reader.ReadUInt16(); + var type = (SwfTagType)(type_and_size >> 6); + var short_size = type_and_size & 0x3f; + var size = short_size < 0x3f ? short_size : reader.Reader.ReadInt32(); + var tag_data = reader.Reader.ReadBytes(size); + return new SwfTagData{Type = type, Data = tag_data}; + } + } + + abstract class SwfTagBase { + public abstract SwfTagType TagType { get; } + public static SwfTagBase Create(SwfTagData tag_data) { + var stream = new MemoryStream(tag_data.Data); + var reader = new SwfStreamReader(stream); + switch ( tag_data.Type ) { + case SwfTagType.PlaceObject: return PlaceObjectTag.Create(reader); + case SwfTagType.PlaceObject2: return PlaceObject2Tag.Create(reader); + case SwfTagType.PlaceObject3: return PlaceObject3Tag.Create(reader); + case SwfTagType.RemoveObject: return RemoveObjectTag.Create(reader); + case SwfTagType.RemoveObject2: return RemoveObject2Tag.Create(reader); + case SwfTagType.ShowFrame: return ShowFrameTag.Create(reader); + case SwfTagType.SetBackgroundColor: return SetBackgroundColorTag.Create(reader); + case SwfTagType.FrameLabel: return FrameLabelTag.Create(reader); + case SwfTagType.End: return EndTag.Create(reader); + case SwfTagType.SetTabIndex: return SetTabIndexTag.Create(reader); + case SwfTagType.DefineScalingGrid: return DefineScalingGridTag.Create(reader); + case SwfTagType.DefineSceneAndFrameLabelData: return DefineSceneAndFrameLabelDataTag.Create(reader); + case SwfTagType.DefineShape: return DefineShapeTag.Create(reader); + case SwfTagType.DefineShape2: return DefineShape2Tag.Create(reader); + case SwfTagType.DefineShape3: return DefineShape3Tag.Create(reader); + case SwfTagType.DefineShape4: return DefineShape4Tag.Create(reader); + //case DefineBits: + //case JPEGTables: + //case DefineBitsJPEG2: + //case DefineBitsJPEG3: + case SwfTagType.DefineBitsLossless: return DefineBitsLosslessTag.Create(reader); + case SwfTagType.DefineBitsLossless2: return DefineBitsLossless2Tag.Create(reader); + //case DefineBitsJPEG4: + case SwfTagType.DefineSprite: return DefineSpriteTag.Create(reader); + case SwfTagType.FileAttributes: return FileAttributesTag.Create(reader); + default: return UnknownTag.Create(tag_data.Type); + } + } + } + + class PlaceObjectTag : SwfTagBase { + public ushort CharacterId; + public ushort Depth; + public SwfMatrix Matrix; + public SwfColorTransformRGB ColorTransform; + + public override string ToString() { + return string.Format( + "CharacterId: {0}, Depth: {1}, Matrix: {2}, ColorTransform: {3}", + CharacterId, Depth, Matrix, ColorTransform); + } + + public override SwfTagType TagType { + get { return SwfTagType.PlaceObject; } + } + + public static PlaceObjectTag Create(SwfStreamReader reader) { + var tag = new PlaceObjectTag(); + tag.CharacterId = reader.Reader.ReadUInt16(); + tag.Depth = reader.Reader.ReadUInt16(); + tag.Matrix = SwfMatrix.Read(reader); + if ( !reader.IsEOF ) { + tag.ColorTransform = SwfColorTransformRGB.Read(reader); + } + return tag; + } + } + + class PlaceObject2Tag : SwfTagBase { + public bool HasClipActions; + public bool HasClipDepth; + public bool HasName; + public bool HasRatio; + public bool HasColorTransform; + public bool HasMatrix; + public bool HasCharacter; + public bool Move; + public ushort Depth; + public ushort CharacterId; + public SwfMatrix Matrix; + public SwfColorTransformRGBA ColorTransform; + public ushort Ratio; + public string Name; + public ushort ClipDepth; + public SwfClipActions ClipActions; + + public override string ToString() { + return string.Format( + "CharacterId: {0}, Depth: {1}, Matrix: {2}, ColorTransform: {3}", + CharacterId, Depth, Matrix, ColorTransform); + } + + public override SwfTagType TagType { + get { return SwfTagType.PlaceObject2; } + } + + public static PlaceObject2Tag Create(SwfStreamReader reader) { + var tag = new PlaceObject2Tag(); + tag.HasClipActions = reader.ReadBit(); + tag.HasClipDepth = reader.ReadBit(); + tag.HasName = reader.ReadBit(); + tag.HasRatio = reader.ReadBit(); + tag.HasColorTransform = reader.ReadBit(); + tag.HasMatrix = reader.ReadBit(); + tag.HasCharacter = reader.ReadBit(); + tag.Move = reader.ReadBit(); + tag.Depth = reader.Reader.ReadUInt16(); + if ( tag.HasCharacter ) { + tag.CharacterId = reader.Reader.ReadUInt16(); + } + if ( tag.HasMatrix ) { + tag.Matrix = SwfMatrix.Read(reader); + } + if ( tag.HasColorTransform ) { + tag.ColorTransform = SwfColorTransformRGBA.Read(reader); + } + if ( tag.HasRatio ) { + tag.Ratio = reader.Reader.ReadUInt16(); + } + if ( tag.HasName ) { + tag.Name = reader.ReadString(); + } + if ( tag.HasClipDepth ) { + tag.ClipDepth = reader.Reader.ReadUInt16(); + } + if ( tag.HasClipActions ) { + tag.ClipActions = SwfClipActions.Read(reader); + } + return tag; + } + } + + class PlaceObject3Tag : SwfTagBase { + public bool HasClipActions; + public bool HasClipDepth; + public bool HasName; + public bool HasRatio; + public bool HasColorTransform; + public bool HasMatrix; + public bool HasCharacter; + public bool Move; + public bool OpaqueBackground; + public bool HasVisible; + public bool HasImage; + public bool HasClassName; + public bool HasCacheAsBitmap; + public bool HasBlendMode; + public bool HasFilterList; + public ushort Depth; + public string ClassName; + public ushort CharacterId; + public SwfMatrix Matrix; + public SwfColorTransformRGBA ColorTransform; + public ushort Ratio; + public string Name; + public ushort ClipDepth; + public SwfSurfaceFilters SurfaceFilters; + public SwfBlendMode BlendMode; + public byte BitmapCache; + public byte Visible; + public SwfRGBA BackgroundColor; + public SwfClipActions ClipActions; + + public override string ToString() { + return string.Format( + "CharacterId: {0}, Depth: {1}, Matrix: {2}, ColorTransform: {3}", + CharacterId, Depth, Matrix, ColorTransform); + } + + public override SwfTagType TagType { + get { return SwfTagType.PlaceObject3; } + } + + public static PlaceObject3Tag Create(SwfStreamReader reader) { + var tag = new PlaceObject3Tag(); + tag.HasClipActions = reader.ReadBit(); + tag.HasClipDepth = reader.ReadBit(); + tag.HasName = reader.ReadBit(); + tag.HasRatio = reader.ReadBit(); + tag.HasColorTransform = reader.ReadBit(); + tag.HasMatrix = reader.ReadBit(); + tag.HasCharacter = reader.ReadBit(); + tag.Move = reader.ReadBit(); + reader.ReadBit(); // reserved + tag.OpaqueBackground = reader.ReadBit(); + tag.HasVisible = reader.ReadBit(); + tag.HasImage = reader.ReadBit(); + tag.HasClassName = reader.ReadBit(); + tag.HasCacheAsBitmap = reader.ReadBit(); + tag.HasBlendMode = reader.ReadBit(); + tag.HasFilterList = reader.ReadBit(); + tag.Depth = reader.Reader.ReadUInt16(); + if ( tag.HasCharacter || (tag.HasImage && tag.HasCharacter) ) { + tag.ClassName = reader.ReadString(); + } + if ( tag.HasCharacter ) { + tag.CharacterId = reader.Reader.ReadUInt16(); + } + if ( tag.HasMatrix ) { + tag.Matrix = SwfMatrix.Read(reader); + } + if ( tag.HasColorTransform ) { + tag.ColorTransform = SwfColorTransformRGBA.Read(reader); + } + if ( tag.HasRatio ) { + tag.Ratio = reader.Reader.ReadUInt16(); + } + if ( tag.HasName ) { + tag.Name = reader.ReadString(); + } + if ( tag.HasClipDepth ) { + tag.ClipDepth = reader.Reader.ReadUInt16(); + } + if ( tag.HasFilterList ) { + tag.SurfaceFilters = SwfSurfaceFilters.Read(reader); + } + if ( tag.HasBlendMode ) { + tag.BlendMode = (SwfBlendMode)reader.Reader.ReadByte(); + } + if ( tag.HasCacheAsBitmap ) { + tag.BitmapCache = reader.Reader.ReadByte(); + } + if ( tag.HasVisible ) { + tag.Visible = reader.Reader.ReadByte(); + tag.BackgroundColor = SwfRGBA.Read(reader); + } + if ( tag.HasClipActions ) { + tag.ClipActions = SwfClipActions.Read(reader); + } + return tag; + } + } + + class RemoveObjectTag : SwfTagBase { + public ushort CharacterId; + public ushort Depth; + + public override string ToString() { + return string.Format("CharacterId: {0}, Depth: {1}", CharacterId, Depth); + } + + public override SwfTagType TagType { + get { return SwfTagType.RemoveObject; } + } + + public static RemoveObjectTag Create(SwfStreamReader reader) { + var tag = new RemoveObjectTag(); + tag.CharacterId = reader.Reader.ReadUInt16(); + tag.Depth = reader.Reader.ReadUInt16(); + return tag; + } + } + + class RemoveObject2Tag : SwfTagBase { + public ushort Depth; + + public override string ToString() { + return string.Format("Depth: {0}", Depth); + } + + public override SwfTagType TagType { + get { return SwfTagType.RemoveObject2; } + } + + public static RemoveObject2Tag Create(SwfStreamReader reader) { + var tag = new RemoveObject2Tag(); + tag.Depth = reader.Reader.ReadUInt16(); + return tag; + } + } + + class ShowFrameTag : SwfTagBase { + public override string ToString() { + return "ShowFrameTag"; + } + + public override SwfTagType TagType { + get { return SwfTagType.ShowFrame; } + } + + public static ShowFrameTag Create(SwfStreamReader reader) { + return new ShowFrameTag(); + } + } + + class SetBackgroundColorTag : SwfTagBase { + public SwfRGB BackgroundColor; + + public override string ToString() { + return string.Format("BackgroundColor: {0}", BackgroundColor); + } + + public override SwfTagType TagType { + get { return SwfTagType.SetBackgroundColor; } + } + + public static SetBackgroundColorTag Create(SwfStreamReader reader) { + var tag = new SetBackgroundColorTag(); + tag.BackgroundColor = SwfRGB.Read(reader); + return tag; + } + } + + class FrameLabelTag : SwfTagBase { + public string Name; + public byte AnchorFlag; + + public override string ToString() { + return string.Format("Name: {0}, AnchorFlag: {1}", Name, AnchorFlag); + } + + public override SwfTagType TagType { + get { return SwfTagType.FrameLabel; } + } + + public static FrameLabelTag Create(SwfStreamReader reader) { + var tag = new FrameLabelTag(); + tag.Name = reader.ReadString(); + if ( !reader.IsEOF ) { + tag.AnchorFlag = reader.Reader.ReadByte(); + } + return tag; + } + } + + class EndTag : SwfTagBase { + public override string ToString() { + return "EndTag"; + } + + public override SwfTagType TagType { + get { return SwfTagType.End; } + } + + public static EndTag Create(SwfStreamReader reader) { + return new EndTag(); + } + } + + class SetTabIndexTag : SwfTagBase { + public ushort Depth; + public ushort TabIndex; + + public override string ToString() { + return string.Format("Depth: {0}, TabIndex: {1}", Depth, TabIndex); + } + + public override SwfTagType TagType { + get { return SwfTagType.SetTabIndex; } + } + + public static SetTabIndexTag Create(SwfStreamReader reader) { + var tag = new SetTabIndexTag(); + tag.Depth = reader.Reader.ReadUInt16(); + tag.TabIndex = reader.Reader.ReadUInt16(); + return tag; + } + } + + class DefineScalingGridTag : SwfTagBase { + public ushort CharacterId; + public SwfRect Splitter; + + public override string ToString() { + return string.Format("CharacterId: {0}, Splitter: {1}", CharacterId, Splitter); + } + + public override SwfTagType TagType { + get { return SwfTagType.DefineScalingGrid; } + } + + public static DefineScalingGridTag Create(SwfStreamReader reader) { + var tag = new DefineScalingGridTag(); + tag.CharacterId = reader.Reader.ReadUInt16(); + tag.Splitter = SwfRect.Read(reader); + return tag; + } + } + + class DefineSceneAndFrameLabelDataTag : SwfTagBase { + public List Scenes = new List(); + public List Frames = new List(); + + public override string ToString() { + return string.Format("Scenes: {0}, Frames: {1}", Scenes.Count, Frames.Count); + } + + public override SwfTagType TagType { + get { return SwfTagType.DefineSceneAndFrameLabelData; } + } + + public static DefineSceneAndFrameLabelDataTag Create(SwfStreamReader reader) { + var tag = new DefineSceneAndFrameLabelDataTag(); + var scenes = reader.ReadEncodedU32(); + for ( var i = 0; i < scenes; ++i ) { + tag.Scenes.Add(new SceneOffsetData { + Offset = reader.ReadEncodedU32(), + Name = reader.ReadString() + }); + } + var frames = reader.ReadEncodedU32(); + for ( var i = 0; i < frames; ++i ) { + tag.Frames.Add(new FrameLabelData { + Number = reader.ReadEncodedU32(), + Label = reader.ReadString() + }); + } + return tag; + } + } + + class DefineShapeTag : SwfTagBase { + public ushort ShapeID; + public SwfRect ShapeBounds; + + public override string ToString() { + return string.Format("ShapeID: {0}, ShapeBounds: {1}", ShapeID, ShapeBounds); + } + + public override SwfTagType TagType { + get { return SwfTagType.DefineShape; } + } + + public static DefineShapeTag Create(SwfStreamReader reader) { + var tag = new DefineShapeTag(); + tag.ShapeID = reader.Reader.ReadUInt16(); + tag.ShapeBounds = SwfRect.Read(reader); + //tag.Shapes = SwfShapes.Read(reader); + return tag; + } + } + + class DefineShape2Tag : SwfTagBase { + public ushort ShapeID; + public SwfRect ShapeBounds; + + public override string ToString() { + return string.Format("ShapeID: {0}, ShapeBounds: {1}", ShapeID, ShapeBounds); + } + + public override SwfTagType TagType { + get { return SwfTagType.DefineShape2; } + } + + public static DefineShape2Tag Create(SwfStreamReader reader) { + var tag = new DefineShape2Tag(); + tag.ShapeID = reader.Reader.ReadUInt16(); + tag.ShapeBounds = SwfRect.Read(reader); + //tag.Shapes = SwfShapes.Read(reader); + return tag; + } + } + + class DefineShape3Tag : SwfTagBase { + public ushort ShapeID; + public SwfRect ShapeBounds; + + public override string ToString() { + return string.Format("ShapeID: {0}, ShapeBounds: {1}", ShapeID, ShapeBounds); + } + + public override SwfTagType TagType { + get { return SwfTagType.DefineShape3; } + } + + public static DefineShape3Tag Create(SwfStreamReader reader) { + var tag = new DefineShape3Tag(); + tag.ShapeID = reader.Reader.ReadUInt16(); + tag.ShapeBounds = SwfRect.Read(reader); + //tag.Shapes = SwfShapes.Read(reader); + return tag; + } + } + + class DefineShape4Tag : SwfTagBase { + public ushort ShapeID; + public SwfRect ShapeBounds; + public SwfRect EdgeBounds; + + public override string ToString() { + return string.Format( + "ShapeID: {0}, ShapeBounds: {1}, EdgeBounds: {2}", + ShapeID, ShapeBounds, EdgeBounds); + } + + public override SwfTagType TagType { + get { return SwfTagType.DefineShape4; } + } + + public static DefineShape4Tag Create(SwfStreamReader reader) { + var tag = new DefineShape4Tag(); + tag.ShapeID = reader.Reader.ReadUInt16(); + tag.ShapeBounds = SwfRect.Read(reader); + tag.EdgeBounds = SwfRect.Read(reader); + //tag.Flags = reader.Reader.ReadByte(); + //tag.Shapes = SwfShapes.Read(reader); + return tag; + } + } + + class DefineBitsLosslessTag : SwfTagBase { + public ushort CharacterId; + public byte BitmapFormat; + public ushort BitmapWidth; + public ushort BitmapHeight; + public byte BitmapColorTableSize; + public byte[] ZlibBitmapData; + + public override SwfTagType TagType { + get { return SwfTagType.DefineBitsLossless; } + } + + public override string ToString() { + return string.Format( + "CharacterId: {0}, BitmapFormat: {1}, Width: {2}, Height: {3}", + CharacterId, BitmapFormat, BitmapWidth, BitmapHeight); + } + + public static DefineBitsLosslessTag Create(SwfStreamReader reader) { + var tag = new DefineBitsLosslessTag(); + tag.CharacterId = reader.Reader.ReadUInt16(); + tag.BitmapFormat = reader.Reader.ReadByte(); + tag.BitmapWidth = reader.Reader.ReadUInt16(); + tag.BitmapHeight = reader.Reader.ReadUInt16(); + if ( tag.BitmapFormat == 3 ) { + tag.BitmapColorTableSize = reader.Reader.ReadByte(); + } + tag.ZlibBitmapData = reader.ReadRest(); + return tag; + } + } + + class DefineBitsLossless2Tag : SwfTagBase { + public ushort CharacterId; + public byte BitmapFormat; + public ushort BitmapWidth; + public ushort BitmapHeight; + public byte BitmapColorTableSize; + public byte[] ZlibBitmapData; + + public override SwfTagType TagType { + get { return SwfTagType.DefineBitsLossless2; } + } + + public override string ToString() { + return string.Format( + "CharacterId: {0}, BitmapFormat: {1}, Width: {2}, Height: {3}", + CharacterId, BitmapFormat, BitmapWidth, BitmapHeight); + } + + public static DefineBitsLossless2Tag Create(SwfStreamReader reader) { + var tag = new DefineBitsLossless2Tag(); + tag.CharacterId = reader.Reader.ReadUInt16(); + tag.BitmapFormat = reader.Reader.ReadByte(); + tag.BitmapWidth = reader.Reader.ReadUInt16(); + tag.BitmapHeight = reader.Reader.ReadUInt16(); + if ( tag.BitmapFormat == 3 ) { + tag.BitmapColorTableSize = reader.Reader.ReadByte(); + } + tag.ZlibBitmapData = reader.ReadRest(); + return tag; + } + } + + class DefineSpriteTag : SwfTagBase { + public ushort SpriteId; + public ushort FrameCount; + public List ControlTags; + + public override string ToString() { + return string.Format( + "SpriteId: {0}, FrameCount: {1}, ControlTags: {2}", + SpriteId, FrameCount, ControlTags.Count); + } + + public override SwfTagType TagType { + get { return SwfTagType.DefineSprite; } + } + + public static DefineSpriteTag Create(SwfStreamReader reader) { + var tag = new DefineSpriteTag(); + tag.SpriteId = reader.Reader.ReadUInt16(); + tag.FrameCount = reader.Reader.ReadUInt16(); + tag.ControlTags = new List(); + SwfTagBase sub_tag; + do { + var sub_tag_data = SwfTagData.Read(reader); + sub_tag = SwfTagBase.Create(sub_tag_data); + if ( sub_tag != null ) { + tag.ControlTags.Add(sub_tag); + } + } while ( sub_tag != null && sub_tag.TagType != SwfTagType.End ); + return tag; + } + } + + class FileAttributesTag : SwfTagBase { + public override string ToString() { + return "FileAttributesTag"; + } + + public override SwfTagType TagType { + get { return SwfTagType.FileAttributes; } + } + + public static FileAttributesTag Create(SwfStreamReader reader) { + return new FileAttributesTag(); + } + } + + class UnknownTag : SwfTagBase { + SwfTagType Type; + + public override string ToString() { + return "UnknownTag"; + } + + public override SwfTagType TagType { + get { return Type; } + } + + public static UnknownTag Create(SwfTagType type) { + var tag = new UnknownTag(); + tag.Type = type; + return tag; + } + } +} \ No newline at end of file diff --git a/Assets/FlashTools/Scripts/Internal/Editor/FlashAnimSwfTags.cs.meta b/Assets/FlashTools/Scripts/Internal/Editor/FlashAnimSwfTags.cs.meta new file mode 100644 index 0000000..e218311 --- /dev/null +++ b/Assets/FlashTools/Scripts/Internal/Editor/FlashAnimSwfTags.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a6fd42db76e554f85abc15861c15e758 +timeCreated: 1457387815 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/FlashTools/Scripts/Internal/Editor/FlashAnimSwfUtils.cs b/Assets/FlashTools/Scripts/Internal/Editor/FlashAnimSwfUtils.cs new file mode 100644 index 0000000..062f3d8 --- /dev/null +++ b/Assets/FlashTools/Scripts/Internal/Editor/FlashAnimSwfUtils.cs @@ -0,0 +1,400 @@ +using UnityEngine; +using System.IO; +using System.Text; + +namespace FlashTools.Internal { + class SwfStreamReader { + struct BitContext { + public byte CachedByte; + public byte BitIndex; + } + BitContext _bitContext; + BinaryReader _reader; + + long Length { + get { return _reader.BaseStream.Length; } + } + + long Position { + get { return _reader.BaseStream.Position; } + } + + long BytesLeft { + get { return Length - Position; } + } + + public SwfStreamReader(string path) { + _reader = new BinaryReader(File.OpenRead(path)); + } + + public SwfStreamReader(Stream stream) { + _reader = new BinaryReader(stream); + } + + public BinaryReader Reader { + get { return _reader; } + } + + public bool ReadBit() { + var bitIndex = _bitContext.BitIndex & 0x07; + if ( bitIndex == 0 ) { + _bitContext.CachedByte = Reader.ReadByte(); + } + ++_bitContext.BitIndex; + return ((_bitContext.CachedByte << bitIndex) & 0x80) != 0; + } + + public int ReadSignedBits(uint count) { + if ( count == 0 ) { + return 0; + } + bool sign = ReadBit(); + var res = sign ? uint.MaxValue : 0; + --count; + for ( var i = 0; i < count; ++i ) { + var bit = ReadBit(); + res = (res << 1 | (bit ? 1u : 0u)); + } + return (int)res; + } + + public uint ReadUnsignedBits(uint count) { + if ( count == 0 ) { + return 0; + } + uint res = 0; + for ( var i = 0; i < count; ++i ) { + var bit = ReadBit(); + res = (res << 1 | (bit ? 1u : 0u)); + } + return res; + } + + public void AlignToByte() { + _bitContext.BitIndex = 0; + _bitContext.CachedByte = 0; + } + + public string ReadString() { + var data_stream = new MemoryStream(); + byte bt = 1; + while ( bt > 0 ) { + bt = _reader.ReadByte(); + if ( bt > 0 ) { + data_stream.WriteByte(bt); + } + } + return Encoding.UTF8.GetString(data_stream.ToArray()); + } + + public float ReadFixedPoint8() { + return Reader.ReadInt16() / 256.0f; + } + + public float ReadFixedPoint16(uint bits) { + var value = ReadSignedBits(bits); + return value / 65536.0f; + } + + public uint ReadEncodedU32() { + AlignToByte(); + uint val = 0; + var bt = _reader.ReadByte(); + val |= bt & 0x7fu; + if ((bt & 0x80) == 0) return val; + + bt = _reader.ReadByte(); + val |= (bt & 0x7fu) << 7; + if ((bt & 0x80) == 0) return val; + + bt = _reader.ReadByte(); + val |= (bt & 0x7fu) << 14; + if ((bt & 0x80) == 0) return val; + + bt = _reader.ReadByte(); + val |= (bt & 0x7fu) << 21; + if ((bt & 0x80) == 0) return val; + + bt = _reader.ReadByte(); + val |= (bt & 0x7fu) << 28; + return val; + } + + public byte[] ReadRest() { + return Reader.ReadBytes((int)BytesLeft); + } + + public bool IsEOF { + get { return Position == Length; } + } + } + + enum SwfBlendMode : byte { + Normal = 0, + Normal1 = 1, + Layer = 2, + Multiply = 3, + Screen = 4, + Lighten = 5, + Darken = 6, + Difference = 7, + Add = 8, + Subtract = 9, + Invert = 10, + Alpha = 11, + Erase = 12, + Overlay = 13, + Hardlight = 14 + } + + struct SwfHeader { + public string Format; + public byte Version; + public uint FileLength; + public SwfRect FrameSize; + public float FrameRate; + public ushort FrameCount; + + public static SwfHeader Read(SwfStreamReader reader) { + var header = new SwfHeader(); + header.Format = new string(reader.Reader.ReadChars(3)); + header.Version = reader.Reader.ReadByte(); + header.FileLength = reader.Reader.ReadUInt32(); + header.FrameSize = SwfRect.Read(reader); + header.FrameRate = reader.ReadFixedPoint8(); + header.FrameCount = reader.Reader.ReadUInt16(); + return header; + } + + public override string ToString() { + return string.Format( + "Format: {0}, Version: {1}, FileLength: {2}, FrameSize: {3}, FrameRate: {4}, FrameCount: {5}", + Format, Version, FileLength, FrameSize, FrameRate, FrameCount); + } + } + + struct SceneOffsetData { + public uint Offset; + public string Name; + } + + struct FrameLabelData { + public uint Number; + public string Label; + } + + struct SwfRGB { + public byte Red; + public byte Green; + public byte Blue; + + public static SwfRGB Read(SwfStreamReader reader) { + var rgb = new SwfRGB(); + rgb.Red = reader.Reader.ReadByte(); + rgb.Green = reader.Reader.ReadByte(); + rgb.Blue = reader.Reader.ReadByte(); + return rgb; + } + + public override string ToString() { + return string.Format( + "R: {0}, G: {1}, B: {2}", + Red, Green, Blue); + } + } + + struct SwfRGBA { + public byte Red; + public byte Green; + public byte Blue; + public byte Alpha; + + public static SwfRGBA Read(SwfStreamReader reader) { + var rgba = new SwfRGBA(); + rgba.Red = reader.Reader.ReadByte(); + rgba.Green = reader.Reader.ReadByte(); + rgba.Blue = reader.Reader.ReadByte(); + rgba.Alpha = reader.Reader.ReadByte(); + return rgba; + } + + public override string ToString() { + return string.Format( + "R: {0}, G: {1}, B: {2}, A: {3}", + Red, Green, Blue, Alpha); + } + } + + struct SwfRect { + public float XMin; + public float XMax; + public float YMin; + public float YMax; + + public static SwfRect Read(SwfStreamReader reader) { + var rect = new SwfRect(); + var bits = reader.ReadUnsignedBits(5); + rect.XMin = reader.ReadSignedBits(bits) / 20.0f; + rect.XMax = reader.ReadSignedBits(bits) / 20.0f; + rect.YMin = reader.ReadSignedBits(bits) / 20.0f; + rect.YMax = reader.ReadSignedBits(bits) / 20.0f; + reader.AlignToByte(); + return rect; + } + + public override string ToString() { + return string.Format( + "XMin: {0}, XMax: {1}, YMin: {2}, YMax: {3}", + XMin, XMax, YMin, YMax); + } + } + + struct SwfMatrix { + public float ScaleX; + public float ScaleY; + public float RotateSkew0; + public float RotateSkew1; + public int TranslateX; + public int TranslateY; + + public static SwfMatrix Identity { + get { + return new SwfMatrix { + ScaleX = 1, + ScaleY = 1, + RotateSkew0 = 0, + RotateSkew1 = 0, + TranslateX = 0, + TranslateY = 0 + }; + } + } + + public static SwfMatrix Read(SwfStreamReader reader) { + var matrix = SwfMatrix.Identity; + var has_scale = reader.ReadBit(); + if ( has_scale ) { + var bits = (byte)reader.ReadUnsignedBits(5); + matrix.ScaleX = reader.ReadFixedPoint16(bits); + matrix.ScaleY = reader.ReadFixedPoint16(bits); + } + var has_rotate = reader.ReadBit(); + if ( has_rotate ) { + var bits = (byte)reader.ReadUnsignedBits(5); + matrix.RotateSkew0 = reader.ReadFixedPoint16(bits); + matrix.RotateSkew1 = reader.ReadFixedPoint16(bits); + } + var translate_bits = (byte)reader.ReadUnsignedBits(5); + matrix.TranslateX = reader.ReadSignedBits(translate_bits); + matrix.TranslateY = reader.ReadSignedBits(translate_bits); + reader.AlignToByte(); + return matrix; + } + + public override string ToString() { + return string.Format( + "ScaleX: {0}, ScaleY: {1}, RotateSkew0: {2}, RotateSkew1: {3}, TranslateX: {4}, TranslateY: {5}", + ScaleX, ScaleY, RotateSkew0, RotateSkew1, TranslateX, TranslateY); + } + } + + struct SwfColorTransformRGB { + public short RMul; + public short GMul; + public short BMul; + public bool HasMul; + public short RAdd; + public short GAdd; + public short BAdd; + public bool HasAdd; + public static SwfColorTransformRGB Read(SwfStreamReader reader) { + SwfColorTransformRGB transform; + var has_add = reader.ReadBit(); + var has_mul = reader.ReadBit(); + var bits = reader.ReadUnsignedBits(4); + if ( has_mul ) { + transform.RMul = (short)reader.ReadSignedBits(bits); + transform.GMul = (short)reader.ReadSignedBits(bits); + transform.BMul = (short)reader.ReadSignedBits(bits); + transform.HasMul = true; + } else { + transform.RMul = 1; + transform.GMul = 1; + transform.BMul = 1; + transform.HasMul = false; + } + if ( has_add ) { + transform.RAdd = (short)reader.ReadSignedBits(bits); + transform.GAdd = (short)reader.ReadSignedBits(bits); + transform.BAdd = (short)reader.ReadSignedBits(bits); + transform.HasAdd = true; + } else { + transform.RAdd = 0; + transform.GAdd = 0; + transform.BAdd = 0; + transform.HasAdd = false; + } + reader.AlignToByte(); + return transform; + } + } + + struct SwfColorTransformRGBA { + public short RMul; + public short GMul; + public short BMul; + public short AMul; + public bool HasMul; + public short RAdd; + public short GAdd; + public short BAdd; + public short AAdd; + public bool HasAdd; + public static SwfColorTransformRGBA Read(SwfStreamReader reader) { + SwfColorTransformRGBA transform; + var has_add = reader.ReadBit(); + var has_mul = reader.ReadBit(); + var bits = reader.ReadUnsignedBits(4); + if ( has_mul ) { + transform.RMul = (short)reader.ReadSignedBits(bits); + transform.GMul = (short)reader.ReadSignedBits(bits); + transform.BMul = (short)reader.ReadSignedBits(bits); + transform.AMul = (short)reader.ReadSignedBits(bits); + transform.HasMul = true; + } else { + transform.RMul = 1; + transform.GMul = 1; + transform.BMul = 1; + transform.AMul = 1; + transform.HasMul = false; + } + if ( has_add ) { + transform.RAdd = (short)reader.ReadSignedBits(bits); + transform.GAdd = (short)reader.ReadSignedBits(bits); + transform.BAdd = (short)reader.ReadSignedBits(bits); + transform.AAdd = (short)reader.ReadSignedBits(bits); + transform.HasAdd = true; + } else { + transform.RAdd = 0; + transform.GAdd = 0; + transform.BAdd = 0; + transform.AAdd = 0; + transform.HasAdd = false; + } + reader.AlignToByte(); + return transform; + } + } + + struct SwfClipActions { + public static SwfClipActions Read(SwfStreamReader reader) { + throw new UnityException("implme!"); + } + } + + struct SwfSurfaceFilters { + public static SwfSurfaceFilters Read(SwfStreamReader reader) { + throw new UnityException("implme!"); + } + } +} \ No newline at end of file diff --git a/Assets/FlashTools/Scripts/Internal/Editor/FlashAnimSwfUtils.cs.meta b/Assets/FlashTools/Scripts/Internal/Editor/FlashAnimSwfUtils.cs.meta new file mode 100644 index 0000000..f2e6ce0 --- /dev/null +++ b/Assets/FlashTools/Scripts/Internal/Editor/FlashAnimSwfUtils.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3cbe133e688394de3a3ccafde9ac5942 +timeCreated: 1457387827 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins.meta b/Assets/Plugins.meta new file mode 100644 index 0000000..22696b5 --- /dev/null +++ b/Assets/Plugins.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: df75e9c9573ce4e98b7b825da1804c9c +folderAsset: yes +timeCreated: 1457386400 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Ionic.Zip.Unity.dll b/Assets/Plugins/Ionic.Zip.Unity.dll new file mode 100644 index 0000000000000000000000000000000000000000..71ae13b98364183b93c78ad204b83bc5a1898684 GIT binary patch literal 249856 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

WsRq8<#@v_?DWzC+! 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/g, '>'); + }; + + ft.combine_path = function (lhs, rhs) { + ft.type_assert(lhs, 'string'); + ft.type_assert(rhs, 'string'); + return ft.escape_path(lhs) + ft.escape_path(rhs); + }; + + ft.hex_str_to_color32 = function (hstr) { + ft.type_assert(hstr, 'string'); + ft.assert(hstr.length == 7, "incorrect hex_str"); + var result = []; + var hex_digit = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']; + for (var i = 1; i < hstr.length; i += 2) { + result.push( + hex_digit.indexOf(hstr[i + 0].toUpperCase()) * 16.0 + + hex_digit.indexOf(hstr[i + 1].toUpperCase()) + ); + } + return result; + }; + + ft.array_filter = function (arr, filter) { + ft.type_assert(arr, Array); + ft.type_assert(filter, Function); + var new_arr = []; + for (var index = 0; index < arr.length; ++index) { + var value = arr[index]; + if ( filter(value, index) ) { + new_arr.push(value); + } + } + return new_arr; + }; + + ft.array_foreach = function (arr, func, filter) { + ft.type_assert(arr, Array); + ft.type_assert(func, Function); + ft.type_assert_if_defined(filter, Function); + for (var index = 0; index < arr.length; ++index) { + var value = arr[index]; + if (filter === undefined || filter(value, index)) { + func(value, index); + } + } + }; + + ft.array_reverse_foreach = function (arr, func, filter) { + ft.type_assert(arr, Array); + ft.type_assert(func, Function); + ft.type_assert_if_defined(filter, Function); + for (var index = arr.length - 1; index >= 0; --index) { + var value = arr[index]; + if (filter === undefined || filter(value, index)) { + func(value, index); + } + } + }; + + ft.object_foreach = function (obj, func, filter) { + ft.type_assert(obj, 'object'); + ft.type_assert(func, Function); + ft.type_assert_if_defined(filter, Function); + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + var value = obj[key]; + if (filter === undefined || filter(key, value)) { + func(key, value); + } + } + } + }; + + // ------------------------------------ + // Document + // ------------------------------------ + + var ftd = {}; + + ftd.prepare_folders = function (document) { + ft.type_assert(document, Document); + var export_folder = ftd.get_export_folder(document); + if (FLfile.exists(export_folder)) { + if (!FLfile.remove(export_folder)) { + throw "Can't remove document export folder ({0})!" + .format(export_folder); + } + } + if (!FLfile.createFolder(export_folder)) { + throw "Can't create document export folder ({0})!" + .format(export_folder); + } + }; + + ftd.prepare_bitmaps = function (document) { + ft.type_assert(document, Document); + ft.array_foreach(document.library.items, function(item) { + ft.trace_fmt("-Item: {0}", item.name); + if ( item.itemType == "bitmap" ) { + item.compressionType = "lossless"; + } + }); + }; + + ftd.export_swf = function (document) { + ft.type_assert(document, Document); + document.exportSWF(ftd.get_swf_export_path(document)); + }; + + ftd.get_document_name = function (document) { + ft.type_assert(document, Document); + return document.name; + }; + + ftd.get_document_path = function (document) { + ft.type_assert(document, Document); + return ft.escape_path(document.pathURI); + }; + + ftd.get_export_folder = function (document) { + ft.type_assert(document, Document); + return ft.combine_path( + ftd.get_document_path(document), + "_export/"); + }; + + ftd.get_swf_export_path = function (document) { + ft.type_assert(document, Document); + return ft.combine_path( + ftd.get_export_folder(document), + ftd.get_document_name(document) + ".swf"); + }; + + // ------------------------------------ + // Main + // ------------------------------------ + + (function () { + ft.clear_output(); + ft.array_foreach(fl.documents, function (document) { + ft.trace_fmt("Doc: {0}", document.name); + ftd.prepare_folders(document); + ftd.prepare_bitmaps(document); + ftd.export_swf(document); + }); + })(); +})(); \ No newline at end of file