コード例 #1
0
    public void EndPlayerTurn()
    {
        isPlayerTurn = false;

        playerCharacterObject.ReduceBuffLifetime();

        if (OnTurnComplete != null)
        {
            OnTurnComplete.Invoke(playerCharacterObject);
        }

        if (OnEnemyTurn != null)
        {
            OnEnemyTurn.Invoke();
        }
    }
コード例 #2
0
    // Update is called once per frame
    void Update()
    {
        if (hasWon == false)
        {
            //if (Input.GetKeyDown(KeyCode.R))
            //{
            //    RemoveRandomCardFromHand();
            //}

            Vector3 mousePos = Input.mousePosition;
            if (selectedCard != null)
            {
                mousePos.z = cardSelectedMouseWorldZ;
            }
            else
            {
                mousePos.z = mouseWorldZ;
            }
            Vector3 worldMousePos = Camera.main.ScreenToWorldPoint(mousePos);

            if (mouseWorldObject != null)
            {
                mouseWorldObject.transform.position = worldMousePos;
            }


            if (isPlayerTurn)
            {
                if (handDealt == false)
                {
                    if (cardObject != null && playerHandObject != null)
                    {
                        DealPlayerHand(currentMaxCardsInHand);
                        handDealt = true;
                    }

                    //Debug.Log("start player turn");
                }

                if (playerCharacterObject.isExecutingTurn == false)
                {
                    Ray        mouseRay = Camera.main.ScreenPointToRay(mousePos);
                    RaycastHit mouseHit;

                    if (selectedCard == null)
                    {
                        if (Input.GetMouseButtonDown(0))
                        {
                            if (Physics.Raycast(mouseRay, out mouseHit, 100f, cardMask))
                            {
                                if (mouseHit.transform.TryGetComponent(out selectedCard))
                                {
                                    selectedCard.isSelected = true;
                                    hasCardBeenSelected     = true;
                                }
                            }
                        }
                    }

                    if (Input.GetMouseButtonUp(0))
                    {
                        hasCardBeenSelected = false;
                    }

                    if (hasCardBeenSelected)
                    {
                        if (selectedCardPositionObject != null)
                        {
                            splineStartPoint.transform.position = selectedCard.GetStartPosition() + splineStartPositionOffset;

                            bezierPath.MovePoint(0, mouseWorldObject.transform.position);
                            bezierPath.MovePoint(bezierPath.NumPoints - 1, splineStartPoint.transform.position);

                            pathCreator.TriggerPathUpdate();

                            lineRenderer.enabled = true;

                            //selectedCard.transform.position = selectedCardPositionObject.transform.position;
                        }
                        //selectedCard.transform.position = mouseWorldObject.transform.position;
                    }
                    else
                    {
                        if (selectedCard != null)
                        {
                            lineRenderer.enabled = false;

                            if (selectedCard.cardDefinition.cardType == CARDTYPE.ATTACK)
                            {
                                if (selectedCard.cardDefinition.useOnGroup)
                                {
                                    UseCardEnemyGroup();
                                }
                                else
                                {
                                    if (Physics.Raycast(mouseRay, out mouseHit, 100f, characterMask))
                                    {
                                        UseCardSingleEnemy(mouseHit);
                                    }
                                    else
                                    {
                                        ResetCardPosition(selectedCard);
                                    }
                                }
                            }
                            else if (selectedCard.cardDefinition.cardType == CARDTYPE.ABILITY)
                            {
                                UseCardAbility();
                            }

                            selectedCard = null;
                        }
                    }

                    if (CheckHasWon())
                    {
                        ClearPlayerHand();
                        ReturnDiscardedToDeck();

                        hasWon = true;
                        if (OnHasWon != null)
                        {
                            OnHasWon.Invoke();
                        }
                    }
                }
            }
            else
            {
                ClearPlayerHand();

                bool allEnemyTurnsExecuted = true;

                if (playerCharacterObject.isDead)
                {
                    if (hasDied == false)
                    {
                        if (CheckHasDied())
                        {
                            if (OnPlayerDestroyed != null)
                            {
                                OnPlayerDestroyed.Invoke();
                            }
                        }
                    }
                }
                else
                {
                    //enemy turn
                    foreach (CharacterObject enemy in enemyCharacters)
                    {
                        if (enemy.isExecutingTurn == false && enemy.turnComplete == false && playerCharacterObject.currentHealth > 0)
                        {
                            enemy.ExecuteTurn(playerCharacterObject.transform, null);
                            allEnemyTurnsExecuted = false;
                        }
                        if (enemy.turnComplete == false)
                        {
                            allEnemyTurnsExecuted = false;
                            break;
                        }
                    }

                    if (allEnemyTurnsExecuted)
                    {
                        //Debug.Log("all enemy turns complete");

                        foreach (CharacterObject enemy in enemyCharacters)
                        {
                            enemy.ResetTurn();

                            if (OnTurnComplete != null)
                            {
                                OnTurnComplete.Invoke(enemy);
                            }
                        }

                        //ReturnDiscardedToDeck();

                        isPlayerTurn = true;
                        handDealt    = false;
                        ResetCardPoints();

                        if (OnEnemyTurnComplete != null)
                        {
                            OnEnemyTurnComplete.Invoke();
                        }

                        if (OnTurnComplete != null)
                        {
                            OnTurnComplete.Invoke(playerCharacterObject);
                        }
                    }
                }
            }
        }

        //else
        //{
        //    if (hasDied == false)
        //    {
        //        if (CheckHasDied())
        //        {
        //            if (OnHasDied != null)
        //            {
        //                OnHasDied.Invoke();
        //            }
        //        }
        //    }

        //}
    }