void RetreatPoliceIfNeeded() { if(policeAlive <= 1 && rammersAlive <= 1 && tankersAlive == 0) { waveStatus = WaveStatus.Intermission; assaultChunkCounter = 0; DisableAllPolice(); } }
private IEnumerator SpawnWave() { enemiesToEndWave = actualLevel * 2 + 8; int enemiesToSpawn = enemiesToEndWave; int spawned = 0; while (spawned < enemiesToSpawn) { Debug.Log("Create enemy"); counterEnemys++; Debug.Log("New Diff: " + diff); int transfInd = Random.Range(0, respawnPsitions.Length); int objectInd = Random.Range(0, enemys.Length); Debug.Log("Enemy num: " + objectInd); Rigidbody obj = (Rigidbody)Instantiate(enemys[objectInd], respawnPsitions[transfInd].position, Quaternion.identity); obj.gameObject.GetComponent <MoveTo>().goal = Player; obj.isKinematic = true; obj.gameObject.GetComponent <EnemyAnimation>().player = Player; obj.name = " " + Time.deltaTime; obj.gameObject.SetActive(true); yield return(new WaitForSeconds(speed)); spawned++; } waveState = WaveStatus.waitCompletion; }
// Update is called once per frame void Update() { switch (waveState) { case WaveStatus.prepare: //video.StartVideo(); waveText.text = "Prepare for the next wave...\n" + MinutesToString(); StartCoroutine(PrepareWave()); actualLevel++; waveState = WaveStatus.preparing; break; case WaveStatus.preparing: break; case WaveStatus.spawn: StartCoroutine(SpawnWave()); waveState = WaveStatus.spawning; break; case WaveStatus.spawning: break; case WaveStatus.waitCompletion: if (enemiesToEndWave <= 0) { ScoreManager.scoreManager.addCoins(); ScoreManager.scoreManager.addPoint(); waveState = WaveStatus.prepare; } break; } }
private void StartWave() { WaveStatus = WaveStatus.InProgress; _waves[Level].Spawn(); WaveChanged?.Invoke(this, EventArgs.Empty); Level++; }
// Use this for initialization void Start() { diff = 0; counterEnemys = 0; actualLevel = 1; waveText.text = ""; waveState = WaveStatus.spawn; hours = 22; Random.InitState((int)System.DateTime.Now.Ticks); }
void ResetStatics(){ score = 0; waveStatus = WaveStatus.Intermission; triggerCount = 0; policeAlive = rammersAlive = tankersAlive = 0; intersectionPercentage = policeToSpawn = tankersToSpawn = rammersToSpawn = 0; PlayerScript.currentDirection = Direction.North; allPoliceList.Clear(); PoliceScript.regPoliceList.Clear(); AudioTriggerScript.playOrder.Clear(); PedestrianScript.allowPedestrianWarning = true; StopAllCoroutines(); }
public void SpawnHelicopter() { HelicopterScript heli = Instantiate(helicopterPrefab, Vector3.zero, Quaternion.identity).GetComponent<HelicopterScript>(); waveStatus = WaveStatus.Boss; UpdateWaveStatusImage(); //DESPAWN ALL OBSTACLES AND POLICE isBoss = true; spawnPedestrians = false; generateObstacles = false; DisableAllPolice(); heli.Initiate(); }
private IEnumerator PrepareWave() { yield return(new WaitForSeconds(2.0f)); waveText.text = ""; yield return(new WaitForSeconds(3.0f)); int i = 3; while (i > 0) { waveText.text = i.ToString(); yield return(new WaitForSeconds(1.0f)); i--; } waveText.text = ""; //video.PauseVideo(); waveState = WaveStatus.spawn; }
void GenerateChunk(int obstaclesToSpawn, int pedestriansToSpawn){ bool spawnPolice = !isBoss; //Update wave status if (isWaveSystem) { switch (waveStatus) { case WaveStatus.Intermission: intermissionChunkCounter++; //Less obstacles generateObstacles = true; spawnPedestrians = true; obstaclesToSpawn /= 3; pedestriansToSpawn /= 3; //Dont spawn police spawnPolice = false; if (intermissionChunkCounter > intermissionChunkAmount) { waveStatus = WaveStatus.Incoming; intermissionChunkCounter = 0; } break; case WaveStatus.Incoming: incomingChunkCounter++; //Dont spawn police spawnPolice = false; if (incomingChunkCounter > incomingChunkAmount) { waveStatus = WaveStatus.Assault; incomingChunkCounter = 0; } break; case WaveStatus.Assault: if(assaultChunkCounter == 0) { if(PlayerScript.currentDirection == Direction.West || PlayerScript.currentDirection == Direction.South) { SpawnPolice(tankerPrefab, tankersPerWave, addToVectorAlongDirectionRemoveRest(play.transform.position, -30, PlayerScript.currentDirection) + addToVectorAlongDirectionRemoveRest(latestChunkPosEnd, 0, dirAfterTurn(PlayerScript.currentDirection, false))); SpawnPolice(rammerPrefab, rammersPerWave, addToVectorAlongDirectionRemoveRest(play.transform.position, 30, PlayerScript.currentDirection) + addToVectorAlongDirectionRemoveRest(latestChunkPosEnd, 0, dirAfterTurn(PlayerScript.currentDirection, false))); SpawnPolice(policePrefab, policePerWave, addToVectorAlongDirectionRemoveRest(play.transform.position, 30, PlayerScript.currentDirection) + addToVectorAlongDirectionRemoveRest(latestChunkPosEnd, 0, dirAfterTurn(PlayerScript.currentDirection, false))); } else { SpawnPolice(tankerPrefab, tankersPerWave, addToVectorAlongDirectionRemoveRest(play.transform.position, 30, PlayerScript.currentDirection) + addToVectorAlongDirectionRemoveRest(latestChunkPosEnd, 0, dirAfterTurn(PlayerScript.currentDirection, false))); SpawnPolice(rammerPrefab, rammersPerWave, addToVectorAlongDirectionRemoveRest(play.transform.position, -30, PlayerScript.currentDirection) + addToVectorAlongDirectionRemoveRest(latestChunkPosEnd, 0, dirAfterTurn(PlayerScript.currentDirection, false))); SpawnPolice(policePrefab, policePerWave, addToVectorAlongDirectionRemoveRest(play.transform.position, -30, PlayerScript.currentDirection) + addToVectorAlongDirectionRemoveRest(latestChunkPosEnd, 0, dirAfterTurn(PlayerScript.currentDirection, false))); } } assaultChunkCounter++; if (assaultChunkCounter > assaultChunkAmountMin) { RetreatPoliceIfNeeded(); } break; case WaveStatus.Boss: generateObstacles = false; spawnPedestrians = false; spawnPolice = false; break; } UpdateWaveStatusImage(); } Vector3 spawnerPos = latestChunkPosEnd; //keeps track how far chunk has already generated Vector3 newestRoadPos = latestChunkPosEnd; // where was the newest road generated? int openLaneIndex = Random.Range(1, lanePositions.Length - 1); //Spawn Obstacles for (int i = 0; i < obstaclesToSpawn; i++){ //Spawns road if needed while (differenceAlongDirection(newestRoadPos, spawnerPos) < 10) { SpawnRoad(newestRoadPos); newestRoadPos += dirToVector() * 10; } spawnerPos += dirToVector() * Random.Range(gapBetweenObstacleMin, gapBetweenObstacleMax); if (generateObstacles) { //Picks a random spawn location //but leave a lane open int randomSpawnPosIndex = RandomRangeExcept(1, lanePositions.Length - 1, openLaneIndex); Vector3 spawnPos = spawnerPos + dirToVector(dirAfterTurn(PlayerScript.currentDirection, true)) * lanePositions[randomSpawnPosIndex]; //Flip rotation if 2 way Direction spawnDir = PlayerScript.currentDirection; if (isTwoWay) { if (randomSpawnPosIndex > lanePositions.Length / 2 - 1) { spawnDir = dirAfterTurn(dirAfterTurn(PlayerScript.currentDirection, false), false); } } //Spawns obstacle SpawnObstacle(spawnPos, spawnDir); } //Spawn pedestrians if (spawnPedestrians) { for (int j = 0; j < pedestriansToSpawn / obstaclesToSpawn; j++) { SpawnPedestrian(pedestrianPrefabs[Random.Range(0, pedestrianPrefabs.Length)], spawnerPos); } } } //Fill in gaps in between chunks with road (because roads are in units of 10, not scalable) while (differenceAlongDirection(newestRoadPos, spawnerPos) < 10) { SpawnRoad(newestRoadPos); newestRoadPos += dirToVector() * 10; } //Spawn an intersection if (intersectionPercentage >= 1f) { newestRoadPos += dirToVector() * 5; SpawnIntersection(newestRoadPos); newestRoadPos += dirToVector() * 15; intersectionPercentage--; } //Spawn police if (spawnPolice) { if (PlayerScript.currentDirection == Direction.West || PlayerScript.currentDirection == Direction.South) { SpawnPolice(tankerPrefab, tankersToSpawn, addToVectorAlongDirectionRemoveRest(play.transform.position, -30, PlayerScript.currentDirection) + addToVectorAlongDirectionRemoveRest(latestChunkPosEnd, 0, dirAfterTurn(PlayerScript.currentDirection, false))); SpawnPolice(rammerPrefab, rammersToSpawn, addToVectorAlongDirectionRemoveRest(play.transform.position, 30, PlayerScript.currentDirection) + addToVectorAlongDirectionRemoveRest(latestChunkPosEnd, 0, dirAfterTurn(PlayerScript.currentDirection, false))); SpawnPolice(policePrefab, policeToSpawn, addToVectorAlongDirectionRemoveRest(play.transform.position, 30, PlayerScript.currentDirection) + addToVectorAlongDirectionRemoveRest(latestChunkPosEnd, 0, dirAfterTurn(PlayerScript.currentDirection, false))); } else { SpawnPolice(tankerPrefab, tankersToSpawn, addToVectorAlongDirectionRemoveRest(play.transform.position, 30, PlayerScript.currentDirection) + addToVectorAlongDirectionRemoveRest(latestChunkPosEnd, 0, dirAfterTurn(PlayerScript.currentDirection, false))); SpawnPolice(rammerPrefab, rammersToSpawn, addToVectorAlongDirectionRemoveRest(play.transform.position, -30, PlayerScript.currentDirection) + addToVectorAlongDirectionRemoveRest(latestChunkPosEnd, 0, dirAfterTurn(PlayerScript.currentDirection, false))); SpawnPolice(policePrefab, policeToSpawn, addToVectorAlongDirectionRemoveRest(play.transform.position, -30, PlayerScript.currentDirection) + addToVectorAlongDirectionRemoveRest(latestChunkPosEnd, 0, dirAfterTurn(PlayerScript.currentDirection, false))); } } //Spawn a trigger Instantiate(triggerPrefab, newestRoadPos, Quaternion.identity); latestChunkPosStart = latestChunkPosEnd; latestChunkPosEnd = newestRoadPos; //Update NavMesh surface.BuildNavMesh(); }
private void StartPreparation() { WaveStatus = WaveStatus.Preparation; _preparationStart = Time.time; }