using System.Collections.Generic; using UnityEngine; using System.Linq; using BITKit.Animations; namespace BITKit.Entities { public sealed class EntityAnimator : EntityBehavior { [SerializeField] private UnityAnimator[] animators; [SerializeReference, SubclassSelector] private References[] animationKeyWords; [SerializeReference, SubclassSelector] private References _rootVelocity; [SerializeReference, SubclassSelector] private References[] boolParameters; [SerializeReference, SubclassSelector] private References[] floatParameters; private List keyWords; public override void OnAwake() { keyWords = animationKeyWords.Select(x => x.Get()).ToList(); } public override void OnStart() { UnityEntity.AddListener(Constant.Animation.Play, Play); } private void Play(string animationName) { if (enabled is false) return; if (animationKeyWords.Length is 0 || keyWords.Contains(animationName)) { animators.ForEach(x => { if (!x.isActiveAndEnabled) return; x.Play(animationName); }); } } public override void OnFixedUpdate(float deltaTime) { foreach (var boolPar in boolParameters) { animators.ForEach(x => { if (x.isActiveAndEnabled) x.animator.SetBool(boolPar, UnityEntity.Get(boolPar)); }); } foreach (var floatPar in floatParameters) { animators.ForEach(x => { if (x.isActiveAndEnabled) x.animator.SetFloat(floatPar, UnityEntity.Get(floatPar)); }); } } private void OnAnimatorMove() { if (enabled is false) return; if (_rootVelocity is not null && UnityEntity is not null) UnityEntity.Set(_rootVelocity, animators[0].animator.velocity); } // ReSharper disable once UnusedMember.Local private void AnimationEvent(string eventName) { UnityEntity.Invoke(Constant.Animation.OnEvent, eventName); } } }