Esempio n. 1
0
    // Start New Combat Encounter Events
    #region
    public Action StartNewBasicEncounterEvent(EnemyWaveSO enemyWave = null)
    {
        Action action = new Action();

        StartCoroutine(StartNewBasicEncounterEventCoroutine(action, enemyWave));
        return(action);
    }
Esempio n. 2
0
    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;
    }
Esempio n. 3
0
    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;
    }
Esempio n. 4
0
    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);
    }
Esempio n. 5
0
    // 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;
    }
Esempio n. 6
0
    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;
    }
Esempio n. 7
0
    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);
    }
Esempio n. 8
0
    // 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));
        }
    }
Esempio n. 9
0
    // 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);
        }
    }