EscapeShooter/My project/Assets/Project Files/Game/Scripts/Characters/CharacterGraphics.cs

87 lines
2.6 KiB
C#

using UnityEngine;
namespace Watermelon.SquadShooter
{
public class CharacterGraphics : BaseCharacterGraphics
{
private static readonly int ANIMATOR_MOVEMENT_SPEED = Animator.StringToHash("Speed");
private static readonly int ANIMATOR_RUNNING_HASH = Animator.StringToHash("IsRunning");
private static readonly int ANIMATOR_MOVEMENT_X_HASH = Animator.StringToHash("MovementX");
private static readonly int ANIMATOR_MOVEMENT_Y_HASH = Animator.StringToHash("MovementY");
private Vector3 enemyPosition;
private float angle;
private Vector2 rotatedInput;
private void Awake()
{
}
public override void OnMovingStarted()
{
characterAnimator.SetBool(ANIMATOR_RUNNING_HASH, true);
}
public override void OnMovingStoped()
{
characterAnimator.SetBool(ANIMATOR_RUNNING_HASH, false);
}
public override void OnMoving(float speedPercent, Vector3 direction, bool isTargetFound)
{
characterAnimator.SetFloat(ANIMATOR_MOVEMENT_SPEED, characterBehaviour.MovementSettings.AnimationMultiplier.Lerp(speedPercent));
if (isTargetFound)
{
enemyPosition = characterBehaviour.ClosestEnemyBehaviour.transform.position;
angle = Mathf.Atan2(enemyPosition.x - transform.position.x, enemyPosition.z - transform.position.z) * 180 / Mathf.PI;
rotatedInput = Quaternion.Euler(0, 0, angle) * new Vector2(direction.x, direction.z);
characterAnimator.SetFloat(ANIMATOR_MOVEMENT_X_HASH, rotatedInput.x);
characterAnimator.SetFloat(ANIMATOR_MOVEMENT_Y_HASH, rotatedInput.y);
}
else
{
characterAnimator.SetFloat(ANIMATOR_MOVEMENT_X_HASH, 0);
characterAnimator.SetFloat(ANIMATOR_MOVEMENT_Y_HASH, 1);
}
}
public override void CustomFixedUpdate()
{
}
public override void Unload()
{
}
public override void Reload()
{
StopMovementAnimation();
}
public override void Activate()
{
StopMovementAnimation();
}
public override void Disable()
{
StopMovementAnimation();
}
private void StopMovementAnimation()
{
characterAnimator.SetFloat(ANIMATOR_MOVEMENT_SPEED, 1.0f);
characterAnimator.SetFloat(ANIMATOR_MOVEMENT_X_HASH, 0);
characterAnimator.SetFloat(ANIMATOR_MOVEMENT_Y_HASH, 0);
}
}
}