IEnumerator AttackAfterDelay(float delay) { yield return(new WaitForSeconds(delay)); List <Callable> undoAffectsActions = new List <Callable>(); shootObjectDetection.ValidEnemiesInRange.ForEach(e => { if (e != null) { string priorTag = e.tag; e.tag = tagForEnemiesFrozen; FollowPointPathBehavior movement = e.GetComponentInChildren <FollowPointPathBehavior>(); float priorSpeed = movement.speed; movement.speed = 0; undoAffectsActions.Add(() => { if (e != null) { e.tag = priorTag; movement.speed = priorSpeed; } }); } }); yield return(new WaitForSeconds(freezeTimeSeconds)); foreach (Callable c in undoAffectsActions) { c(); } }
public override void Start() { base.Start(); followPointPathBehavior = gameObject.GetComponent <FollowPointPathBehavior>(); OnEnemyDeath += () => { List <EnemyBehavior> enemies = new List <EnemyBehavior>(FindObjectsOfType <EnemyBehavior>()); GameController.EmitText(null, gameObject.transform.position, "MITM Attack!", 1f, Color.red, 50, new Vector3(0, .5f)); enemies = new List <EnemyBehavior>(enemies.FindAll(e => e != this).OrderBy(e => Random.value)); for (int i = 0; i < maxEnemiesCanTeleport && i < enemies.Count; i++) { enemies[i].transform.position = this.transform.position; FollowPointPathBehavior follow = enemies[i].GetComponent <FollowPointPathBehavior>(); follow.pathPointIndex = followPointPathBehavior.pathPointIndex; } }; }