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); }
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); }
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); }
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(); }
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); }
public virtual void Init(Card info, CardDisplay display, CardMotion motion, bool isController) { curStatus = status.none; CardBehaviour.Instance.AddNewCard(this); }
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); } }
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); } } } }