2
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

121 lines
3.6 KiB
C#

using Entitas;
using System.Collections.Generic;
using UnityEngine;
using Game;
public class AnimationSystem : IExecuteSystem, IInitializeSystem
{
private Dictionary<string, int> _paramId;
private IGroup<GameEntity> _entities;
public void Initialize()
{
_entities = Util.GetGroup(GameMatcher.Animation);
_paramId = new Dictionary<string, int>();
RegisterAnimationParam();
}
private void RegisterAnimationParam()
{
var aniParams = new List<string>()
{
"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];
}
}