Implemented AnimationEvent

This commit is contained in:
Perfare 2019-06-14 11:58:59 +08:00
parent 6b93df41f2
commit 58ab3116db
2 changed files with 41 additions and 36 deletions

View File

@ -832,6 +832,33 @@ namespace AssetStudio
}
}
public class AnimationEvent
{
public float time;
public string functionName;
public string data;
public PPtr<Object> 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<Object>(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();
}
}
}
}

View File

@ -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();