52 lines
No EOL
1.5 KiB
C#
52 lines
No EOL
1.5 KiB
C#
using System.Collections;
|
|
using UnityEngine;
|
|
|
|
public class OrinMoveAndSpawn : EnemyAbility
|
|
{
|
|
[SerializeField] private Enemy ghostFairy;
|
|
[SerializeField] private int fairiesToSpawn;
|
|
private int currentFairiesLeft;
|
|
[SerializeField] private int variance;
|
|
[SerializeField] private Enemy thisEnemy;
|
|
[SerializeField] private float moveSpeed;
|
|
protected override void AbilityEffects()
|
|
{
|
|
base.AbilityEffects();
|
|
currentFairiesLeft = fairiesToSpawn + Random.Range(-variance, variance);
|
|
thisEnemy.preventWobble = true;
|
|
thisEnemy.isStalled = true;
|
|
StartCoroutine(MoveToPosition(transform.position, WaveManager.instance.GetRandomEnemyPoint(), moveSpeed));
|
|
}
|
|
|
|
private IEnumerator MoveToPosition(Vector3 enemyOrigin, Vector3 moveDirection, float lerpSpeed)
|
|
{
|
|
float currentMovement = 0;
|
|
while (currentMovement < 1)
|
|
{
|
|
currentMovement += Time.deltaTime * lerpSpeed;
|
|
if (currentMovement >= 1)
|
|
{
|
|
SpawnGhostFairy();
|
|
}
|
|
thisEnemy.transform.position = Vector3.Lerp(enemyOrigin, moveDirection, currentMovement);
|
|
yield return null;
|
|
}
|
|
}
|
|
|
|
private void SpawnGhostFairy()
|
|
{
|
|
Enemy newEnemy = Instantiate(ghostFairy, WaveManager.instance.enemyFolder);
|
|
newEnemy.originalPosition = transform.position;
|
|
WaveManager.instance.enemiesInPlay.Add(newEnemy);
|
|
if (currentFairiesLeft > 0)
|
|
{
|
|
currentFairiesLeft--;
|
|
StartCoroutine(MoveToPosition(transform.position, WaveManager.instance.GetRandomEnemyPoint(), moveSpeed));
|
|
}
|
|
else
|
|
{
|
|
thisEnemy.preventWobble = false;
|
|
thisEnemy.isStalled = false;
|
|
}
|
|
}
|
|
} |