From 58ab3116db136678c7fe3d337946ecfcc128bb49 Mon Sep 17 00:00:00 2001 From: Perfare Date: Fri, 14 Jun 2019 11:58:59 +0800 Subject: [PATCH] Implemented AnimationEvent --- AssetStudio/Classes/AnimationClip.cs | 45 ++++++++++++++++++++++++---- AssetStudio/Classes/Mesh.cs | 32 +------------------- 2 files changed, 41 insertions(+), 36 deletions(-) diff --git a/AssetStudio/Classes/AnimationClip.cs b/AssetStudio/Classes/AnimationClip.cs index 2c0d1cd..8263429 100644 --- a/AssetStudio/Classes/AnimationClip.cs +++ b/AssetStudio/Classes/AnimationClip.cs @@ -832,6 +832,33 @@ namespace AssetStudio } } + public class AnimationEvent + { + public float time; + public string functionName; + public string data; + public PPtr objectReferenceParameter; + public float floatParameter; + public int intParameter; + public int messageOptions; + + public AnimationEvent(ObjectReader reader) + { + var version = reader.version; + + time = reader.ReadSingle(); + functionName = reader.ReadAlignedString(); + data = reader.ReadAlignedString(); + objectReferenceParameter = new PPtr(reader); + floatParameter = reader.ReadSingle(); + if (version[0] >= 3) //3 and up + { + intParameter = reader.ReadInt32(); + } + messageOptions = reader.ReadInt32(); + } + } + public enum AnimationType { kLegacy = 1, @@ -858,7 +885,7 @@ namespace AssetStudio public uint m_MuscleClipSize; public ClipMuscleConstant m_MuscleClip; public AnimationClipBindingConstant m_ClipBindingConstant; - //public AnimationEvent[] m_Events; + public AnimationEvent[] m_Events; public AnimationClip(ObjectReader reader) : base(reader) @@ -953,14 +980,22 @@ namespace AssetStudio { m_ClipBindingConstant = new AnimationClipBindingConstant(reader); } - //m_HasGenericRootTransform 2018.3 - //m_HasMotionFloatCurves 2018.3 - /*int numEvents = reader.ReadInt32(); + if (version[0] > 2018 || (version[0] == 2018 && version[1] >= 3)) //2018.3 and up + { + var m_HasGenericRootTransform = reader.ReadBoolean(); + var m_HasMotionFloatCurves = reader.ReadBoolean(); + reader.AlignStream(); + } + int numEvents = reader.ReadInt32(); m_Events = new AnimationEvent[numEvents]; for (int i = 0; i < numEvents; i++) { m_Events[i] = new AnimationEvent(reader); - }*/ + } + if (version[0] >= 2017) //2017 and up + { + reader.AlignStream(); + } } } } diff --git a/AssetStudio/Classes/Mesh.cs b/AssetStudio/Classes/Mesh.cs index 4892eaa..19d1733 100644 --- a/AssetStudio/Classes/Mesh.cs +++ b/AssetStudio/Classes/Mesh.cs @@ -115,7 +115,7 @@ namespace AssetStudio stream = reader.ReadByte(); offset = reader.ReadByte(); format = reader.ReadByte(); - dimension = reader.ReadByte(); + dimension = (byte)(reader.ReadByte() & 0xF); } } @@ -258,31 +258,6 @@ namespace AssetStudio } } } - - public void FixChannel() - { - if (m_Channels.FirstOrDefault(x => x.dimension > 4) != null) - { - var fixStream = m_Channels.Max(x => x.stream); - var fixChannels = m_Channels.Where(x => x.dimension > 0 && x.stream == fixStream).ToArray(); - var stride = 0; - for (int i = 1, l = fixChannels.Length; i < l; i++) - { - var curChannel = fixChannels[i]; - var preChannel = fixChannels[i - 1]; - var offset = curChannel.offset - preChannel.offset; - preChannel.dimension = (byte)(offset / MeshHelper.GetChannelFormatSize(preChannel.format)); - stride += offset; - } - //Fix Last - var m_Channel = fixChannels.Last(); - var streamSize = m_DataSize.Length - m_Streams[fixStream].offset; - var totalStride = streamSize / m_VertexCount; - var channelStride = totalStride - stride; - m_Channel.dimension = (byte)(channelStride / MeshHelper.GetChannelFormatSize(m_Channel.format)); - GetStreams(); - } - } } public class BoneWeights4 @@ -695,11 +670,6 @@ namespace AssetStudio m_VertexData.m_DataSize = resourceReader.GetData(); } } - //Fix channel after 2018.3 - if (version[0] > 2018 || (version[0] == 2018 && version[1] >= 3)) - { - m_VertexData.FixChannel(); - } if (version[0] > 3 || (version[0] == 3 && version[1] >= 5)) //3.5 and up { ReadVertexData();