void Update() { if (GameManager.inst.state != GameManager.GameState.InGame) { return; } GameManager.GameplayParams par = GameManager.inst.currentParams; float dt = Time.deltaTime; delay += dt * normalizedSpeed * par.delayPerUnitOfDistance; distance += dt * speed; duration += dt; const float SPEED_SMOOTH_TIME = 1; _speed = Mathf.SmoothDamp(_speed, _targetSpeed, ref _speedVelocity, SPEED_SMOOTH_TIME); if (InputManager.inst.left) { AudioManager.inst.playSound("Click"); IssueLeftCommand(); } else if (InputManager.inst.right) { AudioManager.inst.playSound("Click"); IssueRightCommand(); } gameObject.transform.position = Vector3.SmoothDamp(gameObject.transform.position, targetPosition, ref velocity, laneChangeTime); gameObject.transform.rotation = Quaternion.AngleAxis(Mathf.Clamp(-velocity.x * laneChangeYawIntensity, -laneChangeMaxYaw, laneChangeMaxYaw), Vector3.forward); _glowTarget = canTakeDamage ? 0 : 1; _glow = Mathf.SmoothDamp(_glow, _glowTarget, ref _glowVelocity, 0.2f); _shipMaterial.SetFloat(_GlowID, _glow); }
void spawnNext() { _lastSpawnTime2 = _lastSpawnTime; _lastSpawnTime = Time.time; Hitable prefab = astroidPrefab; GameManager.GameplayParams par = GameManager.inst.currentParams; float timeSinceLastPU = Time.time - _timeAtLastPU; if (timeSinceLastPU >= par.spawnPUEvry) { /* * const float RANDOM_CHANCE = 0.2f; // random chance of getting a powerup for no reason * const float MIN_DELAY = 0.25f; // minimum delay before we can get Amplify * const float MIN_JUMP_GAP = 15; // minimum time sice last Jump before we can get it again * * _availablePUs.Clear(); * if (Player.instance.currentHealth < Player.instance.maxHealth || Random.value < RANDOM_CHANCE) * _availablePUs.Add(repairPrefab); * if (Player.instance.delay > MIN_DELAY || Random.value < RANDOM_CHANCE) * _availablePUs.Add(amplifyPrefab); * if (Time.time - _timeAtLastJump > MIN_JUMP_GAP || Random.value < RANDOM_CHANCE) * _availablePUs.Add(jumpPrefab); * * int numPowerups = _availablePUs.Count; * if (numPowerups > 0) { * _numAstroidsSinceLastPU = 0; * int index = (int)(Random.value * numPowerups); * prefab = _availablePUs[index]; * if (prefab.type == Hitable.HitableType.Jump) * _timeAtLastJump = Time.time; * } */ switch (_powerupIndex) { case 0: prefab = repairPrefab; break; case 1: prefab = amplifyPrefab; var baseAmplifyAmount = Player.instance.delay - _delayWhenLastAmplifySpawned; var bonus = baseAmplifyAmount * par.amplifyBonusPercent; Player.instance.amplifyAmount = baseAmplifyAmount + bonus; break; case 2: prefab = jumpPrefab; break; } _powerupIndex = (_powerupIndex + 1) % 3; _timeAtLastPU = Time.time; } int lane = _lastLane; while (lane == _lastLane) { lane = Random.Range(-1, 2); } _lastLane = lane; Hitable hitable = Instantiate(prefab); hitable.transform.SetParent(transform); hitable.transform.localPosition = new Vector3(lane * laneWidth, 0.5f, _laneLength / 2f); _hitables.Add(hitable); }
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); } } }