VertexAnimation/Samples~/Example2/Scripts/CharacterAnimationSystem.cs
max 7db5d33c8e Example2.
Example2
- Spawn system
- Character animation system
2021-04-05 22:20:35 +02:00

41 lines
1.3 KiB
C#

using Unity.Entities;
using Unity.Mathematics;
using TAO.VertexAnimation;
public class CharacterAnimationSystem : SystemBase
{
protected override void OnUpdate()
{
float deltaTime = UnityEngine.Time.deltaTime;
Random random = Random.CreateFromIndex((uint)UnityEngine.Time.time);
Entities.ForEach((Entity entity, ref VA_AnimatorComponent ac, ref CharacterAnimationComponent cac) =>
{
// Get the animation lib data.
ref VA_AnimationLibraryData animationsRef = ref ac.animationLibrary.Value;
// Set the animation index on the AnimatorComponent to play this animation.
ac.animationIndex = VA_AnimationLibraryUtils.GetAnimation(ref animationsRef, cac.curAnimation);
// 'Play' the actual animation.
ac.animationTime += deltaTime * animationsRef.animations[ac.animationIndex].frameTime;
if (ac.animationTime > animationsRef.animations[ac.animationIndex].duration)
{
// Set time. Using the difference to smoothen out animations when looping.
//ac.animationTime -= animationsRef.animations[ac.animationIndex].duration;
ac.animationTime = 0;
// Select new animation to play.
if (random.NextBool())
{
cac.curAnimation = cac.idle;
}
else
{
cac.curAnimation = cac.run;
}
}
}).ScheduleParallel();
}
}