Exemplo n.º 1
0
    void updateEnemies()
    {
        if (GameManager.inst.state == GameManager.GameState.InGame)
        {
            GameManager.GameplayParams par = GameManager.inst.currentParams;

            float timeSinceLastSpawn = Time.time - _lastSpawnTime;
            float timeSincePrevSpawn = Time.time - _lastSpawnTime2;

            bool needToSpawn = timeSinceLastSpawn >= _timeToNextSpawn;
            if (needToSpawn)
            {
                needToSpawn = timeSincePrevSpawn >= par.spawnSecondaryGap;
            }

            /*
             * // make sure we don't spawn too much
             * bool needToSpawn = timeSinceLastSpawn >= par.spawnMinGap && timeSincePrevSpawn >= par.spawnSecondaryGap;
             * if (needToSpawn) {
             *      // make sure we spawn too sparsly
             *      needToSpawn = timeSinceLastSpawn >= par.spawnMaxGap;
             *      // randomize spawning
             *      if (needToSpawn == false) {
             *              needToSpawn = Random.value < par.spawnChance * Time.deltaTime;
             *      }
             * }
             */

            if (needToSpawn)
            {
                spawnNext();
                _timeToNextSpawn = Mathf.Lerp(par.spawnMinGap, par.spawnMaxGap, Random.value);
            }
        }

        Vector3 playerPos = Player.instance.transform.localPosition;
        Vector3 offset    = new Vector3(0, 0, _traveledDistanceDelta);

        for (int i = _hitables.Count - 1; i >= 0; i--)
        {
            Hitable hitable = _hitables[i];
            hitable.transform.localPosition -= offset;
            Vector3 hitablePos = hitable.transform.localPosition;

            if (hitable.destroyed == false && (hitable.canDamage == false || Player.instance.canTakeDamage))
            {
                float distX = Mathf.Abs(hitablePos.x - playerPos.x);
                float distZ = Mathf.Abs(hitablePos.z - playerPos.z);

                const float THRESH_X = 0.5f;
                const float THRESH_Z = 0.5f;
                if (distX < THRESH_X && distZ < THRESH_Z)
                {
                    hitable.destroy();
                }
                if (distZ < THRESH_Z && hitable.type == Hitable.HitableType.Amplify)
                {
                    _delayWhenLastAmplifySpawned = Player.instance.delay;
                }
            }

            if (hitablePos.z < -_laneLength / 2f)
            {
                _hitables.RemoveAt(i);
                Destroy(hitable.transform.gameObject);
            }
        }
    }