private WaveCharacterInfoClass GetAvailableWaveCharacter(WavePhaseClass wavePhase) { CurrentWaveChar = wavePhase.ListOfEnemy.Where(r => r.NumberOfCharacter > 0).First(); CurrentWaveChar.NumberOfCharacter--; Events.AddRange(CurrentWaveChar.TypeOfCharacter.Events); Events = Events.Distinct().ToList(); return(CurrentWaveChar.TypeOfCharacter); }
private WaveCharacterInfoClass GetAvailableRandomWaveCharacter(WavePhaseClass wavePhase) { List <WaveCharClass> ListOfEnemy = wavePhase.ListOfEnemy.Where(r => r.NumberOfCharacter > 0).ToList(); CurrentWaveChar = ListOfEnemy[Random.Range(0, ListOfEnemy.Count)]; CurrentWaveChar.NumberOfCharacter--; Events.AddRange(CurrentWaveChar.TypeOfCharacter.Events); Events = Events.Distinct().ToList(); return(CurrentWaveChar.TypeOfCharacter); }
public IEnumerator SpawnCharFromGivenWave(string waveName, CharacterNameType characterID, string charIdentifier, bool isRandom, Vector2Int pos, bool removeFromWave) { WavePhaseClass wpc = WavePhases.Where(r => r.name == waveName).First(); CurrentWaveChar = wpc.ListOfEnemy.Where(a => a.TypeOfCharacter.CharacterName == characterID).First(); BaseCharacter newChar = GetWaveCharacter(CurrentWaveChar.TypeOfCharacter); if (removeFromWave) { CurrentWaveChar.NumberOfCharacter--; } FungusSpawnedChars.Add(charIdentifier, newChar); yield return(SpawChar(newChar, isRandom, pos, true)); }
private IEnumerator Wave(WavePhaseClass wavePhase) { float timer = 0; WaveCharacterInfoClass waveCharacterInfoClass; while (true) { timer += Time.fixedDeltaTime; yield return(BattleManagerScript.Instance.PauseUntil()); if (timer > wavePhase.DelayBetweenChars && WaveCharcters.Where(r => r.gameObject.activeInHierarchy && r.CharInfo.BaseCharacterType == BaseCharType.MinionType_Script).ToList().Count < wavePhase.MaxEnemyOnScreen) { yield return(new WaitForSeconds(0.5f)); if (wavePhase.IsRandom) { waveCharacterInfoClass = GetAvailableRandomWaveCharacter(wavePhase); } else { waveCharacterInfoClass = GetAvailableWaveCharacter(wavePhase); } newChar = GetWaveCharacter(waveCharacterInfoClass); yield return(SpawChar(newChar, CurrentWaveChar.IsRandomSpowiningTile, CurrentWaveChar.IsRandomSpowiningTile ? new Vector2Int() : CurrentWaveChar.SpowningTile[Random.Range(0, CurrentWaveChar.SpowningTile.Count)], true)); timer = 0; if (wavePhase.ListOfEnemy.Where(r => r.NumberOfCharacter > 0).ToList().Count == 0) { while (true) { if (WaveCharcters.Where(r => r.gameObject.activeInHierarchy && (r.CharInfo.BaseCharacterType == BaseCharType.MinionType_Script || (r.IsOnField && r.CharInfo.BaseCharacterType != BaseCharType.MinionType_Script))).ToList().Count == 0) { yield break; } yield return(null); } } } } }
public IEnumerator SettingUpWave(string waveName) { WavePhaseClass wavePhase = WavePhases.Where(r => r.name == waveName).First(); StartingCharInWave = new List <StartingCharactersForWaveClass>(); foreach (WaveCharClass waveChar in wavePhase.ListOfEnemy) { if (waveChar.AreThereStartingEnemy) { waveChar.NumberOfCharacter -= waveChar.StartingEnemyTiles.Count; StartingCharInWave.Add(new StartingCharactersForWaveClass(waveChar.inRandomPos, waveChar.StartingEnemyTiles, waveChar.TypeOfCharacter)); } } foreach (StartingCharactersForWaveClass startingCharacters in StartingCharInWave) { for (int i = 0; i < startingCharacters.Pos.Count; i++) { newChar = GetWaveCharacter(startingCharacters.TypeOfCharacter); yield return(SpawChar(newChar, startingCharacters.InRandomPos, startingCharacters.Pos[i], false)); } } }