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); }
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); }
void UpdateScenarioState(ScenarioState newScenarioState) { CurrentScenarioState = newScenarioState; GameStateManager.CurrentCampaign.player = newScenarioState.player; GameStateManager.CurrentCampaign.inventory = newScenarioState.inventory; GameStateDelegates.OnCampaignStateUpdated(GameStateManager.CurrentCampaign); }
public void StopMovementPathing() { if (!isDraggingMove) { return; } isDraggingMove = false; equippedCardsManager.ClearSelectedCard(); GameStateDelegates.OnCurrentScenarioStateChange(CurrentScenarioState, upcomingScenarioStates); }
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); }
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(); }
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); }
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); }
public void OnEquippedCardClick(int cardSlot) { if (selectedCardSlot == cardSlot) { GameStateDelegates.OnCardDeselected(); ClearSelectedCard(); } else { selectedCardSlot = cardSlot; GameStateDelegates.OnCardSelected(equippedCards[cardSlot]); ShowAvailableCardPlays(cardSlot); } }
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); }
// 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)); } }
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); } }
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); }
void DeselectEverything() { selectedEntity = null; selectedItem = null; GameStateDelegates.ReturnToDefaultBoard(CurrentScenarioState, upcomingScenarioStates); }
public void ClearSelectedCard() { selectedCardSlot = -1; GameStateDelegates.OnCardDeselected(); scenarioStateManager.ResetBoard(); }
void SelectItem(ItemData item) { selectedItem = item; GameStateDelegates.OnItemSelected(selectedItem); }
void SelectEntity(EntityData entity) { selectedEntity = entity; GameStateDelegates.OnEntitySelected(entity, CurrentScenarioState, upcomingScenarioStates); }