// Start New Combat Encounter Events #region public Action StartNewBasicEncounterEvent(EnemyWaveSO enemyWave = null) { Action action = new Action(); StartCoroutine(StartNewBasicEncounterEventCoroutine(action, enemyWave)); return(action); }
public void SetAwaitingCombatEventState(EnemyWaveSO combatAwaited) { Debug.Log("StoryEventController.SetAwaitingCombatEventState() called, on continute button clicked, combat event " + combatAwaited.waveName + " will be triggered"); combatEventAwaitingStart = combatAwaited; eventFiredOnContinueButtonClicked = ContinueButtonEvent.TriggerCombatEvent; }
private IEnumerator StartNewBasicEncounterEventCoroutine(Action action, EnemyWaveSO enemyWave = null) { // Disable player's ability to click on encounter buttons and start new encounters WorldManager.Instance.canSelectNewEncounter = false; // fade out view, wait until completed Action fadeOut = BlackScreenManager.Instance.FadeOut(BlackScreenManager.Instance.aboveEverything, 6, 1, true); yield return(new WaitUntil(() => fadeOut.ActionResolved() == true)); // Destroy the previous level and tiles + reset values/properties, turn off unneeded views ClearPreviousEncounter(); // make char roster canvas turn off when disabled combatSceneIsActive = true; // Create a new level LevelManager.Instance.CreateLevel(); // Reset Camera CameraManager.Instance.ResetCameraOnCombatStart(); // Set up activation window holders ActivationManager.Instance.CreateSlotAndWindowHolders(); // Create defender GO's CharacterRoster.Instance.InstantiateDefenders(); // Instantiate enemies EnemySpawner.Instance.SpawnEnemyWave("Basic", enemyWave); // disable unneed UI views UIManager.Instance.DisableUnneededCanvasesOnCombatStart(); // Set encounter type currentEncounterType = WorldEncounter.EncounterType.BasicEnemy; // Fade scene back in, wait until completed Action fadeIn = BlackScreenManager.Instance.FadeIn(BlackScreenManager.Instance.aboveEverything, 6, 0, false); yield return(new WaitUntil(() => fadeIn.ActionResolved() == true)); // Apply Relevant State Effects Action stateApplications = StateManager.Instance.ApplyAllStateEffectsToLivingEntities(); yield return(new WaitUntil(() => stateApplications.ActionResolved() == true)); // Check for expired states and remove them Action stateExpirations = StateManager.Instance.CheckForStateExpirationsOnCombatStart(); yield return(new WaitUntil(() => stateExpirations.ActionResolved() == true)); // Start activations / combat start events ActivationManager.Instance.OnNewCombatEventStarted(); // declare this event complete action.actionResolved = true; }
public EnemyWaveSO GetRandomWaveSO(List <EnemyWaveSO> enemyWaves, bool removeWaveFromList = false) { EnemyWaveSO enemyWaveReturned = enemyWaves[Random.Range(0, enemyWaves.Count)]; if (removeWaveFromList == true && enemyWaveReturned != null && enemyWaves.Count >= 1) { enemyWaves.Remove(enemyWaveReturned); } return(enemyWaveReturned); }
// View + GUI Logic #region public void ResetAndFlushAllPropertiesAndViews() { Debug.Log("StoryEventController.ResetAndFlushAllPropertiesAndViews()"); DestroyAllChoiceButtons(); SetContinueButtonVisibility(false); SetContinueButtonInteractableState(false); SetEventDescriptionText(""); SetStoryNameText(""); eventFiredOnContinueButtonClicked = ContinueButtonEvent.None; combatEventAwaitingStart = null; currentStoryPage = null; }
public IEnumerator SpawnEnemyWave(EnemyWaveSO enemyWave, Action action) { TileScript spawnCentrePoint = GetRandomEnemyWaveCentrePoint(); CameraManager.Instance.SetCameraLookAtTarget(spawnCentrePoint.gameObject); yield return(new WaitUntil(() => CameraManager.Instance.IsCameraWithinRangeOfTarget(spawnCentrePoint.gameObject) == true)); //yield return new WaitForSeconds(2f); List <TileScript> possibleSpawnLocations = GetValidSpawnLocationsWithinRangeOfCentrePoint(spawnCentrePoint, 3); StartCoroutine(InstantiateEnemiesFromWave(enemyWave, possibleSpawnLocations)); yield return(new WaitForSeconds(3f)); action.actionResolved = true; }
public EnemyWaveSO GetEnemyWaveByName(string name) { List <EnemyWaveSO> allWaves = new List <EnemyWaveSO>(); EnemyWaveSO waveReturned = null; allWaves.AddRange(basicEnemyWavesActOneHalfOne); allWaves.AddRange(eliteEnemyWaves); allWaves.AddRange(bossEnemyWaves); allWaves.AddRange(storyEventEnemyWaves); foreach (EnemyWaveSO wave in allWaves) { if (wave.waveName == name) { waveReturned = wave; break; } } return(waveReturned); }
// Spawning + Instantiation #region public IEnumerator InstantiateEnemiesFromWave(EnemyWaveSO enemyWave, List <TileScript> spawnLocations) { foreach (EnemyGroup enemyGroup in enemyWave.enemyGroups) { int randomIndex = Random.Range(0, enemyGroup.enemyList.Count); // Choose a random tile from the list of spawnable locations TileScript spawnLocation = LevelManager.Instance.GetRandomValidMoveableTileFromList(spawnLocations); // Create Portal VFX object GameObject portalVFX = Instantiate(PrefabHolder.Instance.PortalPrefab); portalVFX.transform.position = spawnLocation.WorldPosition; yield return(new WaitForSeconds(0.1f)); // Instantiate enemy GO, get script GameObject newEnemyGO = Instantiate(enemyGroup.enemyList[randomIndex]); Enemy newEnemy = newEnemyGO.GetComponent <Enemy>(); // Run the enemy's constructor newEnemy.InitializeSetup(spawnLocation.GridPosition, spawnLocation); yield return(new WaitForSeconds(0.5f)); } }
// Enemy Spawning + Related #region public void SpawnEnemyWave(string enemyType = "Basic", EnemyWaveSO enemyWave = null) { Debug.Log("SpawnEnemyWave() Called...."); PopulateEnemySpawnLocations(); EnemyWaveSO enemyWaveSO = enemyWave; // for testing if (runTestWaveOnly) { enemyWaveSO = testingWave; } // If we have not given a specific enemy wave to spawn, get a random one else if (enemyWaveSO == null) { // select a random enemyWaveSO if (enemyType == "Basic" && WorldManager.Instance.playerColumnPosition <= 5) { if (viableBasicEnemyActOneHalfOneWaves.Count == 0) { PopulateWaveList(viableBasicEnemyActOneHalfOneWaves, basicEnemyWavesActOneHalfOne); } enemyWaveSO = GetRandomWaveSO(viableBasicEnemyActOneHalfOneWaves, true); } else if (enemyType == "Basic" && WorldManager.Instance.playerColumnPosition > 5) { if (viableBasicEnemyActOneHalfTwoWaves.Count == 0) { PopulateWaveList(viableBasicEnemyActOneHalfTwoWaves, basicEnemyWavesActOneHalfTwo); } enemyWaveSO = GetRandomWaveSO(viableBasicEnemyActOneHalfTwoWaves, true); } else if (enemyType == "Elite") { if (viableEliteEnemyWaves.Count == 0) { PopulateWaveList(viableEliteEnemyWaves, eliteEnemyWaves); } enemyWaveSO = GetRandomWaveSO(viableEliteEnemyWaves, true); } else if (enemyType == "Boss") { enemyWaveSO = GetRandomWaveSO(bossEnemyWaves); } } foreach (EnemyGroup enemyGroup in enemyWaveSO.enemyGroups) { int randomIndex = Random.Range(0, enemyGroup.enemyList.Count); GameObject newEnemyGO = Instantiate(enemyGroup.enemyList[randomIndex]); Enemy newEnemy = newEnemyGO.GetComponent <Enemy>(); // Choose a random tile from the list of spawnable locations Tile spawnLocation = LevelManager.Instance.GetRandomValidMoveableTile(spawnLocations); // Run the enemy's constructor newEnemy.InitializeSetup(spawnLocation.GridPosition, spawnLocation); } }