HonorLee 5 months ago
parent
commit
a2b1abe84e
3 changed files with 186 additions and 11 deletions
  1. 22 4
      CrossgateToolkit/Anime.cs
  2. 29 7
      CrossgateToolkit/AnimePlayer.cs
  3. 135 0
      Preview/AnimeHSupport.gif.meta

+ 22 - 4
CrossgateToolkit/Anime.cs

@@ -77,14 +77,23 @@ namespace CrossgateToolkit
         // 高版本 - 调色板
         public int Palet;
         // 高版本 - 图像反转
-        public bool Reverse;
+        public AnimeFlag FLAG;
         // 高版本 - 结束标识
-        public byte[] END_FLAG;
+        public byte[] FLAG_END;
         public Dictionary<int,Texture2D> AnimeTextures = new Dictionary<int, Texture2D>();
         // public Texture2D AnimeTexture;
         public List<AnimeFrameInfo> AnimeFrameInfos;
         // public byte[] unknown;
     }
+
+    public class AnimeFlag
+    {
+        public bool REVERSE_X;
+        public bool REVERSE_Y;
+        public bool LOCK_PAL;
+        public bool LIGHT_THROUGH;
+    }
+    
     //动画相关Enum类型
     public class Anime : MonoBehaviour
     {
@@ -196,8 +205,17 @@ namespace CrossgateToolkit
                     {
                         animeData.IsHighVersion = true;
                         animeData.Palet = dataFileReader.ReadUInt16();
-                        animeData.Reverse = dataFileReader.ReadUInt16() % 2 == 1;
-                        animeData.END_FLAG = dataFileReader.ReadBytes(4);
+                        int flag = dataFileReader.ReadUInt16();
+                        if (flag > 0)
+                        {
+                            animeData.FLAG = new AnimeFlag();
+                            if ((flag & 1) == (1 << 0)) animeData.FLAG.REVERSE_X = true;
+                            if ((flag & 2) == (1 << 1)) animeData.FLAG.REVERSE_Y = true;
+                            if ((flag & 4) == (1 << 2)) animeData.FLAG.LOCK_PAL = true;
+                            if ((flag & 8) == (1 << 3)) animeData.FLAG.LIGHT_THROUGH = true;    
+                        }
+                        
+                        animeData.FLAG_END = dataFileReader.ReadBytes(4);
                     }
                     animeData.AnimeFrameInfos = new List<AnimeFrameInfo>();
                     

+ 29 - 7
CrossgateToolkit/AnimePlayer.cs

@@ -503,21 +503,34 @@ namespace CrossgateToolkit
             float width = _frames[_currentFrame].Sprite.rect.width * 1f;
             float height = _frames[_currentFrame].Sprite.rect.height * 1f;
 
+            Vector3 pos = Vector3.zero;
+            pos.x = _frames[_currentFrame].GraphicInfo.OffsetX;
+            pos.y = -_frames[_currentFrame].GraphicInfo.OffsetY;
+            
             if (isRenderByImage)
             {
                 _imageRenderer.sprite = _frames[_currentFrame].Sprite;
                 _imageRenderer.SetNativeSize();
-                if (_currentAnime.AnimeDetail.Reverse)
+                if (_currentAnime.AnimeDetail.FLAG!=null)
                 {
-                    _imageRenderer.transform.localScale = new Vector3(-1, 1, 1);
+                    if (_currentAnime.AnimeDetail.FLAG.REVERSE_X)
+                    {
+                        _imageRenderer.transform.localScale = new Vector3(-1, 1, 1);
+                        pos.x = -pos.x;
+                    }
+
+                    if (_currentAnime.AnimeDetail.FLAG.REVERSE_Y)
+                    {
+                        _imageRenderer.transform.localScale = new Vector3(1, -1, 1);
+                        pos.y = -pos.y;
+                    }
+                    
                 }
                 else
                 {
                     _imageRenderer.transform.localScale = new Vector3(1, 1, 1);
                 }
-                Vector3 pos = Vector3.zero;
-                pos.x = _frames[_currentFrame].GraphicInfo.OffsetX;
-                pos.y = -_frames[_currentFrame].GraphicInfo.OffsetY;
+                
                 _rectTransform.localPosition = pos;
                 _rectTransform.pivot = new Vector2(0f,1f);
             }
@@ -527,13 +540,22 @@ namespace CrossgateToolkit
                 _rectTransform.sizeDelta = new Vector2(width, height);
                 _spriteRenderer.size = new Vector2(width, height);
                 _rectTransform.pivot = new Vector2(0.5f,0f);
-                if (_currentAnime.AnimeDetail.Reverse)
+                if (_currentAnime.AnimeDetail.FLAG!=null)
                 {
-                    _spriteRenderer.flipX = true;
+                    if (_currentAnime.AnimeDetail.FLAG.REVERSE_X)
+                    {
+                        _spriteRenderer.flipX = true;
+                    }
+                    
+                    if (_currentAnime.AnimeDetail.FLAG.REVERSE_Y)
+                    {
+                        _spriteRenderer.flipY = true;
+                    }
                 }
                 else
                 {
                     _spriteRenderer.flipX = false;
+                    _spriteRenderer.flipY = false;
                 }
                 _rectTransform.localPosition = Vector3.zero;
             }

+ 135 - 0
Preview/AnimeHSupport.gif.meta

@@ -0,0 +1,135 @@
+fileFormatVersion: 2
+guid: 158480bd1c99841eb8139b2a0b5aafc0
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 12
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMasterTextureLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 1
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 0
+  cookieLightType: 0
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Server
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: