Files
Project-M/Packages/com.rukhanka.animation/Rukhanka.Hybrid/AnimationClip/AnimationClipBakerData.cs
T
2026-05-31 14:27:52 -07:00

95 lines
2.2 KiB
C#

using System;
using Rukhanka.Toolbox;
using Unity.Collections.LowLevel.Unsafe;
using Unity.Entities;
using FixedStringName = Unity.Collections.FixedString512Bytes;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
namespace Rukhanka.Hybrid
{
// RTP - Ready to process
namespace RTP
{
public struct AnimationClip: IDisposable
{
public FixedStringName name;
public UnsafeList<BoneClip> bones;
public UnsafeList<BoneClip> curves;
public UnsafeList<AnimationEvent> events;
public bool looped;
public bool loopPoseBlend;
public float cycleOffset;
public float length;
public float additiveReferencePoseTime;
public bool hasRootMotionCurves;
public Hash128 hash;
public void Dispose()
{
foreach (var a in bones) a.Dispose();
foreach (var a in curves) a.Dispose();
bones.Dispose();
curves.Dispose();
events.Dispose();
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public struct BoneClip: IEquatable<Hash128>, IDisposable
{
public FixedStringName name;
public Hash128 nameHash;
public bool isHumanMuscleClip;
public UnsafeList<AnimationCurve> animationCurves;
public bool Equals(Hash128 o) => o == nameHash;
public void SetName(string n)
{
name = n;
nameHash = name.CalculateHash128();
}
public void DisposeCurves()
{
foreach (var a in animationCurves) a.Dispose();
animationCurves.Clear();
}
public void Dispose()
{
DisposeCurves();
animationCurves.Dispose();
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public struct AnimationCurve: IDisposable
{
public BindingType bindingType;
public short channelIndex; // 0, 1, 2, 3 -> x, y, z, w
public UnsafeList<KeyFrame> keyFrames;
public void Dispose() => keyFrames.Dispose();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public struct AnimationEvent
{
public FixedStringName name;
public float time;
public float floatParam;
public int intParam;
public FixedStringName stringParam;
}
} // RTP
}