using UnityEngine; using System.Collections.Generic; namespace FTEditor { [System.Serializable] struct SwfVec2Data { public float x; public float y; public SwfVec2Data(float x, float y) { this.x = x; this.y = y; } public Vector2 ToUVector2() { return new Vector2(x, y); } public static SwfVec2Data one { get { return new SwfVec2Data(1.0f, 1.0f); } } public static SwfVec2Data zero { get { return new SwfVec2Data(0.0f, 0.0f); } } } [System.Serializable] struct SwfVec4Data { public float x; public float y; public float z; public float w; public SwfVec4Data(float x, float y, float z, float w) { this.x = x; this.y = y; this.z = z; this.w = w; } public Vector4 ToUVector4() { return new Vector4(x, y, z, w); } public static SwfVec4Data one { get { return new SwfVec4Data(1.0f, 1.0f, 1.0f, 1.0f); } } public static SwfVec4Data zero { get { return new SwfVec4Data(0.0f, 0.0f, 0.0f, 0.0f); } } } [System.Serializable] struct SwfRectData { public float xMin; public float xMax; public float yMin; public float yMax; public SwfRectData(float w, float h) { this.xMin = 0; this.yMin = 0; this.xMax = w; this.yMax = h; } public SwfRectData(float x, float y, float w, float h) { this.xMin = x; this.yMin = y; this.xMax = x + w; this.yMax = y + h; } public float width { get { return xMax - xMin; } } public float height { get { return yMax - yMin; } } public float area { get { return width * height; } } public static SwfRectData identity { get { return new SwfRectData(0.0f, 0.0f, 0.0f, 0.0f); } } public static SwfRectData FromURect(Rect rect) { return new SwfRectData(rect.xMin, rect.yMin, rect.width, rect.height); } } [System.Serializable] struct SwfRectIntData { public int xMin; public int xMax; public int yMin; public int yMax; public SwfRectIntData(int w, int h) { this.xMin = 0; this.yMin = 0; this.xMax = w; this.yMax = h; } public SwfRectIntData(int x, int y, int w, int h) { this.xMin = x; this.yMin = y; this.xMax = x + w; this.yMax = y + h; } public int width { get { return xMax - xMin; } } public int height { get { return yMax - yMin; } } public int area { get { return width * height; } } public static SwfRectIntData identity { get { return new SwfRectIntData(0, 0, 0, 0); } } public static SwfRectIntData FromURect(RectInt rect) { return new SwfRectIntData(rect.xMin, rect.yMin, rect.width, rect.height); } } [System.Serializable] struct SwfMatrixData { public SwfVec2Data sc; public SwfVec2Data sk; public SwfVec2Data tr; public static SwfMatrixData identity { get { return new SwfMatrixData{ sc = SwfVec2Data.one, sk = SwfVec2Data.zero, tr = SwfVec2Data.zero}; } } public Matrix4x4 ToUMatrix() { var mat = Matrix4x4.identity; mat.m00 = sc.x; mat.m11 = sc.y; mat.m10 = sk.x; mat.m01 = sk.y; mat.m03 = tr.x; mat.m13 = tr.y; return mat; } public static SwfMatrixData FromUMatrix(Matrix4x4 mat) { return new SwfMatrixData{ sc = new SwfVec2Data(mat.m00, mat.m11), sk = new SwfVec2Data(mat.m10, mat.m01), tr = new SwfVec2Data(mat.m03, mat.m13)}; } } [System.Serializable] struct SwfBlendModeData { public enum Types : byte { Normal, Layer, Multiply, Screen, Lighten, Darken, // GrabPass Difference, // GrabPass Add, Subtract, Invert, // GrabPass Overlay, // GrabPass Hardlight // GrabPass } public Types type; public SwfBlendModeData(Types type) { this.type = type; } public static SwfBlendModeData identity { get { return new SwfBlendModeData{ type = Types.Normal}; } } public static SwfBlendModeData operator*( SwfBlendModeData a, SwfBlendModeData b) { return (a.type == Types.Normal || a.type == Types.Layer) ? b : a; } } [System.Serializable] struct SwfColorTransData { public SwfVec4Data mulColor; public SwfVec4Data addColor; public static SwfColorTransData identity { get { return new SwfColorTransData{ mulColor = SwfVec4Data.one, addColor = SwfVec4Data.zero}; } } public static SwfColorTransData operator*( SwfColorTransData a, SwfColorTransData b) { return new SwfColorTransData{ mulColor = new SwfVec4Data( b.mulColor.x * a.mulColor.x, b.mulColor.y * a.mulColor.y, b.mulColor.z * a.mulColor.z, b.mulColor.w * a.mulColor.w), addColor = new SwfVec4Data( b.addColor.x * a.mulColor.x + a.addColor.x, b.addColor.y * a.mulColor.y + a.addColor.y, b.addColor.z * a.mulColor.z + a.addColor.z, b.addColor.w * a.mulColor.w + a.addColor.w)}; } } [System.Serializable] class SwfInstanceData { public enum Types { Mask, Group, Masked, MaskReset } public Types Type = Types.Group; public ushort ClipDepth = 0; public ushort Bitmap = 0; public SwfMatrixData Matrix = SwfMatrixData.identity; public SwfBlendModeData BlendMode = SwfBlendModeData.identity; public SwfColorTransData ColorTrans = SwfColorTransData.identity; } [System.Serializable] class SwfFrameData { public string Anchor = string.Empty; public List Labels = new List(); public List Instances = new List(); } [System.Serializable] class SwfSymbolData { public string Name = string.Empty; public List Frames = new List(); } [System.Serializable] class SwfBitmapData { public ushort Id = 0; public byte[] ARGB32 = new byte[0]; public ushort Redirect = 0; public int RealWidth = 0; public int RealHeight = 0; public SwfRectData SourceRect = SwfRectData.identity; public SwfRectIntData TrimmedRect = SwfRectIntData.identity; } [System.Serializable] class SwfAssetData { public float FrameRate = 0.0f; public List Symbols = new List(); public List Bitmaps = new List(); } }