예제 #1
0
    void EnemyTurn(List <CardInfoScr> cards)
    {
        int count = cards.Count == 1 ? 1 :
                    Random.Range(0, cards.Count);

        for (int i = 0; i < count; i++)
        {
            if (EnemyFieldCards.Count > 5)
            {
                return;
            }

            cards[0].ShowCardInfo(cards[0].SelfCard, false);
            cards[0].transform.SetParent(EnemyField);

            EnemyFieldCards.Add(cards[0]);
            EnemyHandCards.Remove(cards[0]);
        }

        foreach (var activeCard in EnemyFieldCards.FindAll(x => x.SelfCard.CanAttack))
        {
            if (PlayerFieldCards.Count == 0)
            {
                return;
            }

            var enemy = PlayerFieldCards[Random.Range(0, PlayerFieldCards.Count)];

            Debug.Log(activeCard.SelfCard.Name + " (" + activeCard.SelfCard.Attack + ";" + activeCard.SelfCard.Defense + ") " + "---> " +
                      enemy.SelfCard.Name + " (" + enemy.SelfCard.Attack + ";" + enemy.SelfCard.Defense + ")");

            activeCard.SelfCard.ChangeAttackState(false);
            CardsFight(enemy, activeCard);
        }
    }
    public void RestartGame()
    {
        StopAllCoroutines();

        foreach (var card in PlayerHandCards)
        {
            Destroy(card.gameObject);
        }
        foreach (var card in PlayerFieldCards)
        {
            Destroy(card.gameObject);
        }
        foreach (var card in EnemyHandCards)
        {
            Destroy(card.gameObject);
        }
        foreach (var card in EnemyFieldCards)
        {
            Destroy(card.gameObject);
        }

        PlayerHandCards.Clear();
        PlayerFieldCards.Clear();
        EnemyHandCards.Clear();
        EnemyFieldCards.Clear();

        StartGame();
    }
예제 #3
0
    public void HighlightTargets(bool highlight, Card activeCard)
    {
        List <CardController> targets = new List <CardController>();

        if (activeCard.IsSpell)
        {
            var spellCard = (SpellCard)activeCard;

            if (spellCard.SpellTarget == SpellCard.TargetType.NO_TARGET)
            {
                targets = new List <CardController>();
            }

            if (spellCard.SpellTarget == SpellCard.TargetType.ALLY_CARD_TARGET)
            {
                targets = PlayerFieldCards;
            }

            if (spellCard.SpellTarget == SpellCard.TargetType.ENEMY_CARD_TARGET)
            {
                targets = EnemyFieldCards;
            }
        }

        else
        {
            if (EnemyFieldCards.Exists(x => x.Card.IsProvocation))
            {
                targets = EnemyFieldCards.FindAll(x => x.Card.IsProvocation);
            }
            else
            {
                targets = EnemyFieldCards;
            }
        }



        foreach (var card in targets)
        {
            if (activeCard.IsSpell)
            {
                card.Info.HighlightAsSpellTarget(highlight);
            }
            else
            {
                card.Info.HighlightAsTarget(highlight);
            }
        }

        if ((EnemyFieldCards.Count == 0 || activeCard.Ranged) && !activeCard.IsSpell)
        {
            EnemyHero.HighlightAsTarget(highlight);
        }
    }
예제 #4
0
 public void DestroyCard(CardInfoScr card)
 {
     card.GetComponent <CardMovementScr>().OnEndDrag(null);
     if (EnemyFieldCards.Exists(x => x == card))
     {
         EnemyFieldCards.Remove(card);
     }
     if (PlayerFieldCards.Exists(x => x == card))
     {
         PlayerFieldCards.Remove(card);
     }
     Destroy(card.gameObject);
 }
    public void HighlightTargets(CardController attacker, bool highlight)
    {
        List <CardController> targets = new List <CardController>();

        if (attacker.Card.IsSpell)
        {
            var spellCard = (SpellCard)attacker.Card;

            if (spellCard.SpellTarget == SpellCard.TargetType.NO_TARGET)
            {
                targets = new List <CardController>();
            }
            else if (spellCard.SpellTarget == SpellCard.TargetType.ALLY_CARD_TARGET)
            {
                targets = PlayerFieldCards;
            }
            else
            {
                targets = EnemyFieldCards;
            }
        }
        else
        {
            if (EnemyFieldCards.Exists(x => x.Card.IsProvocation))
            {
                targets = EnemyFieldCards.FindAll(x => x.Card.IsProvocation);
            }
            else
            {
                targets = EnemyFieldCards;

                if (!attacker.Card.IsSpell)
                {
                    EnemyHero.HighlightAsTarget(highlight);
                }
            }
        }

        foreach (var card in targets)
        {
            if (attacker.Card.IsSpell)
            {
                card.Info.HighlightAsSpellTarget(highlight);
            }
            else
            {
                card.Info.HighlightAsTarget(highlight);
            }
        }
    }
    void DestroyCard(CardInfoScript card)
    {
        card.GetComponent <CardMovementScript>().OnEndDrag(null); // для снятия прототипа карты с поля

        if (PlayerFieldCards.Exists(x => x == card))              //карта на поле игрока
        {
            PlayerFieldCards.Remove(card);
        }
        else /*if (EnemyFieldCards.Exists(x => x == card))*/ // поле соперника
        {
            EnemyFieldCards.Remove(card);
        }

        Destroy(card.gameObject);
    }
예제 #7
0
    void EnemyTurn(List <CardInfoScr> cards)
    {
        int count = cards.Count == 1 ? 1 :
                    Random.Range(0, cards.Count);

        for (int i = 0; i < count; i++)
        {
            if (EnemyFieldCards.Count > 5 || EnemyMana == 0)
            {
                break;
            }

            List <CardInfoScr> cardList = cards.FindAll(x => EnemyMana >= x.SelfCard.Manacost);

            if (cardList.Count == 0)
            {
                break;
            }

            ReduceMana(false, cardList[0].SelfCard.Manacost);

            cardList[0].ShowCardInfo(cardList[0].SelfCard, false);
            cardList[0].transform.SetParent(EnemyField);

            EnemyFieldCards.Add(cardList[0]);
            EnemyFieldCards.Remove(cardList[0]);
        }

        foreach (var activeCard in EnemyFieldCards.FindAll(x => x.SelfCard.CanAttack))
        {
            if (Random.Range(0, 2) == 0 && PlayerFieldCards.Count > 0)
            {
                var enemy = PlayerFieldCards[Random.Range(0, PlayerFieldCards.Count)];

                Debug.Log(activeCard.SelfCard.Name + " (" + activeCard.SelfCard.Attack + ";" + activeCard.SelfCard.Defense + ") " +
                          "---->" + enemy.SelfCard.Name + " (" + enemy.SelfCard.Attack + ";" + enemy.SelfCard.Defense + ")");

                activeCard.SelfCard.ChangeAttackState(false);
                CardsFight(enemy, activeCard);
            }
            else
            {
                Debug.Log(activeCard.SelfCard.Name + " (" + activeCard.SelfCard.Attack + ") Attacked Hero");
                activeCard.SelfCard.ChangeAttackState(false);
                DamageHero(activeCard, false);
            }
        }
    }
    void EnemyTurn(List <CardInfoScript> cards)
    {
        int count = Random.Range(0, cards.Count + 1);

        for (int i = 0; i < count; i++) //выставление карт соперником для проверки
        {
            if (EnemyFieldCards.Count > 5 /*баг с выкладыванием бльшего кол-ва карт*/ || EnemyEnergy == 0)
            {
                break;
            }

            List <CardInfoScript> cardsList = cards.FindAll(x => EnemyEnergy >= x.SelfCard.Cost); //карты с подходящей ценой в руке

            if (cardsList.Count == 0)
            {
                break;
            }

            ReduceEnergy(false, cardsList[0].SelfCard.Cost);

            cardsList[0].ShowCardInfo(cardsList[0].SelfCard, false);
            cardsList[0].transform.SetParent(EnemyField);

            EnemyFieldCards.Add(cardsList[0]);
            EnemyHandCards.Remove(cardsList[0]);
        }

        foreach (var activeCard in EnemyFieldCards.FindAll(x => x.SelfCard.CanAttack)) // атака соперником для проверки
        {
            if (Random.Range(0, 2) == 0 && PlayerFieldCards.Count > 0)
            {
                var enemy = PlayerFieldCards[Random.Range(0, PlayerFieldCards.Count)];

                Debug.Log(activeCard.SelfCard.Name);

                activeCard.SelfCard.ChangeAttackState(false);
                CardsFight(enemy, activeCard);
            }
            else
            {
                activeCard.SelfCard.ChangeAttackState(false);
                DamageHero(activeCard, false);
            }
        }
    }
예제 #9
0
    private void EnemyTurn(List <CardInfoScr> cards)
    {
        int count = Random.Range(0, cards.Count - 1);

        for (int i = 0; i < count; i++)
        {
            if (EnemyFieldCards.Count > 5)
            {
                return;
            }
            else
            {
                CardInfoScr currentCard = cards[0];
                currentCard.ShowCardInfo(cards[0].SelfCard, false);
                currentCard.transform.SetParent(enemyField);
                EnemyHandCards.Remove(currentCard);
                EnemyFieldCards.Add(currentCard);
            }
        }
    }
    IEnumerator EnemyTurn(List <CardInfoScr> cards)
    {
        yield return(new WaitForSeconds(1));

        int count = cards.Count == 1 ? 1 :
                    Random.Range(0, cards.Count);

        for (int i = 0; i < count; i++)
        {
            if (EnemyFieldCards.Count > 3 || EnemyHandCards.Count == 0)
            {
                break; //Огранчение до 4 карт на поле
            }
            cards[0].GetComponent <CardMovementScr>().MoveToField(EnemyField);

            yield return(new WaitForSeconds(.31f));

            cards[0].ShowCardInfo(cards[0].SelfCard, false);
            cards[0].transform.SetParent(EnemyField);

            EnemyFieldCards.Add(cards[0]);
            EnemyHandCards.Remove(cards[0]);
        }

        yield return(new WaitForSeconds(1));

        foreach (var activeCard in EnemyFieldCards.FindAll(x => x.SelfCard.CanAttack))
        {
            if (Random.Range(0, 2) == 0 && PlayerFieldCards.Count > 0)
            {
                if (PlayerFieldCards.Count == 0)
                {
                    break;
                }

                var enemy = PlayerFieldCards[Random.Range(0, PlayerFieldCards.Count)];

                activeCard.SelfCard.ChangeAttackState(false);

                activeCard.GetComponent <CardMovementScr>().MoveToTarget(enemy.transform);
                yield return(new WaitForSeconds(.5f));

                CardsFight(enemy, activeCard);
            }
            else
            {
                activeCard.SelfCard.ChangeAttackState(false);

                activeCard.GetComponent <CardMovementScr>().MoveToTarget(PlayerHero.transform);
                yield return(new WaitForSeconds(.5f));

                DamageHero(activeCard, false);
            }

            yield return(new WaitForSeconds(.2f)); // 0.2 секунды перед новой анимацией
        }

        yield return(new WaitForSeconds(1));

        ChangeTurn();
    }
예제 #11
0
    IEnumerator EnemyTurn(List <CardController> cards)
    {
        yield return(new WaitForSeconds(1));

        int count = cards.Count == 1 ? 1 :
                    Random.Range(0, cards.Count);

        for (int i = 0; i < count; i++)
        {
            if (EnemyFieldCards.Count > 5 ||
                EnemyMana == 0 ||
                EnemyHandCards.Count == 0)
            {
                break;
            }

            List <CardController> cardsList = cards.FindAll(x => EnemyMana >= x.Card.Manacost && !x.Card.IsSpell);

            if (cardsList.Count == 0)
            {
                break;
            }

            cardsList[0].GetComponent <CardMovementScr>().MoveToField(EnemyField);

            yield return(new WaitForSeconds(.51f));

            cardsList[0].transform.SetParent(EnemyField);

            cardsList[0].OnCast();
        }

        yield return(new WaitForSeconds(1));

        while (EnemyFieldCards.Exists(x => x.Card.CanAttack))
        {
            var  activeCard     = EnemyFieldCards.FindAll(x => x.Card.CanAttack)[0];
            bool hasProvocation = PlayerFieldCards.Exists(x => x.Card.IsProvocation);

            if (hasProvocation ||
                Random.Range(0, 2) == 0 &&
                PlayerFieldCards.Count > 0)
            {
                CardController enemy;

                if (hasProvocation)
                {
                    enemy = PlayerFieldCards.Find(x => x.Card.IsProvocation);
                }
                else
                {
                    enemy = PlayerFieldCards[Random.Range(0, PlayerFieldCards.Count)];
                }

                Debug.Log(activeCard.Card.Name + " (" + activeCard.Card.Attack + ";" + activeCard.Card.Defense + ") " + "---> " +
                          enemy.Card.Name + " (" + enemy.Card.Attack + ";" + enemy.Card.Defense + ")");

                activeCard.Movement.MoveToTarget(enemy.transform);
                yield return(new WaitForSeconds(.75f));

                CardsFight(activeCard, enemy);
            }
            else
            {
                Debug.Log(activeCard.Card.Name + " (" + activeCard.Card.Attack + ") Attacked hero");

                activeCard.GetComponent <CardMovementScr>().MoveToTarget(PlayerHero.transform);
                yield return(new WaitForSeconds(.75f));

                DamageHero(activeCard, false);
            }

            yield return(new WaitForSeconds(.2f));
        }

        yield return(new WaitForSeconds(1));

        ChangeTurn();
    }
예제 #12
0
    IEnumerator EnemyTurn(List <CardInfoScr> cards)
    {
        yield return(new WaitForSeconds(1));


        int count = cards.Count == 1 ? 1 :
                    Random.Range(0, cards.Count);

        for (int i = 0; i < count; i++)
        {
            if (EnemyFieldCards.Count > 5 ||
                EnemyMana == 0 || EnemyHandCards.Count == 0)
            {
                break;
            }

            List <CardInfoScr> cardsList = cards.FindAll(x => EnemyMana >= x.SelfCard.Manacost);

            if (cardsList.Count == 0)
            {
                break;
            }


            cardsList[0].GetComponent <CardMovementScr>().MoveToField(EnemyField);

            ReduceMana(false, cardsList[0].SelfCard.Manacost);

            yield return(new WaitForSeconds(.51f));


            cardsList[0].ShowCardInfo(cardsList[0].SelfCard, false);
            cardsList[0].transform.SetParent(EnemyField);

            EnemyFieldCards.Add(cardsList[0]);
            EnemyHandCards.Remove(cardsList[0]);
        }

        yield return(new WaitForSeconds(1));

        // enemy's possibility attack hero card's
        foreach (var activeCard in EnemyFieldCards.FindAll(x => x.SelfCard.CanAttack))
        {
            if (Random.Range(0, 2) == 0 &&
                PlayerFieldCards.Count > 0)
            {
                var enemy = PlayerFieldCards[Random.Range(0, PlayerFieldCards.Count)];

                Debug.Log(activeCard.SelfCard.Name + " (" + activeCard.SelfCard.Attack + ";" + activeCard.SelfCard.Defense + " )" + "--->" +
                          enemy.SelfCard.Name + " (" + enemy.SelfCard.Attack + ";" + enemy.SelfCard.Defense + " )");

                activeCard.SelfCard.ChageAttackState(false);

                activeCard.GetComponent <CardMovementScr>().MoveToTarget(enemy.transform);
                yield return(new WaitForSeconds(.75f));

                CardsFight(enemy, activeCard);
            }
            else
            {
                Debug.Log(activeCard.SelfCard.Name + " (" + activeCard.SelfCard.Attack + ") Attacked hero");

                activeCard.SelfCard.ChageAttackState(false);


                activeCard.GetComponent <CardMovementScr>().MoveToTarget(PlayerHero.transform);
                yield return(new WaitForSeconds(.75f));

                DamageHero(activeCard, false);
            }

            yield return(new WaitForSeconds(.2f));
        }

        yield return(new WaitForSeconds(1));

        ChangeTurn();
    }
예제 #13
0
    void DestroyCard(CardInfoScr card, int e)
    {
        if (IsPlayerTurn)
        {
            if (e == 1)
            {
                EnemyFieldCard1.Remove(card);
            }
            if (e == 2)
            {
                EnemyFieldCard2.Remove(card);
            }
            if (e == 3)
            {
                EnemyFieldCard3.Remove(card);
            }
            if (e == 4)
            {
                EnemyFieldCard4.Remove(card);
            }
            if (e == 5)
            {
                EnemyFieldCard5.Remove(card);
            }
            if (e == 6)
            {
                EnemyFieldCard6.Remove(card);
            }
            if (e == 7)
            {
                EnemyFieldCard7.Remove(card);
            }
            if (e == 8)
            {
                EnemyFieldCard8.Remove(card);
            }

            EnemyFieldCards.Remove(card);
        }
        else
        {
            if (e == 1)
            {
                PlayerFieldCard1.Remove(card);
            }
            if (e == 2)
            {
                PlayerFieldCard2.Remove(card);
            }
            if (e == 3)
            {
                PlayerFieldCard3.Remove(card);
            }
            if (e == 4)
            {
                PlayerFieldCard4.Remove(card);
            }
            if (e == 5)
            {
                PlayerFieldCard5.Remove(card);
            }
            if (e == 6)
            {
                PlayerFieldCard6.Remove(card);
            }
            if (e == 7)
            {
                PlayerFieldCard7.Remove(card);
            }
            if (e == 8)
            {
                PlayerFieldCard8.Remove(card);
            }

            PlayerFieldCards.Remove(card);
        }
        Destroy(card.gameObject);
    }
예제 #14
0
    void EnemyTurn(List <CardInfoScr> cards)
    {
        List <CardInfoScr> cardlist = cards.FindAll(x => x.SelfCard.Preparation == 0);
        //Debug.Log("count=" + cardlist.Count);



        int n = 1;

        for (int i = 0; i < cardlist.Count; i++)
        {
            if (EnemyFieldCards.Count > 7)
            {
                return;
            }
            n = 1;
            while (n == 1)
            {
                int j = Random.Range(1, 9);
                if (j == 1 && EnemyFieldCard1.Count == 0)
                {
                    cardlist[i].ShowCardInfo(cardlist[i].SelfCard);
                    cardlist[i].transform.SetParent(EnemyField1);


                    EnemyFieldCard1.Add(cardlist[i]);
                    EnemyFieldCards.Add(cardlist[i]);
                    EnemyHandCards.Remove(cardlist[i]);


                    n = 0;
                }
                if (j == 2 && EnemyFieldCard2.Count == 0)
                {
                    cardlist[i].ShowCardInfo(cardlist[i].SelfCard);
                    cardlist[i].transform.SetParent(EnemyField2);

                    EnemyFieldCard2.Add(cardlist[i]);
                    EnemyFieldCards.Add(cardlist[i]);
                    EnemyHandCards.Remove(cardlist[i]);


                    n = 0;
                }
                if (j == 3 && EnemyFieldCard3.Count == 0)
                {
                    cardlist[i].ShowCardInfo(cardlist[i].SelfCard);
                    cardlist[i].transform.SetParent(EnemyField3);

                    EnemyFieldCard3.Add(cardlist[i]);
                    EnemyFieldCards.Add(cardlist[i]);
                    EnemyHandCards.Remove(cardlist[i]);


                    n = 0;
                }
                if (j == 4 && EnemyFieldCard4.Count == 0)
                {
                    cardlist[i].ShowCardInfo(cardlist[i].SelfCard);
                    cardlist[i].transform.SetParent(EnemyField4);

                    EnemyFieldCard4.Add(cardlist[i]);
                    EnemyFieldCards.Add(cardlist[i]);
                    EnemyHandCards.Remove(cardlist[i]);


                    n = 0;
                }
                if (j == 5 && EnemyFieldCard5.Count == 0)
                {
                    cardlist[i].ShowCardInfo(cardlist[i].SelfCard);
                    cardlist[i].transform.SetParent(EnemyField5);

                    EnemyFieldCard5.Add(cardlist[i]);
                    EnemyFieldCards.Add(cardlist[i]);
                    EnemyHandCards.Remove(cardlist[i]);


                    n = 0;
                }
                if (j == 6 && EnemyFieldCard6.Count == 0)
                {
                    cardlist[i].ShowCardInfo(cardlist[i].SelfCard);
                    cardlist[i].transform.SetParent(EnemyField6);

                    EnemyFieldCard6.Add(cardlist[i]);
                    EnemyFieldCards.Add(cardlist[i]);
                    EnemyHandCards.Remove(cardlist[i]);


                    n = 0;
                }
                if (j == 7 && EnemyFieldCard7.Count == 0)
                {
                    cardlist[i].ShowCardInfo(cardlist[i].SelfCard);
                    cardlist[i].transform.SetParent(EnemyField7);

                    EnemyFieldCard7.Add(cardlist[i]);
                    EnemyFieldCards.Add(cardlist[i]);
                    EnemyHandCards.Remove(cardlist[i]);


                    n = 0;
                }
                if (j == 8 && EnemyFieldCard8.Count == 0)
                {
                    cardlist[i].ShowCardInfo(cardlist[i].SelfCard);
                    cardlist[i].transform.SetParent(EnemyField8);

                    EnemyFieldCard8.Add(cardlist[i]);
                    EnemyFieldCards.Add(cardlist[i]);
                    EnemyHandCards.Remove(cardlist[i]);



                    n = 0;
                }
            }
        }
    }