Exemplo n.º 1
0
 public void onDragHand(HandListItem item, PointerEventData pointer)
 {
     if (item.GetComponentInParent <HandList>() != SelfHandList)//你不能用别人的卡
     {
         return;
     }
     usingHand = item;
     if (!canControl)//不是你的回合
     {
         resetUse(true, true);
         return;
     }
     //拖拽卡片
     item.Card.rectTransform.position = pointer.position;
     if (SelfHandList.rectTransform.rect.Contains(SelfHandList.rectTransform.InverseTransformPoint(pointer.position)))
     {
         //如果移动回手牌区域,恢复正常大小
         item.Card.rectTransform.localScale = Vector3.one;
         //移除随从占位
         hideServantPlaceHolder();
     }
     else
     {
         //移动到手牌区以外的地方视作打算使用
         if (!item.Card.card.isUsable(game, player, out string info))
         {
             //卡牌不可用,停止拖拽并提示
             showTip(info);
             resetUse(true, true);
         }
         else
         {
             //手牌在战场上大小和随从牌一致
             item.Card.rectTransform.localScale = Vector3.one * .4f / rectTransform.localScale.y;
             if (item.Card.card.define is ServantCardDefine)
             {
                 SelfFieldList.defaultItem.rectTransform.SetAsFirstSibling();
                 ServantPlaceHolder.rectTransform.sizeDelta = SelfFieldList.defaultItem.rectTransform.sizeDelta;
                 SelfFieldList.addChild(ServantPlaceHolder.rectTransform);
                 ServantPlaceHolder.display();
                 var servants = SelfFieldList.getItems();
                 int index    = 0;
                 if (servants.Length > 0)
                 {
                     //需要选择空位,计算空位
                     for (int i = 0; i < servants.Length; i++)
                     {
                         if (servants[i].rectTransform.position.x < pointer.position.x)
                         {
                             index = i + 1;
                         }
                     }
                     ServantPlaceHolder.rectTransform.SetSiblingIndex(index + 1);
                 }
             }
         }
     }
 }
Exemplo n.º 2
0
 public void setGame(THHGame game, THHPlayer player)
 {
     InitReplaceDialog.hide();
     TurnTipImage.hide();
     SelfHandList.clearItems();
     SelfFieldList.clearItems();
     EnemyFieldList.clearItems();
     EnemyHandList.clearItems();
     AttackArrowImage.hide();
     Fatigue.hide();
 }
Exemplo n.º 3
0
        public void setGame(THHGame game, THHPlayer player)
        {
            InitReplaceDialog.hide();
            TurnTipImage.hide();
            SelfHandList.clearItems();
            SelfFieldList.clearItems();
            EnemyFieldList.clearItems();
            EnemyHandList.clearItems();
            AttackArrowImage.hide();
            Fatigue.hide();
            _animationQueue.Clear();

            if (game != null)
            {
                game.triggers.onEventBefore -= onEventBefore;
                game.triggers.onEventAfter  -= onEventAfter;
            }
            this.game = game;
            if (game != null)
            {
                game.triggers.onEventBefore += onEventBefore;
                game.triggers.onEventAfter  += onEventAfter;
            }
            if (player != null)
            {
                SelfSkill.asButton.onClick.RemoveAllListeners();
                TurnEndButton.onClick.RemoveAllListeners();
            }
            this.player = player;
            if (player != null)
            {
                SelfSkill.asButton.onClick.AddListener(() =>
                {
                    if (selectableTargets != null)
                    {
                        return;
                    }
                    player.cmdUse(game, SelfSkill.card, 0);
                });
                TurnEndButton.onClick.AddListener(() =>
                {
                    player.cmdTurnEnd(game);

                    //SelfHandList.stopPlacing(true);
                    resetUse(true, true);
                    selectableTargets = null;
                });
            }
        }
Exemplo n.º 4
0
 public void onReleaseHand(HandListItem item, PointerEventData pointer)
 {
     if (item.GetComponentInParent <HandList>() != SelfHandList)//你不能用别人的卡
     {
         return;
     }
     if (!canControl)//不是你的回合,不生效
     {
         resetUse(true, true);
         return;
     }
     usingHand = item;
     if (SelfHandList.rectTransform.rect.Contains(SelfHandList.rectTransform.InverseTransformPoint(pointer.position)))
     {
         //如果松开,取消使用
         resetUse(true, true);
     }
     else
     {
         if (!item.Card.card.isUsable(game, player, out string info))
         {
             //卡牌不可用
             showTip(info);
             resetUse(true, true);
         }
         else if (item.Card.card.define is ServantCardDefine)
         {
             //松开鼠标,确认使用随从牌
             var servants = SelfFieldList.getItems();
             int index    = 0;
             if (servants.Length > 0)
             {
                 //需要选择空位,计算空位
                 for (int i = 0; i < servants.Length; i++)
                 {
                     if (servants[i].rectTransform.position.x < pointer.position.x)
                     {
                         index = i + 1;
                     }
                 }
                 ServantPlaceHolder.rectTransform.SetSiblingIndex(index + 1);
             }
             if (item.Card.card.getAvaliableTargets(game) is TouhouCardEngine.Card[] targets && targets.Length > 0)
             {
                 _usingCard     = item.Card.card;
                 _usingPosition = index;
                 //进入选择目标状态,固定手牌到占位上,高亮可以选择的目标
                 item.Card.hide();
                 //显示占位随从
                 ServantPlaceHolder.Servant.display();
                 ServantPlaceHolder.Servant.update(item.Card.card.define, getSkin(item.Card.card));
                 isSelectingTarget = true;
                 selectableTargets = targets.Select(target =>
                 {
                     if (getMaster(target) is Master master)
                     {
                         return(master as UIObject);
                     }
                     else if (getServant(target) is Servant servant)
                     {
                         return(servant as UIObject);
                     }
                     throw new ActorNotFoundException(target);
                 }).ToArray();
                 SelfHandList.shrink();
             }
             else
             {
                 //使用无目标随从牌
                 player.cmdUse(game, item.Card.card, index);
                 resetUse(false, false);
             }
         }