//flag passed indicate initial reset, only true in the first call void Reset(bool initial = false) { //if use path-looping, use loop point otherwise use the starting point if (path.loop && !initial) { waypointID = path.GetLoopPoint(); } else { waypointID = 1; } subWaypointID = 0; subPath = path.GetWPSectionPath(waypointID); //only reset position if not using path-looping or it's the initial reset if (!path.loop || initial) { indicatorT.position = path.GetSpawnPoint().position; } }
IEnumerator SpawnSubWave(SubWave subWave, Wave parentWave) { yield return(new WaitForSeconds(subWave.delay)); PathTD path = defaultPath; if (subWave.path != null) { path = subWave.path; } Vector3 pos = path.GetSpawnPoint().position; Quaternion rot = path.GetSpawnPoint().rotation; int spawnCount = 0; while (spawnCount < subWave.count) { GameObject obj = ObjectPoolManager.Spawn(subWave.unit, pos, rot); UnitCreep unit = obj.GetComponent <UnitCreep>(); if (subWave.overrideHP > 0) { unit.OverrideByHP(subWave.overrideHP); } else { unit.OverrideByWave(parentWave.waveID, developPerWave); } unit.Init(path, totalSpawnCount, parentWave.waveID); totalSpawnCount += 1; activeUnitCount += 1; parentWave.activeUnitCount += 1; spawnCount += 1; if (spawnCount == subWave.count) { break; } yield return(new WaitForSeconds(subWave.interval)); } parentWave.subWaveSpawnedCount += 1; if (parentWave.subWaveSpawnedCount == parentWave.subWaveList.Count) { parentWave.spawned = true; spawning = false; Debug.Log("wave " + (parentWave.waveID + 1) + " has done spawning"); yield return(new WaitForSeconds(0.5f)); if (currentWaveID <= waveList.Count - 2) { //for UI to show spawn button again if (spawnMode == _SpawnMode.Continous && allowSkip && onEnableSpawnE != null) { onEnableSpawnE(); } if (spawnMode == _SpawnMode.WaveCleared && allowSkip && onEnableSpawnE != null) { onEnableSpawnE(); } } } }
IEnumerator SpawnSubWave(SubWave subWave, Wave parentWave) { if (subWave.unit == null) { Debug.LogWarning("No creep prefab has been assigned to sub-wave", this); yield break; } yield return(new WaitForSeconds(subWave.delay)); PathTD path = defaultPath; if (subWave.path != null) { path = subWave.path; } Vector3 pos = path.GetSpawnPoint().position; Quaternion rot = path.GetSpawnPoint().rotation; int spawnCount = 0; if (subWave.unitC == null) { subWave.unitC = subWave.unit.GetComponent <UnitCreep>(); } while (spawnCount < subWave.count) { if (subWave.unit == null) { Debug.LogWarning("no creep has been assigned to subwave", this); break; } GameObject obj = ObjectPoolManager.Spawn(subWave.unit, pos, rot); UnitCreep unit = obj.GetComponent <UnitCreep>(); if (subWave.overrideHP > 0) { unit.defaultHP = subWave.overrideHP; } else { unit.defaultHP = subWave.unitC.defaultHP; } if (subWave.overrideShield > 0) { unit.defaultShield = subWave.overrideShield; } else { unit.defaultShield = subWave.unitC.defaultShield; } if (subWave.overrideMoveSpd > 0) { unit.moveSpeed = subWave.overrideMoveSpd; } else { unit.moveSpeed = subWave.unitC.moveSpeed; } unit.Init(path, totalSpawnCount, parentWave.waveID); totalSpawnCount += 1; activeUnitCount += 1; parentWave.activeUnitCount += 1; spawnCount += 1; if (spawnCount == subWave.count) { break; } yield return(new WaitForSeconds(subWave.interval)); } parentWave.subWaveSpawnedCount += 1; if (parentWave.subWaveSpawnedCount == parentWave.subWaveList.Count) { parentWave.spawned = true; spawning = false; Debug.Log("wave " + (parentWave.waveID + 1) + " has done spawning"); yield return(new WaitForSeconds(0.5f)); if (currentWaveID <= waveList.Count - 2) { if ((spawnMode == _SpawnMode.WaveCleared || spawnMode == _SpawnMode.Continous) && allowSkip) { TDTK.OnEnableSpawn(); } } } }