Exemplo n.º 1
0
    protected virtual void DrawCardEffect(string cardName, bool byController, Action conpleteEffect)
    {
        Vector3    pos    = Vector3.zero;
        GameObject prefab = null;
        Card       info   = CardData.Instance.GetCard(cardName, false);

        Card.Type type = info.type;

        if (type == Card.Type.bonus)
        {
            pos    = bonusPilePos.position;
            prefab = bonusCardPrefab;
        }
        else if (type == Card.Type.mogi)
        {
            pos    = mogisPilePos.position;
            prefab = mogisCardPrefab;
        }

        GameObject cardObj = Instantiate(prefab, pos, Quaternion.identity);

        CardEntity entity = cardObj.GetComponent <CardEntity>();

        CardDisplay display = cardObj.GetComponent <CardDisplay>();

        display.Init(cardName);
        cardObj.name = cardName;
        CardMotion motion = cardObj.GetComponent <CardMotion>();

        motion.Init(entity);
        entity.Init(info, display, motion, byController);

        motion.PileToHand(conpleteEffect);
    }
Exemplo n.º 2
0
    public void MoveCard(GameObject card, string targetName, float motionSpeed, float stayTime)
    {
        CardMotion cardMotion = new CardMotion();

        card.SetActive(true);
        if (targetName.Equals("PlayerHand"))
        {
            cardMotion.targetParent = player.hand.transform;
        }
        else if (targetName.Equals("EnemyHand"))
        {
            cardMotion.targetParent = enemy.hand.transform;
        }
        else if (targetName.Equals("Graveyard"))
        {
            cardMotion.targetParent = board.graveYard.transform;
        }
        else
        {
            cardMotion.targetParent = board.background.transform;
        }
        card.transform.SetParent(board.background.transform);
        cardMotion.onMotion        = card.transform;
        cardMotion.initialPosition = card.transform.position;
        cardMotion.targetPosition  = cardMotion.targetParent.transform.position;
        cardMotion.t           = 0;
        cardMotion.motionSpeed = motionSpeed;
        cardMotion.stayTime    = stayTime;
        cardMotion.applyEffect = false;
        motionQueue.Enqueue(cardMotion);
    }
Exemplo n.º 3
0
 public override void Init(Card info, CardDisplay display, CardMotion motion, bool isController)
 {
     this.display      = display;
     this.motion       = motion;
     this.info         = info;
     this.isController = isController;
     base.Init(info, display, motion, isController);
 }
Exemplo n.º 4
0
    public override void Init(Card info, CardDisplay display, CardMotion motion, bool isController)
    {
        MogiCard cardInfo = (MogiCard)info;

        attackPoint       = cardInfo.attackPoint;
        HPRemain          = maxHP = cardInfo.hp;
        this.display      = display;
        this.motion       = motion;
        this.info         = info;
        this.isController = isController;
        base.Init(info, display, motion, isController);
        AddInitEvent();
    }
Exemplo n.º 5
0
    public void MoveCardCenter(GameObject card, float motionSpeed, float stayTime, bool applyEffect)
    {
        CardMotion cardMotion = new CardMotion();

        card.SetActive(true);
        card.GetComponent <Scalable>().isScalable = false;
        card.transform.SetParent(board.background.transform);
        cardMotion.onMotion        = card.transform;
        cardMotion.targetPosition  = board.background.transform.position;
        cardMotion.initialPosition = card.transform.position;
        cardMotion.targetParent    = null;
        cardMotion.t           = 0;
        cardMotion.motionSpeed = motionSpeed;
        cardMotion.stayTime    = stayTime;
        cardMotion.applyEffect = applyEffect;
        motionQueue.Enqueue(cardMotion);
    }
Exemplo n.º 6
0
 public virtual void Init(Card info, CardDisplay display, CardMotion motion, bool isController)
 {
     curStatus = status.none;
     CardBehaviour.Instance.AddNewCard(this);
 }
Exemplo n.º 7
0
    private async void UseCardInHand(Animator animator)
    {
        await new WaitForSeconds(1);

        //get useable card
        List <CardEntity> allCardInHand = HandUI.Instance.cardInOpponentHand;
        List <MogiEntity> mogiInBoards  = BoardUI.Instance.MogiInBoard(false);
        List <CardEntity> useableCard   = new List <CardEntity>();

        //put card to slot
        //or top of mogi
        if (BoardUI.Instance.HaveEmptySlot(false))
        {
            for (int i = 0; i < allCardInHand.Count; i++)
            {
                Card cardData = CardData.Instance.GetCard(allCardInHand[i].name, false);

                if (cardData.manaCost <= Game.Instance.opponent.activity.actionPoints)
                {
                    //can't use if card need put on top of mogi
                    //but not have ani mogi card
                    if (mogiInBoards.Count > 0 || cardData.putOn != Card.PutOn.topOfMogi)
                    {
                        useableCard.Add(allCardInHand[i]);
                    }
                }
            }
        }
        //top of mogi only(because not have empty slot)
        else
        {
            for (int i = 0; i < allCardInHand.Count; i++)
            {
                Card cardData = CardData.Instance.GetCard(allCardInHand[i].name, false);

                if (cardData.manaCost <= Game.Instance.opponent.activity.actionPoints)
                {
                    if (cardData.putOn == Card.PutOn.topOfMogi)
                    {
                        useableCard.Add(allCardInHand[i]);
                    }
                }
            }
        }

        if (useableCard.Count > 0)
        {
            CardMotion card     = useableCard[Random.Range(0, useableCard.Count)].motion;
            Card       cardData = CardData.Instance.GetCard(card.name, false);

            if (cardData.putOn == Card.PutOn.emptySlot)
            {
                card.MoveToSlot(BoardUI.Instance.GetFirstEmptySlot(false), false, () =>
                {
                    AIBehaviour.Instance.inAction = false;
                    //repeat
                    animator.SetInteger("action", 2);
                });
            }
            else
            {
                ((CardBonusMotion)card).HandToOpponentTopMogi(mogiInBoards[Random.Range(0, mogiInBoards.Count)], () =>
                {
                    AIBehaviour.Instance.inAction = false;
                    //repeat
                    animator.SetInteger("action", 2);
                });
            }
        }
        else
        {
            ChangeToAttackState(animator);
        }
    }
Exemplo n.º 8
0
    public void CardMotionUpdate()
    {
        CardMotion cardMotion = motionQueue.Peek();

        if (cardMotion.t < 1)
        {
            cardMotion.t += Time.deltaTime * gameSpeed * cardMotion.motionSpeed;
            // constraint it to be less than 1
            if (cardMotion.t > 1)
            {
                cardMotion.t = 1;
            }
            // Interporlation
            cardMotion.onMotion.position = (1 - cardMotion.t) * cardMotion.initialPosition + cardMotion.t * cardMotion.targetPosition;
        }
        // staying
        else if (cardMotion.stayTime > 0)
        {
            cardMotion.stayTime -= Time.deltaTime;
        }
        // end motion
        else
        {
            if (cardMotion.applyEffect)
            {
                Data_ActionCard card = cardMotion.onMotion.GetComponent <ActionCard>().GetData();
                Player          cardUser, opponent;
                if (curState == GameState.PLAYER_TURN)
                {
                    cardUser = player;
                    opponent = enemy;
                }
                else
                {
                    cardUser = enemy;
                    opponent = player;
                }
                // apply effect
                if (card.cardType.Equals("Offense"))
                {
                    AudioManager.instance.PlaySound("Offensive Card");
                    if (opponent.dodge)
                    {
                        opponent.dodge = false;
                    }
                    else if (opponent.dmgBlock > 0)
                    {
                        int nextDmg = card.enemyHPLoss - opponent.dmgBlock;
                        opponent.dmgBlock = 0;
                        if (nextDmg < 0)
                        {
                            nextDmg = 0;
                        }
                        opponent.hp.UpdateValue(-nextDmg);
                        opponent.mp.UpdateValue(-card.enemyMPLoss);
                    }
                    else
                    {
                        opponent.hp.UpdateValue(-card.enemyHPLoss);
                        opponent.mp.UpdateValue(-card.enemyMPLoss);
                    }
                }
                else
                {
                    AudioManager.instance.PlaySound("Support Card");
                    cardUser.hp.UpdateValue(card.selfHPRegen);
                    cardUser.mp.UpdateValue(card.selfMPRegen);
                    if (!cardUser.dodge)
                    {
                        cardUser.dodge = card.evasion;
                    }
                    if (cardUser.dmgBlock <= 0)
                    {
                        cardUser.dmgBlock = card.dmgBlock;
                    }
                }

                UpdateStatusInfo(enemy);
                UpdateStatusInfo(player);
            }
            if (cardMotion.targetParent != null)
            {
                cardMotion.onMotion.SetParent(cardMotion.targetParent);
            }
            motionQueue.Dequeue();
            if (motionQueue.Count > 0)
            {
                CardMotion nextMotion = motionQueue.Peek();
                if (nextMotion.onMotion == cardMotion.onMotion)
                {
                    nextMotion.initialPosition = cardMotion.targetPosition;
                    nextMotion.onMotion.SetParent(board.background.transform);
                }
            }
        }
    }