gather-and-defend/Assets/Scripts/AnimationEntity.cs
Felix Boucher 0714036b57 separate ally and enemy config + bugfixes
la config des ennemis influencait la config des alliés, ce qui était un bug maintenant, il y a une config différente pour les alliés et les ennemis.

l'animation d'attaque ne se terminait pas à temps pour faire le dégat, il a donc fallu multiplier la vitesse d'animation par le attack speed quand on attaque

j'en ai profité pour faire la même chose pour le walk animation et le speed

j'ai changé l'attribut des unités "attack speed" pour un "attack interval", pour que ça représente mieux son utilisation. Le multiplicateur reste sur la vitesse, et non sur l'interval.

Les configs pour les ressources sont les valeurs des ressources directement (pas des multiplicateurs)
2023-08-30 14:57:01 -04:00

102 lines
2.4 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AnimationEntity : MonoBehaviour
{
enum EntityAnimationState
{
Idle = 0,
Walking = 1,
Attacking = 2,
Dying = 3
}
private EntityAnimationState entityState;
private Animator _animatorEntity;
private bool _doSomething = false;
private bool _isDead = false;
private bool _isWalking = false;
void Start()
{
AttackSpeedMultiplier = 10;
SpeedMultiplier = 10;
_animatorEntity = GetComponentInChildren<Animator>();
}
void Update()
{
if (_doSomething && _animatorEntity.GetCurrentAnimatorStateInfo(0).normalizedTime >= 1f)
{
PlayIdleAnim();
_doSomething = false;
_isWalking = false;
}
_animatorEntity.speed = GetAnimatorSpeed();
}
private float GetAnimatorSpeed()
{
return entityState switch
{
EntityAnimationState.Attacking => AttackSpeedMultiplier,
EntityAnimationState.Walking => SpeedMultiplier,
_ => 1,
};
}
public void PlayIdleAnim()
{
if(!_isDead) {
_animatorEntity.speed = 1;
_animatorEntity.Play("idle", 0, 0f);
entityState = EntityAnimationState.Idle;
}
}
public void PlayWalkAnim()
{
if(!_isDead) {
_animatorEntity.speed = SpeedMultiplier;
_animatorEntity.Play("walk", 0, 0f);
entityState = EntityAnimationState.Walking;
_isWalking = true;
}
}
public void PlayAttackAnim()
{
if(!_isDead) {
_animatorEntity.speed = AttackSpeedMultiplier;
_animatorEntity.Play("attack", 0, 0f);
entityState = EntityAnimationState.Attacking;
_doSomething = true;
}
}
public void PlayDieAnim()
{
_animatorEntity.speed = 1;
_animatorEntity.Play("die", 0, 0f);
entityState = EntityAnimationState.Dying;
_doSomething = true;
_isDead = true;
}
//SETTER GETTER
public bool IsWalking
{
get { return _isWalking; }
set { _isWalking = value; }
}
public float AttackSpeedMultiplier
{
get; set;
}
public float SpeedMultiplier
{
get; set;
}
}