EscapeShooter/My project/Assets/Project Files/Game/Scripts/Enemy/Sniper/SniperStates.cs

74 lines
1.7 KiB
C#

using UnityEngine;
using Watermelon.SquadShooter;
namespace Watermelon.Enemy.Sniper
{
public enum State
{
Patrolling,
Following,
Attacking,
Aiming,
Fleeing
}
public class SniperAimState : StateBehavior<SniperEnemyBehavior>
{
private SniperEnemyBehavior enemy;
public SniperAimState(SniperEnemyBehavior enemy) : base(enemy)
{
this.enemy = enemy;
}
private bool isYellow;
private TweenCase delayedCase;
private float startAimingTime;
public override void OnStart()
{
isYellow = true;
enemy.EnableLaser();
delayedCase = Tween.DelayedCall(enemy.YellowAimingDuration, () => {
isYellow = false;
enemy.MakeLaserRed();
delayedCase = Tween.DelayedCall(enemy.RedAimingDuration, () => {
InvokeOnFinished();
});
});
startAimingTime = Time.time;
enemy.Animator.SetBool("Aim", true);
}
public override void OnUpdate()
{
if (isYellow || (!isYellow && !enemy.IsRedStatic))
{
enemy.Rotation = Quaternion.Lerp(enemy.Rotation, Quaternion.LookRotation((Target.TargetPosition - Position).normalized), Time.deltaTime * 5);
}
if (Time.time > startAimingTime + 0.25f)
{
enemy.AimLaser();
}
}
public override void OnEnd()
{
delayedCase.KillActive();
enemy.DisableLaser();
enemy.Animator.SetBool("Aim", false);
}
}
}