ReisenYoumuOuting/Assets/Scripts/Abilities/EnemyTackle.cs

58 lines
1.7 KiB
C#

using UnityEngine;
public class EnemyTackle : EnemyAbility
{
private Vector3 originalPosition;
private Vector3 movePosition;
[SerializeField] private Enemy thisEnemy;
public float distanceToReturn;
public float distanceToDamage;
private bool isCloseToPlayer;
private bool returning;
[Header("Speeds")]
[SerializeField] private float tackleSpeed;
[SerializeField] private float returnSpeed;
protected override void AbilityEffects()
{
base.AbilityEffects();
returning = false;
thisEnemy.onTakeDamage += ReturnToPosition;
originalPosition = transform.position;
movePosition = WaveManager.instance.GetRandomPlayerPoint();
thisEnemy.isStalled = true;
thisEnemy.preventWobble = true;
StopCoroutine(thisEnemy.currentMovementRoutine);
thisEnemy.currentMovementRoutine = StartCoroutine(thisEnemy.MoveToPosition(originalPosition, movePosition, tackleSpeed));
}
protected override void Update()
{
base.Update();
if (!returning)
{
if (Vector3.Distance(transform.position, movePosition) < distanceToReturn && !isCloseToPlayer)
{
isCloseToPlayer = true;
}
else if (isCloseToPlayer && Vector3.Distance(transform.position, movePosition) < distanceToDamage)
{
WaveManager.instance.player.TakeDamage(power);
ReturnToPosition();
}
}
}
private void ReturnToPosition()
{
thisEnemy.onTakeDamage -= ReturnToPosition;
returning = true;
if (thisEnemy.currentMovementRoutine != null)
{
StopCoroutine(thisEnemy.currentMovementRoutine);
}
thisEnemy.preventWobble = false;
thisEnemy.isStalled = true;
thisEnemy.currentMovementRoutine = StartCoroutine(thisEnemy.MoveToPosition(transform.position, originalPosition, returnSpeed));
}
}