// 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); }
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> (); }
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; }
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); }
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; }
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 }); }
//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()); } }
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(); } }
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; }
public Population(int wave_length) { WaveLength = wave_length; WaveSpawn ws = new WaveSpawn(); Squad sd = ws.Spawner as Squad; }
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); }
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)); } } } }
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; } }