Пример #1
0
 void RetreatPoliceIfNeeded() {
     if(policeAlive <= 1 && rammersAlive <= 1 && tankersAlive == 0) {
         waveStatus = WaveStatus.Intermission;
         assaultChunkCounter = 0;
         DisableAllPolice();                
     }
 }
Пример #2
0
    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;
    }
Пример #3
0
    // 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++;
        }
Пример #5
0
    // 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);
    }
Пример #6
0
    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();
}
Пример #7
0
    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();
    }
Пример #8
0
    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;
    }
Пример #9
0
    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;
 }