using GameLogic.Combat.Hero.HeroGPU; using GPUECSAnimationBaker.Engine.AnimatorSystem; namespace GameLogic.Combat.Hero { public class CombatHeroGPUAnimtion : HeroAnimtionBasic { public GpuEcsAnimatorBehaviour GpuEcsAnimatorBehaviour; public GPUAnimtion GPUAnimtion; private GpuEcsAnimationData[] animations; private HeroGPUAnimtionStateInfo _heroPlayStateInfoBasic; protected HeroGPUMono _heroGPUMono; protected override void ProInit() { GpuEcsAnimatorBehaviour = combatHeroEntity.GameObject.transform.GetComponentInChildren(); animations = GpuEcsAnimatorBehaviour.animations; GPUAnimtion = new GPUAnimtion(); GPUAnimtion.Init(GpuEcsAnimatorBehaviour); _heroPlayStateInfoBasic = new HeroGPUAnimtionStateInfo(); _heroGPUMono = combatHeroEntity.GameObject.GetComponent(); } protected override void ProUpdate(float t) { GPUAnimtion.Update(); _heroGPUMono.animtionState = GPUAnimtion.gpuEcsAnimatorShaderData.shaderData; } private int GetAnimtionIndex(string name) { for (int i = 0; i < animations.Length; i++) { if (animations[i].stateName.Equals(name)) { return i; } } return -1; } private void SetSpeed(float speed) { GPUAnimtion.SetSpeed(speed); } public override HeroPlayStateInfoBasic Play(string name, float speed = 1) { int index = GetAnimtionIndex(name); if (index < 0) { return null; } _heroPlayStateInfoBasic.OnSetSpeed = SetSpeed; AnimatorInfo animatorInfo = new AnimatorInfo() { animationID = index, blendFactor = 0, speedFactor = speed }; GPUAnimtion.SetAnimtionIndex(animatorInfo); return _heroPlayStateInfoBasic; } } }