예제 #1
0
    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();
        }
    }
예제 #2
0
    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;
            }
        };
    }