Files
Project-M/Packages/com.rukhanka.animation/Rukhanka.Runtime/AnimationEngine/AnimationProcessSystemComponents.cs
T
2026-05-31 14:27:52 -07:00

132 lines
4.1 KiB
C#

using Rukhanka.Toolbox;
using Unity.Collections;
using Unity.Entities;
using Unity.Mathematics;
#if RUKHANKA_WITH_NETCODE
using Unity.NetCode;
#endif
using FixedStringName = Unity.Collections.FixedString512Bytes;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
namespace Rukhanka
{
[InternalBufferCapacity(4)]
[ChunkSerializable]
public struct AnimationToProcessComponent: IBufferElementData
{
public float weight;
public float time;
public BlobAssetReference<AnimationClipBlob> animation;
public BlobAssetReference<AvatarMaskBlob> avatarMask;
public AnimationBlendingMode blendMode;
public float layerWeight;
public int layerIndex;
public uint motionId;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public struct AnimatorEntityRefComponent: IComponentData
{
public int boneIndexInAnimationRig;
public Entity animatorEntity;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#if RUKHANKA_WITH_NETCODE
[GhostComponent(PrefabType = GhostPrefabType.Client)]
#endif
public struct SkinnedMeshRendererComponent: IComponentData
{
public uint nameHash;
public Entity animatedRigEntity;
public int rootBoneIndexInRig;
public BlobAssetReference<SkinnedMeshInfoBlob> smrInfoBlob;
public bool IsGPUAnimator(in ComponentLookup<GPUAnimationEngineTag> gpuAnimationEngineTagLookup)
=> AnimationUtils.IsGPUAnimator(animatedRigEntity, gpuAnimationEngineTagLookup);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#if RUKHANKA_WITH_NETCODE
[GhostComponent(PrefabType = GhostPrefabType.Client)]
#endif
public struct ShouldUpdateBoundingBoxTag: IComponentData, IEnableableComponent { }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public struct RootMotionAnimationStateComponent: IBufferElementData, IEnableableComponent
{
public uint uniqueMotionId;
public BoneTransform animationState;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public struct RootMotionVelocityComponent: IComponentData
{
public bool removeBuiltinEntityMovement;
public float3 worldVelocity;
public float3 deltaPos;
public quaternion deltaRot;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
[InternalBufferCapacity(4)]
public struct AnimationEventComponent: IBufferElementData, IEnableableComponent
{
public AnimationEventComponent(ref AnimationEventBlob aeb)
{
nameHash = aeb.nameHash;
floatParam = aeb.floatParam;
intParam = aeb.intParam;
stringParamHash = aeb.stringParamHash;
#if RUKHANKA_DEBUG_INFO
name = "";
if (aeb.name.Length > 0)
aeb.name.CopyToWithTruncate(ref name);
stringParam = "";
if (aeb.stringParam.Length > 0)
aeb.stringParam.CopyToWithTruncate(ref stringParam);
#endif
}
#if RUKHANKA_DEBUG_INFO
public FixedString32Bytes name;
public FixedString32Bytes stringParam;
#endif
public uint nameHash;
public float floatParam;
public int intParam;
public uint stringParamHash;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
[ChunkSerializable]
public struct PreviousProcessedAnimationComponent: IBufferElementData
{
public uint motionId;
public float animationTime;
public BlobAssetReference<AnimationClipBlob> animation;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Define some special bone names
public static class SpecialBones
{
// Special bone hashes need to be recalculated in case of hashing function change!
// I cannot add hash computation code here, because burst will fail to compile
public static readonly string UnnamedRootBoneName = "RUKHANKA_UnnamedRootBone";
public static readonly string AnimatorTypeName = "RUKHANKA_Animator";
public static readonly uint AnimatorTypeNameHash = 0xde00343e;
}
}