using Entitas; using System.Collections.Generic; using UnityEngine; using Game; public class AnimationSystem : IExecuteSystem, IInitializeSystem { private Dictionary _paramId; private IGroup _entities; public void Initialize() { _entities = Util.GetGroup(GameMatcher.Animation); _paramId = new Dictionary(); RegisterAnimationParam(); } private void RegisterAnimationParam() { var aniParams = new List() { "isFreeControl", "isTimelineAnother", "isGround", "isWalk", "isStagger", "isStun", "speedX", "speedY", "dieTrigger", "hitTrigger", "mhitTrigger", "lhitTrigger", "airhitTrigger", "stunhitTrigger", "reboundTrigger", "resetTrigger", }; foreach (var item in aniParams) { _paramId[item] = Animator.StringToHash(item); } } public void Execute() { foreach (var entity in _entities) { UpdateMoveAnimationParam(entity); } } private void UpdateMoveAnimationParam(GameEntity entity) { var animation = entity.animation; var move = entity.move; var velocity = Util.EntityVelocity(entity.ID()); var animator = animation.Animator; animator.SetBool(Id("isFreeControl"), entity.iD.Data.IsFreeControl); animator.SetBool(Id("isTimelineAnother"), animation.IsTimelineAnother); animator.SetBool(Id("isGround"), move.IsGroundLogic); animator.SetBool(Id("isWalk"), move.IsWalk); animator.SetBool(Id("isStagger"), Util.EntityIsStagger(entity)); animator.SetBool(Id("isStun"), Util.HasStunBuff(entity.ID())); animator.SetFloat(Id("speedX"), Mathf.Abs(velocity.x)); animator.SetFloat(Id("speedY"), Mathf.Abs(velocity.y)); if (animation.ResetMsg) { animator.SetTrigger(Id("resetTrigger")); animation.ResetMsg = false; } else { if (animation.DieMsg) { animator.SetTrigger(Id("dieTrigger")); } else { if (animation.HitMsg) { animator.SetTrigger(Id("hitTrigger")); } else if (animation.MHitMsg) { animator.SetTrigger(Id("mhitTrigger")); } else if (animation.LHitMsg) { animator.SetTrigger(Id("lhitTrigger")); } else if (animation.AirHitMsg) { animator.SetTrigger(Id("airhitTrigger")); } else if (animation.StunHitMsg) { animator.SetTrigger(Id("stunhitTrigger")); } else if (animation.ReboundMsg) { animator.SetTrigger(Id("reboundTrigger")); } } } animation.DieMsg = false; animation.HitMsg = false; animation.MHitMsg = false; animation.LHitMsg = false; animation.AirHitMsg = false; animation.StunHitMsg = false; animation.ReboundMsg = false; } private int Id(string paramName) { return _paramId[paramName]; } }