using System.Collections.Generic; using FTSwfTools.SwfTypes; namespace FTSwfTools { using LibraryDefines = SortedDictionary; using DisplayInstances = SortedDictionary; // // SwfLibrary // public enum SwfLibraryDefineType { Shape, Bitmap, Sprite } public abstract class SwfLibraryDefine { public string ExportName = string.Empty; public abstract SwfLibraryDefineType Type { get; } } public class SwfLibraryShapeDefine : SwfLibraryDefine { public ushort[] Bitmaps = new ushort[0]; public SwfMatrix[] Matrices = new SwfMatrix[0]; public override SwfLibraryDefineType Type { get { return SwfLibraryDefineType.Shape; } } } public class SwfLibraryBitmapDefine : SwfLibraryDefine { public int Width = 0; public int Height = 0; public byte[] ARGB32 = new byte[0]; public ushort Redirect = 0; public override SwfLibraryDefineType Type { get { return SwfLibraryDefineType.Bitmap; } } } public class SwfLibrarySpriteDefine : SwfLibraryDefine { public SwfControlTags ControlTags = SwfControlTags.identity; public override SwfLibraryDefineType Type { get { return SwfLibraryDefineType.Sprite; } } } public class SwfLibrary { public LibraryDefines Defines = new LibraryDefines(); public bool HasDefine(ushort define_id) where T : SwfLibraryDefine { return FindDefine(define_id) != null; } public T FindDefine(ushort define_id) where T : SwfLibraryDefine { SwfLibraryDefine def; if ( Defines.TryGetValue(define_id, out def) ) { return def as T; } return null; } } // // SwfDisplayList // public enum SwfDisplayInstanceType { Shape, Sprite } public abstract class SwfDisplayInstance { public abstract SwfDisplayInstanceType Type { get; } public ushort Id; public ushort Depth; public ushort ClipDepth; public bool Visible; public SwfMatrix Matrix; public SwfBlendMode BlendMode; public SwfSurfaceFilters FilterList; public SwfColorTransform ColorTransform; } public class SwfDisplayShapeInstance : SwfDisplayInstance { public override SwfDisplayInstanceType Type { get { return SwfDisplayInstanceType.Shape; } } } public class SwfDisplaySpriteInstance : SwfDisplayInstance { public int CurrentTag = 0; public SwfDisplayList DisplayList = new SwfDisplayList(); public override SwfDisplayInstanceType Type { get { return SwfDisplayInstanceType.Sprite; } } public void Reset() { CurrentTag = 0; DisplayList = new SwfDisplayList(); } } public class SwfDisplayList { public string FrameName = string.Empty; public DisplayInstances Instances = new DisplayInstances(); } }