public Wave(int waveId, WaveMgr waveMgr, PassItem passData, GameObject player, int guid) { m_WaveId = waveId; m_StartWave = false; m_Guid = guid; m_CreateInfo = new List <MonsterItem>(); m_RoundRoleCreateInfo = new List <MonsterItem>(); m_BornNodeList = new List <GameObject>(); m_RoundRoleBornNodes = (Global.gApp.CurScene as FightScene).GetBornNodes(); m_NormalScene = Global.gApp.CurScene.IsNormalPass(); m_WaveMgr = waveMgr; //m_WaveData = Global.gApp.gGameData.GetWaveData().Find(l => l.id == waveId); m_WaveData = Global.gApp.gGameData.WaveData.Get(waveId); m_PassData = passData; m_MainPlayer = player; m_Monsters = new List <Monster>(); m_TriggerType = (TriggerType)m_WaveData.trigMode[0]; m_DtCreateCount = Mathf.Max(m_DtCreateCount, m_WaveData.NumTime); if (m_WaveData.enemyNum.Length == 1 && m_WaveData.enemyID.Length > 1) { m_RandomType = RandomType.RandMonster; } else { m_RandomType = RandomType.RandCreateInfo; } InitMonsterInfo(); RegisterListeners(); StartWave(); }
//public SpawnQuest waveData; public void AddWave(WaveItem item) { WaveItem[] items = new WaveItem[waves.Length+1]; for (int i = 0; i < waves.Length; i++) { items[i] = waves[i]; } items[items.Length - 1] = item; this.waves = items; }
/// <summary> /// Creates and sets up new enemy /// </summary> /// <param name="enemyDescription">WaveItem desribing enemy's health, speed, reward, etc.</param> private void SpawnEnemy(WaveItem enemyDescription) { Enemy e = Instantiate(enemyDescription.EnemyType, GameControllerS.I.EnemiesParent.transform); e.SetupEnemy(enemyDescription.Speed, enemyDescription.EnemyHealth, enemyDescription.Reward); e.EnemyFinished += GameControllerS.I.EnemyFinished; e.EnemyKilled += GameControllerS.I.EnemyKilledReward; e.EnemyFinished += EnemyFinishedOrKilled; e.EnemyKilled += EnemyFinishedOrKilled; }
public void DrawEditableTree(OneWayTreeNode node) { node.data.title = EditorGUILayout.TextField("Title", node.data.title); node.data.description = EditorGUILayout.TextField("Description: " + node.data.description, node.data.description); node.data.reward.money = EditorGUILayout.IntField("Money: " + node.data.reward.money, node.data.reward.money); // waves ... for (int i = 0; i < node.data.waves.Length; i++) { WaveItem item = node.data.waves[i]; item.itemId = (WaveSpawnItems)EditorGUILayout.EnumFlagsField("Unit: " + item.itemId, item.itemId); item.times = EditorGUILayout.IntField("Times: " + item.times, item.times); item.spawnRate = EditorGUILayout.FloatField("Spawn rate: " + item.spawnRate, item.spawnRate); if (GUILayout.Button("- wave")) { node.data.RemoveWave(i); } } if (GUILayout.Button("+ wave")) { node.data.AddWave(new WaveItem { itemId = 0, times = 1, spawnRate = GameManager.EnemySpawnRate }); } // end waves... if (GUILayout.Button("+ node")) { node.children.Add(new OneWayTreeNode() { children = new System.Collections.Generic.List <OneWayTreeNode>(), data = new QuestInfo() { title = "Not assigned", reward = new QuestReward() { money = 100 }, description = "empty", waves = new WaveItem[] { new WaveItem { itemId = 0, times = 1 } } } } ); } for (int i = 0; i < node.children.Count; i++) { EditorGUILayout.LabelField("L_" + i + "_>"); EditorGUI.indentLevel++; DrawEditableTree(node.children[i]); EditorGUI.indentLevel--; } }
public void RemoveWave(int id) { WaveItem[] items = new WaveItem[waves.Length-1]; int iid = 0; for (int i = 0; i < waves.Length; i++) { if (i != id) { items[iid] = waves[i]; iid++; } } this.waves = items; }
private void CheckPassData() { PassItem[] items = Global.gApp.gGameData.PassData.items; foreach (PassItem passItem in items) { foreach (int waveId in passItem.waveID) { WaveItem waveData = Global.gApp.gGameData.WaveData.Get(waveId); if (waveData == null) { Debug.LogError("PassData " + passItem.id + " 的 " + "waveData " + waveId + "不存在 "); continue; } EZ.Data.Monster monsterData = Global.gApp.gGameData.MosterData; if (waveData.enemyNum.Length > 1) { if (waveData.enemyNum.Length != waveData.enemyID.Length) { Debug.LogError("waveData " + waveData.id + "配置错误 ememy count 不等于 ememyId count"); continue; } foreach (int enemyId in waveData.enemyID) { MonsterItem monsterItem = monsterData.Get(enemyId); if (monsterItem == null) { Debug.LogError("waveData " + waveData.id + " EnemyId " + enemyId + " does not exist!"); continue; } } } else { if (waveData.enemyNum.Length == 0) { Debug.LogError("waveData " + waveData.id + "配置错误 ememy count 未配置"); continue; } } int totalCount = 0; foreach (int count in waveData.enemyNum) { totalCount += count; } if (totalCount == 0) { Debug.LogError("waveData " + waveData.id + " Enemy 数量为0 !"); } } } Debug.Log("=============ok nor error==========="); }
public WFGUI() { InitializeComponent(); this.SaveAudioFileDialog = new SaveFileDialog(); currWaveItem = new WaveItem() { waveType = WAVE_TYPE_COMBOS[DEFAULT_COMBO_INDEX], waveOperator = OPERATOR_COMBOS[DEFAULT_COMBO_INDEX], waveFrequency = DEFAULT_WAVE_FREQUENCY }; waves = new List <WaveItem>(); InnitConstantsAndLabels(); InnitWavesGUI(); }
private IEnumerator SpawnWave(int index) { Wave wave = waves[index]; // walk through all WaveItems in Wave for (int i = 0; i < wave.WaveItems.Length; i++) { WaveItem w = wave.WaveItems[i]; yield return(new WaitForSeconds(w.TimeDelay)); // delay before batch // spawn WaveItem.Count enemies SpawnEnemy(w); for (int j = 1; j < w.Count; j++) { yield return(new WaitForSeconds(w.TimeBetween)); // delay between enemies in batch SpawnEnemy(w); } } }
public WaveItem(WaveItem currWaveItem) { waveType = currWaveItem.waveType; waveOperator = currWaveItem.waveOperator; waveFrequency = currWaveItem.waveFrequency; }
private void LoadWaveConfing(string waveConfigFile) { string[] lines = waveConfigFile.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); Debug.Log("Loading Wave Configuration: " + lines.Length + " lines."); List <Wave> waves = new List <Wave>(); List <WaveItem> items = new List <WaveItem>(); for (int lineNumber = 0; lineNumber < lines.Length; lineNumber++) { string line = lines[lineNumber]; if (line == null) { break; } if (line.Length == 0 || line[0] == '#') // comment in file { continue; } string[] tokens = line.Split(new char[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries); if (tokens.Length > 0 && tokens[0] == "wave") // add current wave to wave list { if (items.Count > 0) { waves.Add(new Wave(items.ToArray())); } items.Clear(); continue; } if (tokens.Length > 0 && tokens[0] == "repeat") // add last wave as repeat wave { if (items.Count > 0) { waves.Add(new Wave(items.ToArray())); } if (tokens.Length != 5) { throw new ConfigFileException("Invalid number of values in Repeat on line " + lineNumber); } if (!float.TryParse(tokens[1], System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out float enemyHPmult)) { throw new ConfigFileException("Invalid enemy HP multiplier in repeat on line " + lineNumber); } if (!int.TryParse(tokens[2], out int enemyHPadd)) { throw new ConfigFileException("Invalid enemy HP addition in repeat on line " + lineNumber); } if (!float.TryParse(tokens[3], System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out float enemyCountMult)) { throw new ConfigFileException("Invalid enemy count multiplier in repeat on line " + lineNumber); } if (!int.TryParse(tokens[4], out int enemyCountAdd)) { throw new ConfigFileException("Invalid enemy count addition in repeat on line " + lineNumber); } if (items.Count > 0) { waves.Add(new RepeatWave(items.ToArray(), enemyHPmult, enemyHPadd, enemyCountMult, enemyCountAdd)); } items.Clear(); continue; } WaveItem item = ParseWaveItem(tokens, lineNumber + 1); items.Add(item); } // add last wave if (items.Count > 0) { waves.Add(new Wave(items.ToArray())); } GameControllerS.I.WaveController.waves = waves.ToArray(); waveUI.EnableStartButton(); }