12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- using System.Collections.Generic;
- using GameLogic.Combat.Hero.HeroGPU;
- using GameTimeLine.CustomizeTimeLogic;
- using GPUECSAnimationBaker.Engine.AnimatorSystem;
- using UnityEngine;
- namespace GameLogic.Combat.Hero
- {
- public class CombatHeroGPUAnimtion : HeroAnimtionBasic
- {
- public GpuEcsAnimatorBehaviour GpuEcsAnimatorBehaviour;
- public GPUAnimtion GPUAnimtion;
- private GpuEcsAnimationData[] animations;
- private HeroGPUAnimtionStateInfo _heroPlayStateInfoBasic;
- protected HeroGPUMono _heroGPUMono;
- private List<string> _anchorNames = new List<string>();
- protected override void ProInit()
- {
- GpuEcsAnimatorBehaviour =
- combatHeroEntity.GameObject.transform.GetComponentInChildren<GpuEcsAnimatorBehaviour>();
- animations = GpuEcsAnimatorBehaviour.animations;
- _anchorNames = GpuEcsAnimatorBehaviour.anchorNames;
- GPUAnimtion = new GPUAnimtion();
- GPUAnimtion.Init(GpuEcsAnimatorBehaviour);
- _heroPlayStateInfoBasic = new HeroGPUAnimtionStateInfo();
- _heroGPUMono = combatHeroEntity.combatHeroGameObject.HeroGPUMono;
- }
- protected override void ProUpdate(float t)
- {
- GPUAnimtion.Update();
- _heroGPUMono.animtionState = GPUAnimtion.gpuEcsAnimatorShaderData.shaderData;
- }
- public override void SetSpecialDotMonoFollow(SpecialDotInfo specialDotInfo)
- {
- if (!specialDotInfo.followSkeleton)
- {
- return;
- }
- int index = _anchorNames.IndexOf(specialDotInfo.dotName);
- if (index >= 0)
- {
- GPUAnimtion.GetGPUAnchors(index, out Vector3 pos, out Quaternion unityQuaternion);
- specialDotInfo.targetTran.localPosition = pos;
- specialDotInfo.targetTran.localRotation = unityQuaternion;
- }
- }
- 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;
- }
- }
- }
|