Exemple #1
0
    // Update is called once per frame
    void Update()
    {
        switch (stateStack.Peek())
        {
        case GameState.PlayerIdle:
        {
            endTurnButton.interactable = true;
        }
            ; break;

        case GameState.PlayerCardPending:
        {
            endTurnButton.interactable = false;
            if (currentCardAction.IsReadyOrCancelled())
            {
                if (currentCardAction.WasCancelled())
                {
                    //card was cancelled, return it to the hand
                    DeselectActiveCard();
                }
                else
                {
                    //card was played, put it in the discard pile
                    DiscardCard(activeCard);
                    interfaceManager.HideCancelButton();
                    energy -= GameplayContext.ActiveCard.cardData.energyCost;
                    UpdatePlayerStatusEffectPanel();
                }

                CleanDeadEnemies();

                stateStack.Pop();
                currentCardAction          = null;
                GameplayContext.ActiveCard = null;
            }
        };
            break;

        case GameState.EnemyTurn:
        {
            endTurnButton.interactable = false;
            if (turnTimer > 0)
            {
                turnTimer -= Time.deltaTime;
            }
            else
            {
                if (enemyTakingTurn is null)
                {
                    StartNextEnemyTurn();
                }
                else if (enemyTurnFinished)
                {
                    turnTimer = timeBetweenTurns;
                }
            }
        }; break;

        case GameState.DrawingCards:
        {
            endTurnButton.interactable = false;
            if (cardDrawTimer <= 0)
            {
                DrawCard();
                cardsLeftToDraw--;
                cardDrawTimer = cardDrawPause;
                //Debug.Log("Drew 1, " + cardsLeftToDraw + "cards remain");
            }
            else
            {
                cardDrawTimer -= Time.deltaTime;
            }

            //stop drawing cards if empty or finished
            if ((drawPile.Count == 0 && discardPile.Count == 0) || cardsLeftToDraw == 0)
            {
                cardDrawTimer = 0;
                stateStack.Pop();
            }
        }; break;
        }

        playerHealthBar.Value = player.Health.Current;


        drawPileNumber.text    = drawPile.Count.ToString();
        discardPileNumber.text = discardPile.Count.ToString();
        energyNumber.text      = energy.ToString();

        if (worldGrid.GetHexUnderMouse() is Hex mousehex &&
            worldGrid.GetEntityAtHex(mousehex) is Entity entUnderMouse &&
            entUnderMouse != player)
        {
            enemyText.enabled = true;
            enemyText.text    = entUnderMouse.entityName;
            enemyHealthBar.gameObject.SetActive(true);
            enemyHealthBar.MaxValue = entUnderMouse.Health.MaxHealth;
            enemyHealthBar.Value    = entUnderMouse.Health.Current;
            enemyStatusEffectPanel.gameObject.SetActive(true);
            UpdateEnemyStatusEffectPanel(entUnderMouse);
            GameplayContext.EntityUnderMouse = entUnderMouse;
        }