Esempio n. 1
0
    void Update()
    {
        Wave current = waves [currentWave];

        // Handle success state
        if (waveCompleteScreen != null && waveCompleteScreen.activeSelf)
        {
            waveCompleteDelay -= Time.deltaTime;
            if (waveCompleteDelay <= 0)
            {
                waveCompleteScreen.SetActive(false);
                waveCompleteDelay = 5.0f;
            }
        }

        // Handle wave cooldown
        if (current.currentCooldownDelay > 0)
        {
            CooldownCountdown();
            return;
        }
        else
        {
            waveCooldownScreen.SetActive(false);
        }

        // Handle complete logic
        if (current.started && !current.completed && current.AllEnemiesDied() && current.queue.Count == 0)
        {
            /*
             * If a wave complete screen is set, activate it and
             * remove it after the cooldown.
             */
            if (waveCompleteScreen != null)
            {
                waveCompleteScreen.SetActive(true);
            }

            current.completed = true;

            return;
        }

        if (!current.started)
        {
            // Referencing issue?
            current.started = true;

            foreach (EnemyType enemy in current.enemies)
            {
                UnityEngine.Object resource = Resources.Load("Prefabs/Enemies/" + enemy.type);

                for (int i = 0; i < enemy.number; i++)
                {
                    current.queue.Add(() => {
                        current.Spawn(
                            Instantiate(resource) as GameObject,
                            transform.position,
                            path
                            );
                    });
                }
            }
        }
        else if (!current.completed)
        {
            current.currentSpawnDelay -= Time.deltaTime;
            if (current.currentSpawnDelay < 0)
            {
                current.currentSpawnDelay = Wave.SPAWN_DELAY;

                if (current.queue.Count > 0)
                {
                    current.queue [0] ();
                    current.queue.RemoveAt(0);
                }
            }
        }
        else
        {
            if (currentWave < waves.Length - 1)
            {
                currentWave++;
            }
        }
    }