/// <summary> /// Initialize the current wave /// </summary> protected virtual void InitCurrentWave() { Wave wave = waves[m_CurrentIndex]; wave.waveCompleted += NextWave; wave.Init(); TimedWave timedWave = waves[waveNumber - 1] as TimedWave; float timeToNextWave = timedWave.timeToNextWave; int wavesCount = waves.Count; XEventBus.Instance.Post(EventId.WaveChanged, new XEventArgs(waveNumber, timeToNextWave, wavesCount)); }
/// <summary> /// Starts the waves /// </summary> public virtual void StartWaves() { GameModel.MapCfg mapCfg = ConfigService.Instance.MapCfgList.GetOne(GameData.gameInfo.currentLevels); int[] createMonsterInfo = mapCfg.CreateMonster; int count = createMonsterInfo.Length; for (int i = 0; i < count; i++) { GameObject waveObj = new GameObject(); waveObj.transform.parent = transform; waveObj.name = "Wave" + i; TimedWave timedWave = waveObj.AddComponent <TimedWave>(); WaveCfg waveCfg = ConfigService.Instance.WaveCfgList.GetOne(createMonsterInfo[i]); timedWave.timeToNextWave = waveCfg.timeToNextWave; timedWave.spawnInstructions = new List <SpawnInstructionInfo>(); for (int j = 0; j < waveCfg.monsterInfo.Length; j++) { SpawnCfg spawnCfg = ConfigService.Instance.SpawnCfgList.GetOne(waveCfg.monsterInfo[j]); SpawnInstructionInfo spawnInstructionInfo = new SpawnInstructionInfo(); spawnInstructionInfo.agentId = spawnCfg.agentId; spawnInstructionInfo.delayToSpawn = spawnCfg.delayToSpawn; spawnInstructionInfo.startingNode = spawnCfg.startingNode; timedWave.spawnInstructions.Add(spawnInstructionInfo); } waves.Add(timedWave); } if (waves.Count > 0) { InitCurrentWave(); } else { Debug.LogWarning("[LEVEL] No Waves on wave manager. Calling spawningCompleted"); SafelyCallSpawningCompleted(); } }