示例#1
0
 // Start is called before the first frame update
 void Start()
 {
     ShotTimer = Random.value * Controller.FireRate + 0.5f;
     Direction = 1;
     GetComponent <SpriteRenderer>().color = Color.red;
     WaveController = _EnemyController.GetComponent <WaveSpawn>();
     MoveTimer      = Controller.MoveFrequency;
     Destination    = transform.position + new Vector3(Direction * Controller.MoveDistance, 0, 0);
 }
示例#2
0
 void Start()
 {
     ammoModel   = GameObject.FindGameObjectWithTag("Ammo");
     healthModel = GameObject.FindGameObjectWithTag("HealthPack");
     WaveSpawner = GameObject.FindGameObjectWithTag("WaveSpawnerScript").GetComponent <WaveSpawn>();
     KillsText   = GameObject.FindGameObjectWithTag("KillText").GetComponent <Text> ();
     //accuracyText = GameObject.FindGameObjectWithTag ("AccuracyText").GetComponent<Text> ();
     ScoreText = GameObject.FindGameObjectWithTag("ScoreText").GetComponent <Text> ();
 }
示例#3
0
    public void SetWaveSpawn(WaveSpawn wave)
    {
        this.wave         = wave;
        currentBatchIndex = 0;
        currentBatch      = wave.batches[currentBatchIndex];
        GameObject prefab = enemyConfig.Enemies.Where(x => x.type == currentBatch.enemyType).First().prefab;

        pool           = ObjectPooler.GetPool(prefab);
        wait           = true;
        started        = true;
        waitingStarted = Time.time;
        enemiesSpawned = 0;
    }
示例#4
0
    void Awake()
    {
        //getting all the needed references (will be changed)
        targetPoint = GameObject.Find("End").transform;
        waveSpawn   = GameObject.Find("Spawner").GetComponent <WaveSpawn>();
        stats       = GameObject.Find("Engine").GetComponent <Stats>();
        GetComponent <Renderer>().material.color = Random.ColorHSV();
        NavMeshAgent agent = GetComponent <NavMeshAgent>();

        agent.SetDestination(targetPoint.position);
        agent.speed = waveSpawn.speed;
        health      = Mathf.FloorToInt(waveSpawn.health);
    }
示例#5
0
    void StartGame()
    {
        Score     score     = ScoreGO.GetComponent <Score>();
        Lives     lives     = ControllerGO.GetComponent <Lives>();
        WaveSpawn waveSpawn = ControllerGO.GetComponent <WaveSpawn>();

        BigTextGO.transform.parent.gameObject.active = false;
        GameInfoText.active   = true;
        RoundIntroText.active = true;
        ScoreTextGO.active    = false;
        score.SetScore(0);
        lives.SetLives(StartingLives);
        waveSpawn.Restart();

        World.active = true;
        runGame      = true;
    }
示例#6
0
    WaveSegment GenerateWaveSegment(int waveCount, GameObject source)
    {
        var count  = Mathf.Max(0, Mathf.RoundToInt(GenerateScaleWithNoise(waveCount, WaveCountMultiplier, WaveCountError)));
        var spawns = new WaveSpawn[count];

        for (var i = 0; i < spawns.Length; i++)
        {
            // TODO(jmaes7132): Alter probabilties to become harder and harder
            spawns[i] = new WaveSpawn {
                Probabilties  = BaseProbabilities,
                MaxSpawnCount = (int)Mathf.Max(GenerateScaleWithNoise(waveCount, MaxSpawnScale, MaxSpawnError), 1),
                Count         = (int)Mathf.Max(GenerateScaleWithNoise(waveCount, CountScale, CountError), 1),
                Time          = SpawnTime,
                PostSpawnWait = PostSpawnWait
            };
        }
        return(new WaveSegment {
            Spawns = spawns, Source = source
        });
    }
示例#7
0
    //Starts the current wave
    protected void StartWave()
    {
        //reset the groups needed to spawn and the
        m_totalGroupsNeededToSpawn = 0;

        //Loop through the enemy groups and start the spawn groups coroutine.
        WaveSpawn waveSpawn = m_waves.m_waves[m_curWave];

        foreach (EnemyGroup group in waveSpawn.m_enemies)
        {
            //Track the number of groups that spawned
            m_totalGroupsNeededToSpawn++;
            StartCoroutine(SpawnGroup(group));
        }

        //If there are still more waves then queue up the next wave
        if (m_curWave + 1 < m_waves.m_waves.Count)
        {
            StartCoroutine(NextWave());
        }
    }
示例#8
0
    void Update()
    {
        if (currentWaveIndex == waves.Count - 1 && phase != SpawnPhase.Spawning)
        {
            bool finished = true;
            foreach (var go in GameObject.FindGameObjectsWithTag("Goblin"))
            {
                Goblin goblin = go.GetComponent <Goblin>();
                if (goblin.IsAlive())
                {
                    finished = false;
                    break;
                }
            }
            if (finished)
            {
                UIManager.main.ShowTheEnd();
            }
        }

        if (currentWaveIndex == waves.Count - 1)
        {
            UIManager.main.HideIntermissionInfo();
            UIManager.main.HideIntermissionTimer();
        }

        if (phase == SpawnPhase.Spawning)
        {
            //Debug.Log("Starting to spawn " + Time.fixedTime);
            if (!spawningOnGoing)
            {
                for (int i = 0; i < 4; i++)
                {
                    WaveSpawn wave = currentWave.GetSpawn(i);
                    //Batch batch = currentBatch[i];
                    if (wave.batches.Count > 0)
                    {
                        spawnPoints[i].SetWaveSpawn(wave);
                    }
                }

                spawningOnGoing = true;
            }

            // next wave when all the spawners have spawned their enemies
            if (spawnPoints.Aggregate(true, (prod, next) => prod && next.GetHasEnded()))
            {
                spawningOnGoing = false;
                phase           = SpawnPhase.Waiting;
                waitStarted     = Time.fixedTime;
            }
        }
        else if (phase == SpawnPhase.Waiting && (Time.fixedTime - waitStarted > currentWave.WaveEndWaitTime))
        {
            phase = SpawnPhase.Ended;
            UIManager.main.HideIntermissionInfo();
        }
        else if (phase == SpawnPhase.Waiting)
        {
            if (Input.GetKeyDown(KeyCode.Space) && TutorialManager.main.GetFinished())
            {
                skipWaveWaitingPeriod();
                UIManager.main.HideIntermissionInfo();
            }
            else
            {
                UIManager.main.UpdateIntermissionInfo("Wave " + (currentWaveIndex + 2) + " spawns in:");
                UIManager.main.UpdateIntermissionTimer(currentWave.WaveEndWaitTime - (Time.fixedTime - waitStarted));
            }
        }
        else if (phase == SpawnPhase.Ended)
        {
            waveEndStuff();
        }
    }
示例#9
0
        private string GetMonsters(int monsterClass, int spawnClass, DataTable tblMonsters, DataTable tblSpawns)
        {
            string monsters = string.Empty;
            int spawnIndex, monsterIndex;
            List<WaveSpawn> spawns = new List<WaveSpawn>();
            if (monsterClass >= 0)
            {
                //if there's a boss, there are no other spawns
                monsters = GetWikiArticleLink(tblMonsters.Rows[monsterClass]["String_string"].ToString());
            }
            else if (spawnClass >= 0)
            {
                //no boss, get all the spawns

                //assumptions:
                //-base class is always "all" pick type with listed spawns having a count of 1 and equal weight
                //-all spawns have equal weight
                //-spawns don't have subspawns

                List<WaveSpawn> waveSpawns = new List<WaveSpawn>();
                DataRow spawnRow = tblSpawns.Rows[spawnClass];
                DataRow subspawnRow;
                DataRow monsterRow;
                WaveSpawn spawn;
                MonsterSpawn monster;
                StringBuilder builder = new StringBuilder();
                string name, altName;
                string[] nameParts;
                //go through each spawn of the wave
                for (int s = 1; s < 9; s++)
                {
                    spawnIndex = (int)spawnRow["spawn" + s];
                    if (spawnIndex < 0) break;  //nothing else, stop reading

                    subspawnRow = tblSpawns.Rows[spawnIndex];
                    spawn = new WaveSpawn();
                    spawn.Monsters = new List<MonsterSpawn>();
                    spawn.Pick = (SpawnPickType)subspawnRow["pickType"];
                    //go through each individual monster type in the spawn
                    for (int m = 1; m < 9; m++)
                    {
                        monsterIndex = (int)subspawnRow["spawn" + m];
                        if (monsterIndex < 0) break;

                        monsterRow = tblMonsters.Rows[monsterIndex];

                        monster = new MonsterSpawn();
                        monster.Count = int.Parse(subspawnRow["count" + m].ToString().Replace(";", string.Empty));
                        name = monsterRow["String_string"].ToString();
                        //if there's already a monster of the same name, append the other parts of the internal name to differentiate
                        if (spawn.Monsters.Exists(mon => mon.Name == name))
                        {
                            name += " (";
                            altName = monsterRow["name"].ToString();
                            nameParts = altName.Split('_');
                            //should be more than one part, but check anyway
                            if (nameParts.Length > 1)
                            {
                                for (int p = 1; p < nameParts.Length; p++)
                                {
                                    name += nameParts[p] + " ";
                                }
                                name = name.Trim() + ")";
                            }
                        }
                        monster.Name = name;

                        spawn.Monsters.Add(monster);
                    }
                    waveSpawns.Add(spawn);
                }

                //make the list
                builder.AppendLine("<ul>");
                foreach (WaveSpawn wSpawn in waveSpawns)
                {

                    //display "x of:" if not everything will appear
                    if (wSpawn.Pick != SpawnPickType.All && (int)wSpawn.Pick < wSpawn.Monsters.Count)
                    {
                        builder.AppendLine("<li>");
                        builder.AppendLine(wSpawn.Pick.ToString() + " of:");
                        builder.AppendLine("<ul>");
                        builder.Append(GetMonsterList(wSpawn.Monsters));
                        builder.AppendLine("</ul>");
                        builder.AppendLine("</li>");
                    }
                    else
                        builder.Append(GetMonsterList(wSpawn.Monsters));
                }
                builder.Append("</ul>");

                monsters = builder.ToString();
            }
            else
            {
                //no spawns
                monsters = "None";
            }

            return monsters;
        }
示例#10
0
 public Population(int wave_length)
 {
     WaveLength = wave_length;
     WaveSpawn ws = new WaveSpawn();
     Squad     sd = ws.Spawner as Squad;
 }
示例#11
0
        private string GetMonsters(int monsterClass, int spawnClass, DataTable tblMonsters, DataTable tblSpawns)
        {
            string           monsters = string.Empty;
            int              spawnIndex, monsterIndex;
            List <WaveSpawn> spawns = new List <WaveSpawn>();

            if (monsterClass >= 0)
            {
                //if there's a boss, there are no other spawns
                monsters = GetWikiArticleLink(tblMonsters.Rows[monsterClass]["String_string"].ToString());
            }
            else if (spawnClass >= 0)
            {
                //no boss, get all the spawns

                //assumptions:
                //-base class is always "all" pick type with listed spawns having a count of 1 and equal weight
                //-all spawns have equal weight
                //-spawns don't have subspawns

                List <WaveSpawn> waveSpawns = new List <WaveSpawn>();
                DataRow          spawnRow   = tblSpawns.Rows[spawnClass];
                DataRow          subspawnRow;
                DataRow          monsterRow;
                WaveSpawn        spawn;
                MonsterSpawn     monster;
                StringBuilder    builder = new StringBuilder();
                string           name, altName;
                string[]         nameParts;
                //go through each spawn of the wave
                for (int s = 1; s < 9; s++)
                {
                    spawnIndex = (int)spawnRow["spawn" + s];
                    if (spawnIndex < 0)
                    {
                        break;                  //nothing else, stop reading
                    }
                    subspawnRow    = tblSpawns.Rows[spawnIndex];
                    spawn          = new WaveSpawn();
                    spawn.Monsters = new List <MonsterSpawn>();
                    spawn.Pick     = (SpawnPickType)subspawnRow["pickType"];
                    //go through each individual monster type in the spawn
                    for (int m = 1; m < 9; m++)
                    {
                        monsterIndex = (int)subspawnRow["spawn" + m];
                        if (monsterIndex < 0)
                        {
                            break;
                        }

                        monsterRow = tblMonsters.Rows[monsterIndex];

                        monster       = new MonsterSpawn();
                        monster.Count = int.Parse(subspawnRow["count" + m].ToString().Replace(";", string.Empty));
                        name          = monsterRow["String_string"].ToString();
                        //if there's already a monster of the same name, append the other parts of the internal name to differentiate
                        if (spawn.Monsters.Exists(mon => mon.Name == name))
                        {
                            name     += " (";
                            altName   = monsterRow["name"].ToString();
                            nameParts = altName.Split('_');
                            //should be more than one part, but check anyway
                            if (nameParts.Length > 1)
                            {
                                for (int p = 1; p < nameParts.Length; p++)
                                {
                                    name += nameParts[p] + " ";
                                }
                                name = name.Trim() + ")";
                            }
                        }
                        monster.Name = name;

                        spawn.Monsters.Add(monster);
                    }
                    waveSpawns.Add(spawn);
                }


                //make the list
                builder.AppendLine("<ul>");
                foreach (WaveSpawn wSpawn in waveSpawns)
                {
                    //display "x of:" if not everything will appear
                    if (wSpawn.Pick != SpawnPickType.All && (int)wSpawn.Pick < wSpawn.Monsters.Count)
                    {
                        builder.AppendLine("<li>");
                        builder.AppendLine(wSpawn.Pick.ToString() + " of:");
                        builder.AppendLine("<ul>");
                        builder.Append(GetMonsterList(wSpawn.Monsters));
                        builder.AppendLine("</ul>");
                        builder.AppendLine("</li>");
                    }
                    else
                    {
                        builder.Append(GetMonsterList(wSpawn.Monsters));
                    }
                }
                builder.Append("</ul>");

                monsters = builder.ToString();
            }
            else
            {
                //no spawns
                monsters = "None";
            }

            return(monsters);
        }
示例#12
0
    protected virtual IEnumerator SpawnWave(int waveIndex, bool safeSpawn = true)
    {
        WaveSpawn spawnBehaviour = waveBehaviour.Waves[waveIndex];

        int spawnIndex = 0;

        for (int i = 0; i < spawnBehaviour.Spawns.Length; i++)
        {
            SpawnInfo spawnInfo = spawnBehaviour.Spawns[i];

            if (spawnInfo.type == EnemyType.SWARMER)
            {
                Transform spawnpoint = safeSpawn ? area.FindSafeSpawn() : spawnpoints[spawnIndex];

                GameObject swarmer = SpawnEnemy(swarmerPrefab, spawnInfo.type, spawnpoint);

                if (swarmer == null)
                {
                    continue;
                }

                if (swarmer.TryGetComponent(out Flock flock))
                {
                    flock.startingCount = spawnInfo.count;
                    swarmerCount       += flock.startingCount;
                }

                if (!safeSpawn)
                {
                    spawnIndex = (spawnIndex + 1) % spawnpoints.Length;
                }
            }
            else
            {
                for (int j = 0; j < spawnInfo.count; j++)
                {
                    Transform spawnpoint = safeSpawn ? area.FindSafeSpawn() : spawnpoints[spawnIndex];

                    switch (spawnInfo.type)
                    {
                    case EnemyType.FIGHTER:
                        SpawnEnemy(fighterPrefab, spawnInfo.type, spawnpoint);
                        fighterCount++;
                        break;

                    case EnemyType.CHARGER:
                        SpawnEnemy(chargerPrefab, spawnInfo.type, spawnpoint);
                        chargerCount++;
                        break;

                    case EnemyType.CRUISER:
                        SpawnEnemy(cruiserPrefab, spawnInfo.type, spawnpoint);
                        cruiserCount++;
                        break;

                    case EnemyType.CARGO:
                        SpawnEnemy(cargoPrefab, spawnInfo.type, spawnpoint);
                        cargoCount++;
                        break;
                    }

                    if (!safeSpawn)
                    {
                        spawnIndex = (spawnIndex + 1) % spawnpoints.Length;
                    }

                    yield return(new WaitForSeconds(waveBehaviour.TimeBetweenEnemySpawns));
                }
            }
        }
    }
示例#13
0
    public void LoadSpawnInfo()
    {
        currentWaveSpawn = new WaveSpawn();
        spawnTimer = 0.0f;
        switch (GameManager.manager.levelNo)
        {
            case 1:
                switch (GameManager.manager.waveNo)
                {
                    case 1:
                        switch (spawnerID)
                        {
                            case 0:
                                //BASIC
                                AddToSpawnList(0, 1.0f, 1);
                                AddToSpawnList(0, 3.0f, 1);
                                AddToSpawnList(0, 5.0f, 1);

                                //RUNNER
                                AddToSpawnList(1, 2.0f, 1);
                                AddToSpawnList(1, 5.0f, 1);
                                AddToSpawnList(1, 8.0f, 1);
                                AddToSpawnList(1, 11.0f, 1);
                                AddToSpawnList(1, 14.0f, 1);
                                AddToSpawnList(1, 17.0f, 1);
                                AddToSpawnList(1, 20.0f, 5);

                                //WALLER
                                //AddToSpawnList(3, 20.0f, 2);

                                break;
                            case 1:
                                //BASIC
                                AddToSpawnList(1, 5.0f, 3);
                                AddToSpawnList(0, 7.0f, 2);
                                AddToSpawnList(0, 9.0f, 2);
                                AddToSpawnList(0, 11.0f, 4);
                                break;
                        }
                        break;
                    case 2:
                        //WAVE RESISTANCE
                        currentWaveSpawn.resistances[0] = 1.0f;
                        currentWaveSpawn.resistances[2] = 1.0f;
                        currentWaveSpawn.resistances[3] = 0.5f;
                        switch (spawnerID)
                        {
                            case 0:
                                //BASIC
                                AddToSpawnList(0, 1.0f, 4);
                                AddToSpawnList(0, 7.0f, 1);
                                AddToSpawnList(0, 9.0f, 1);
                                AddToSpawnList(0, 11.0f, 4);

                                //RUNNER
                                AddToSpawnList(1, 2.0f, 2);
                                AddToSpawnList(1, 8.0f, 2);
                                AddToSpawnList(1, 14.0f, 2);
                                AddToSpawnList(1, 20.0f, 4);

                                //TANK
                                AddToSpawnList(4, 21.0f, 2);
                                break;
                            case 1:
                                break;
                                //BASIC
                                AddToSpawnList(0, 2.0f, 4);
                                AddToSpawnList(0, 4.0f, 2);
                                AddToSpawnList(0, 6.0f, 2);
                                AddToSpawnList(0, 8.0f, 4);

                                //RUNNER
                                AddToSpawnList(0, 10.0f, 4);
                                AddToSpawnList(1, 14.0f, 2);
                                AddToSpawnList(1, 18.0f, 2);

                                //HUNTER
                                AddToSpawnList(2, 20.0f, 1);

                                //TANK
                                AddToSpawnList(4, 21.0f, 1);
                        }
                        break;
                    case 3:
                        //WAVE RESISTANCE
                        currentWaveSpawn.resistances[0] = 1.0f;
                        currentWaveSpawn.resistances[2] = 1.0f;
                        currentWaveSpawn.resistances[3] = 0.5f;
                        switch (spawnerID)
                        {
                            case 0:
                                //BASIC
                                AddToSpawnList(0, 1.0f, 4);
                                AddToSpawnList(0, 7.0f, 1);
                                AddToSpawnList(0, 9.0f, 1);
                                AddToSpawnList(0, 11.0f, 4);

                                //RUNNER
                                AddToSpawnList(1, 2.0f, 2);
                                AddToSpawnList(1, 8.0f, 2);
                                AddToSpawnList(1, 14.0f, 2);
                                AddToSpawnList(1, 20.0f, 4);
                                break;
                            case 1:
                                break;
                                //BASIC
                                AddToSpawnList(0, 1.0f, 4);
                                AddToSpawnList(0, 7.0f, 2);
                                AddToSpawnList(0, 9.0f, 2);
                                AddToSpawnList(0, 11.0f, 4);

                                //RUNNER
                                AddToSpawnList(0, 2.0f, 4);
                                AddToSpawnList(1, 5.0f, 2);
                                AddToSpawnList(1, 11.0f, 2);
                                AddToSpawnList(1, 17.0f, 4);

                                //HUNTER
                                AddToSpawnList(2, 20.0f, 2);
                        }
                        break;
                    case 4:
                        GameManager.manager.WinGame();
                        break;
                }
                break;
            case 2:
                break;
        }
    }