Пример #1
0
    public void ProcessEventOutcome(string effect, string stringData, int intData)
    {
        switch (effect)
        {
        case EventType.CHANGE_VALUE:
            HandleChangeValue(stringData, intData);
            break;

        case EventType.OFFER_CARD:
            HandleOfferCard(stringData, intData);
            break;

        case EventType.TRIGGER_SCENARIO:
            HandleTriggerScenario(stringData, intData);
            break;

        case EventType.APPLY_MODIFIER:
            HandleApplyModifier(stringData, intData);
            break;

        case EventType.OFFER_UPGRADE:
            HandleOfferUpgrade();
            break;

        default:
            Debug.LogError("No handler found for effect: " + effect);
            break;
        }

        GameStateDelegates.OnCampaignStateUpdated(CurrentCampaign);
    }
Пример #2
0
    public void OnBuyItem()
    {
        CardData item = availableItems[selectedItemIndex];

        availableItems[selectedItemIndex] = null;
        DrawItems();
        ResetInfoPane();

        // TODO: Bake this into extension method or something.
        GameStateManager.CurrentCampaign.inventory.gold -= item.baseGoldCost;

        if (item.ID == HealthItemID)
        {
            GameStateManager.CurrentCampaign.player.ChangeHealthValue_Campaign(1);
        }
        else if (item.ID == UpgradeItemID)
        {
            slotPicker.DisplaySlotPickerForUpgrade();
        }
        else
        {
            slotPicker.OfferCard(item, true);
        }
        GameStateDelegates.OnCampaignStateUpdated(GameStateManager.CurrentCampaign);
    }
Пример #3
0
    void UpdateScenarioState(ScenarioState newScenarioState)
    {
        CurrentScenarioState = newScenarioState;
        GameStateManager.CurrentCampaign.player    = newScenarioState.player;
        GameStateManager.CurrentCampaign.inventory = newScenarioState.inventory;

        GameStateDelegates.OnCampaignStateUpdated(GameStateManager.CurrentCampaign);
    }
Пример #4
0
 public void StopMovementPathing()
 {
     if (!isDraggingMove)
     {
         return;
     }
     isDraggingMove = false;
     equippedCardsManager.ClearSelectedCard();
     GameStateDelegates.OnCurrentScenarioStateChange(CurrentScenarioState, upcomingScenarioStates);
 }
Пример #5
0
    public void GenerateAndDrawBossScenario(EnemySpawnGroupData bossSpawnGroup)
    {
        gameObject.SetActive(true);
        GameBoard board = boardController.GenerateBoard(true);

        CurrentScenarioState = ScenarioStateGenerator.GenerateNewScenarioState(board, bossSpawnGroup, true);
        GenerateNextTurnStack(CurrentScenarioState);

        GameStateDelegates.OnNewScenario?.Invoke(CurrentScenarioState);
        GameStateDelegates.OnCurrentScenarioStateChange(CurrentScenarioState, upcomingScenarioStates);
    }
Пример #6
0
    public void BeginCampaign()
    {
        mainMenuController.gameObject.SetActive(false);
        mapController.gameObject.SetActive(true);
        EntityData player = ScriptableObject.Instantiate(playerData);

        CurrentCampaign = new CampaignState(new Inventory(), new Map(1), player);
        DataRetriever.UpdateDepthData(CurrentCampaign.depth);
        GameStateDelegates.OnCampaignStateUpdated(CurrentCampaign);

        InitializeFirstMap();
    }
Пример #7
0
    void GenerateNewMap()
    {
        CurrentCampaign.depth++;
        Map newMap = new Map(CurrentCampaign.depth);

        CurrentCampaign.UpdateMap(newMap);
        mapController.DrawMap(newMap);
        mapController.UpdateMapState(CurrentCampaign);

        DataRetriever.UpdateDepthData(CurrentCampaign.depth);
        GameStateDelegates.OnCampaignStateUpdated(CurrentCampaign);
    }
Пример #8
0
    IEnumerator ProcessCurrentRoundActions()
    {
        isResolvingTurn = true;
        DeselectEverything();

        Queue <ProjectedGameState> upcomingStateQueue = new Queue <ProjectedGameState>(upcomingScenarioStates);

        while (upcomingStateQueue.Count > 0)
        {
            ProjectedGameState dequeuedProjectedState = upcomingStateQueue.Dequeue();
            GameStateDelegates.OnResolvingState?.Invoke(dequeuedProjectedState);
            ScenarioState nextScenarioState = dequeuedProjectedState.scenarioState;

            if (dequeuedProjectedState.bumps.Count > 0)
            {
                dequeuedProjectedState.bumps.ForEach(b => Debug.Log(b.bumpingEntity + " bumping " + b.bumpedEntity));
            }

            UpdateScenarioState(nextScenarioState);

            upcomingScenarioStates = new List <ProjectedGameState>(upcomingStateQueue);

            GameStateDelegates.OnCurrentScenarioStateChange(CurrentScenarioState, upcomingScenarioStates);
            dequeuedProjectedState.attackedPositions.ForEach(pos => GameStateDelegates.OnPositionAttacked(pos));

            yield return(new WaitForSeconds(0.5f));
        }

        if (CurrentScenarioState.isBossScenario && CurrentScenarioState.enemies.Count == 0)
        {
            winScreen.SetActive(true);
            yield break;
        }
        CurrentScenarioState.items = UpdateItemDurations(CurrentScenarioState);
        UpdateExitArrowVisibility();

        GameStateDelegates.OnRoundEnded?.Invoke(CurrentScenarioState);

        isResolvingTurn = false;
        upcomingScenarioStates.Clear();

        if (Player.CurrentHealth == 0)
        {
            lostScreen.SetActive(true);
            yield break;
        }

        GameStateDelegates.OnCurrentScenarioStateChange?.Invoke(CurrentScenarioState, upcomingScenarioStates);

        GenerateNextTurnStack(CurrentScenarioState);
    }
Пример #9
0
 public void OnEquippedCardClick(int cardSlot)
 {
     if (selectedCardSlot == cardSlot)
     {
         GameStateDelegates.OnCardDeselected();
         ClearSelectedCard();
     }
     else
     {
         selectedCardSlot = cardSlot;
         GameStateDelegates.OnCardSelected(equippedCards[cardSlot]);
         ShowAvailableCardPlays(cardSlot);
     }
 }
Пример #10
0
    public void GenerateAndDrawScenario(EnemySpawnGroupData enemySpawnGroup)
    {
        exitArrow.SetActive(false);
        gameObject.SetActive(true);
        GameBoard board = boardController.GenerateBoard();

        CurrentScenarioState = ScenarioStateGenerator.GenerateNewScenarioState(board, enemySpawnGroup);
        GenerateNextTurnStack(CurrentScenarioState);
        if (board.Exit != null)
        {
            PlaceExitArrow(exitArrow, boardController.currentBoard.Exit.Position, boardController.currentBoard.Width);
        }

        GameStateDelegates.OnNewScenario?.Invoke(CurrentScenarioState);
        GameStateDelegates.OnCurrentScenarioStateChange(CurrentScenarioState, upcomingScenarioStates);
    }
Пример #11
0
    // TODO: This whole functionality probably needs a once-over for legibility/efficiency.
    // Either extends move to tile, or shortens move to tile if tile already present in move.
    public void AddTileToMove(Tile newTile)
    {
        if (!isDraggingMove)
        {
            return;
        }

        Tile originTile       = boardController.currentBoard.GetTileAtPosition(Player.Position);
        Tile lastMovementTile = movementTiles.Count > 0 ? movementTiles.Last() : originTile;

        bool isValidMove = lastMovementTile.Neighbors.Contains(newTile);

        if (newTile.Position == Player.Position || !isValidMove)
        {
            StopMovementPathing();
            return;
        }
        else if (movementTiles.Contains(newTile))
        {
            int originalMoveLength = movementTiles.Count;
            int index = movementTiles.IndexOf(newTile);

            movementTiles = movementTiles.GetRange(0, index + 1).ToList();
            int newMoveLength = movementTiles.Count;
            int lostMoves     = originalMoveLength - newMoveLength;
            movementRange += lostMoves;
        }
        else if (movementRange > 0)
        {
            movementRange--;
            movementTiles.Add(newTile);
        }
        turnStackController.AddToPlayerTurn(movementCard, Player, originTile, movementTiles);
        GameStateDelegates.OnCurrentScenarioStateChange(CurrentScenarioState, upcomingScenarioStates);

        if (movementRange > 0)
        {
            newTile
            .Neighbors
            .Where(n => n.Position != Player.Position)
            .ToList()
            .ForEach(t => boardController.HighlightSelectedCell(t.Position));
        }
    }
Пример #12
0
    public void RegisterPointerDown(Vector2Int tileClickedPosition)
    {
        if (isResolvingTurn)
        {
            return;
        }
        if (potentialCardTargets.Contains(tileClickedPosition))
        {
            CardData selectedCard = equippedCardsManager.GetSelectedCard();
            bool     isMovement   = selectedCard.category == CardCategory.Movement;

            Vector2Int playerOrigin = isMovement ? Player.Position : ProjectedPlayerPosition;
            if (isMovement)
            {
                movementCard   = selectedCard;
                movementRange  = selectedCard.range;
                movementTiles  = new List <Tile>();
                isDraggingMove = true;
                AddTileToMove(boardController.currentBoard.GetTileAtPosition(tileClickedPosition));
            }
            else
            {
                turnStackController.AddToPlayerTurn(selectedCard, Player, playerOrigin, tileClickedPosition);
                equippedCardsManager.ClearSelectedCard();
                GameStateDelegates.OnCurrentScenarioStateChange(CurrentScenarioState, upcomingScenarioStates);
            }
        }
        else if (selectedEntity != null || selectedItem != null)
        {
            DeselectEverything();
        }
        else if (CurrentScenarioState.IsTileOccupied(tileClickedPosition))
        {
            EntityData tileOccupant = CurrentScenarioState.GetTileOccupant(tileClickedPosition);
            SelectEntity(tileOccupant);
        }
        else if (CurrentScenarioState.DoesPositionContainItem(tileClickedPosition))
        {
            ItemData tileItem = CurrentScenarioState.GetItemInPosition(tileClickedPosition);
            SelectItem(tileItem);
        }
    }
Пример #13
0
    public void SwitchToCampaign(ScenarioState lastScenarioState)
    {
        scenarioManager.gameObject.SetActive(false);
        mapController.gameObject.SetActive(true);

        CurrentCampaign.player = lastScenarioState.player;
        CurrentCampaign.player.activeModifiers.Clear();
        CurrentCampaign.inventory = lastScenarioState.inventory;

        if (lastScenarioState.enemies.Count == 0)
        {
            CardData scenarioReward = lastScenarioState.scenarioReward;
            if (scenarioReward == null)
            {
                scenarioReward = GenerateRandomScenarioReward();
            }

            if (scenarioReward == upgradeCard)
            {
                simpleTextDisplay.ShowTextDisplay(ScenarioRewardText.UPGRADE_TITLE, ScenarioRewardText.UPGRADE_BODY);
                itemSlotPicker.DisplaySlotPickerForUpgrade();
            }
            else if (scenarioReward == healthCard)
            {
                simpleTextDisplay.ShowTextDisplay(ScenarioRewardText.HEALTH_TITLE, ScenarioRewardText.HEALTH_BODY);
                CurrentCampaign.player.ChangeHealthValue_Campaign(1);
            }
            else if (scenarioReward == goldRewardCard)
            {
                simpleTextDisplay.ShowTextDisplay(ScenarioRewardText.GOLD_TITLE, ScenarioRewardText.GOLD_BODY);
                CurrentCampaign.inventory.gold += (5 * DataRetriever.GetDepthGoldMultiplier());
            }
            else
            {
                simpleTextDisplay.ShowTextDisplay(ScenarioRewardText.NEW_CARD_TITLE, ScenarioRewardText.NEW_CARD_BODY);
                itemSlotPicker.OfferCard(scenarioReward);
            }
        }
        GameStateDelegates.OnCampaignStateUpdated(CurrentCampaign);
    }
Пример #14
0
 void DeselectEverything()
 {
     selectedEntity = null;
     selectedItem   = null;
     GameStateDelegates.ReturnToDefaultBoard(CurrentScenarioState, upcomingScenarioStates);
 }
Пример #15
0
 public void ClearSelectedCard()
 {
     selectedCardSlot = -1;
     GameStateDelegates.OnCardDeselected();
     scenarioStateManager.ResetBoard();
 }
Пример #16
0
 void SelectItem(ItemData item)
 {
     selectedItem = item;
     GameStateDelegates.OnItemSelected(selectedItem);
 }
Пример #17
0
 void SelectEntity(EntityData entity)
 {
     selectedEntity = entity;
     GameStateDelegates.OnEntitySelected(entity, CurrentScenarioState, upcomingScenarioStates);
 }