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); } } }