Ejemplo n.º 1
0
 bool tryTargetedAnim(TableManager table, THHPlayer.UseEventArg eventArg)
 {
     if (eventArg.targets != null && eventArg.targets.Length > 0 && eventArg.targets[0] is var targetCard)
     {
         SimpleAnim simpleAnim = null;
         Animator   animator   = null;
         if (_targetedAnim == null)
         {
             if (table.tryGetMaster(targetCard, out var targetMaster))
             {
                 simpleAnim = targetMaster.onTargeted;
                 animator   = targetMaster.animator;
             }
             else if (table.tryGetServant(targetCard, out var targetServant))
             {
                 simpleAnim = targetServant.onTargeted;
                 animator   = targetServant.animator;
             }
             else
             {
                 throw new ActorNotFoundException(targetCard);
             }
         }
         if (!SimpleAnimHelper.update(table, ref _targetedAnim, simpleAnim, animator, next => false))
         {
             return(true);
         }
     }
     return(false);
 }
Ejemplo n.º 2
0
        public override bool update(TableManager table, Card.RemoveModiEventArg eventArg)
        {
            SimpleAnim simpleAnim = null;
            Animator   animator   = null;

            if (table.tryGetServant(eventArg.card, out var servant))
            {
                //animator = servant.animator;
                //if (eventArg.modifier is AttackModifier atkMod)
                //{
                //    if (atkMod.value > 0)
                //        simpleAnim = servant.onAttackUp;
                //    else
                //        simpleAnim = servant.onAttackDown;
                //    servant.AttackTextPropNumber.asText.text = eventArg.card.getAttack(table.game).ToString();
                //}
                //else if (eventArg.modifier is LifeModifier lifMod)
                //{
                //    if (lifMod.value > 0)
                //        simpleAnim = servant.onLifeUp;
                //    else
                //        simpleAnim = servant.onLifeDown;
                //    servant.HpTextPropNumber.asText.text = eventArg.card.getCurrentLife(table.game).ToString();
                //}
            }
            else if (table.tryGetHand(eventArg.card, out var hand))
            {
                animator = hand.animator;
                //if (eventArg.modifier is AttackModifier atkMod)
                //{
                //    if (atkMod.value > 0)
                //        simpleAnim = hand.onAttackUp;
                //    else
                //        simpleAnim = hand.onAttackDown;
                //    hand.Card.AttackPropNumber.asText.text = eventArg.card.getAttack(table.game).ToString();
                //}
                //else if (eventArg.modifier is LifeModifier lifMod)
                //{
                //    if (lifMod.value > 0)
                //        simpleAnim = hand.onLifeUp;
                //    else
                //        simpleAnim = hand.onLifeDown;
                //    hand.Card.LifePropNumber.asText.text = eventArg.card.getLife(table.game).ToString();
                //}
                /*else */
                if (eventArg.modifier is CostModifier)
                {
                    if (eventArg.card.getCost(table.game) == eventArg.card.define.getCost())
                    {
                        simpleAnim = hand.onCostResume;
                    }
                    hand.Card.CostPropNumber.asText.text = eventArg.card.getCost(table.game).ToString();
                }
            }
            if (!SimpleAnimHelper.update(table, ref _anim, simpleAnim, animator))
            {
                return(false);
            }
            return(true);
        }
Ejemplo n.º 3
0
        public override bool update(TableManager table, THHPlayer.FatigueEventArg eventArg)
        {
            var deck = eventArg.player == table.player ? table.ui.SelfDeck : table.ui.EnemyDeck;

            if (!SimpleAnimHelper.update(table, ref _anim, deck.onFatigue, deck.animator))
            {
                return(false);
            }
            //if (!_timer.isStarted)
            //{
            //    table.ui.Fatigue.display();
            //    table.ui.Fatigue.Text.text = "没有牌了,你受到了" + eventArg.player.fatigue + "点伤害!";
            //    _timer.start();
            //}
            //table.ui.Fatigue.rectTransform.localScale = Vector3.Lerp(Vector3.one * .5f, Vector3.one, table.ui.Fatigue.moveCurve.Evaluate(_timer.getProgress(0, .5f)));
            //if (eventArg.player == table.player)
            //    table.ui.Fatigue.rectTransform.localPosition = Vector3.Lerp(table.ui.SelfDeck.rectTransform.localPosition, Vector3.zero, table.ui.Fatigue.moveCurve.Evaluate(_timer.getProgress(0, .5f)));
            //else
            //    table.ui.Fatigue.rectTransform.localPosition = Vector3.Lerp(table.ui.EnemyDeck.rectTransform.localPosition, Vector3.zero, table.ui.Fatigue.moveCurve.Evaluate(_timer.getProgress(0, .5f)));
            //table.ui.Fatigue.alpha = 1 - table.ui.Fatigue.fadeCurve.Evaluate(_timer.getProgress(1, 1.5f));
            //if (!_timer.isExpired())
            //    return false;
            //table.ui.Fatigue.hide();
            return(true);
        }
Ejemplo n.º 4
0
 public override bool update(TableManager table, THHPlayer.MoveEventArg eventArg)
 {
     if (!table.tryGetServant(eventArg.card, out var servant))
     {
         servant = table.createServant(eventArg.card, eventArg.position, eventArg.attack, eventArg.life);
     }
     if (!SimpleAnimHelper.update(table, ref _anim, servant.onSummon, servant.animator))
     {
         return(false);
     }
     return(true);
 }
Ejemplo n.º 5
0
 public override bool update(TableManager table, Pile.MoveCardEventArg eventArg)
 {
     if (eventArg.from == null)
     {
         if (eventArg.to.name == PileName.HAND)
         {
             //发现,印卡
             if (!table.tryGetHand(eventArg.card, out var hand))
             {
                 hand = table.createHand(eventArg.card);
             }
             if (!SimpleAnimHelper.update(table, ref _anim, hand.onCreate, hand.animator))
             {
                 return(false);
             }
         }
     }
     else if (eventArg.from.name == PileName.INIT)
     {
         if (eventArg.to.name == PileName.HAND)
         {
             //初始手牌
             table.createHand(eventArg.card);
         }
     }
     else if (eventArg.from.name == PileName.DECK)
     {
         if (eventArg.to.name == PileName.HAND)
         {
             //抽牌
             if (!_timer.isStarted)
             {
                 _item = table.createHand(eventArg.card);
                 if (eventArg.from.owner == table.player)
                 {
                     _item.Card.rectTransform.position = table.ui.SelfDeck.rectTransform.position;
                     _startPosition = table.ui.SelfDeck.rectTransform.position;
                 }
                 else
                 {
                     _item.Card.rectTransform.position = table.ui.EnemyDeck.rectTransform.position;
                     _startPosition = table.ui.EnemyDeck.rectTransform.position;
                 }
                 _timer.start();
             }
             _item.Card.rectTransform.position = Vector3.Lerp(_startPosition, _item.rectTransform.position, _item.Card.drawCurve.Evaluate(_timer.progress));
             if (!_timer.isExpired())
             {
                 return(false);
             }
         }
     }
     else if (eventArg.from.name == PileName.HAND)
     {
         HandListItem hand = table.getHand(eventArg.card);
         if (eventArg.to.name == PileName.GRAVE)
         {
             //弃牌
             if (!SimpleAnimHelper.update(table, ref _anim, hand.onDiscard, hand.animator, next =>
             {
                 if (next is MoveCardAnim moveCard && moveCard.tEventArg.card != eventArg.card)
                 {
                     return(true);
                 }
                 return(false);
             }))
Ejemplo n.º 6
0
 public override bool update(TableManager table, Pile.MoveCardEventArg eventArg)
 {
     if (eventArg.from == null)
     {
         if (eventArg.to.name == PileName.HAND)
         {
             //发现,印卡
             if (!table.tryGetHand(eventArg.card, out var hand))
             {
                 hand = table.createHand(eventArg.card);
             }
             if (!SimpleAnimHelper.update(table, ref _anim, hand.onCreate, hand.animator))
             {
                 return(false);
             }
         }
     }
     else if (eventArg.from.name == PileName.INIT)
     {
         if (eventArg.to.name == PileName.HAND)
         {
             //初始手牌
             table.createHand(eventArg.card);
         }
     }
     else if (eventArg.from.name == PileName.DECK)
     {
         RectTransform deckTransform = eventArg.from == table.player.deck ? table.ui.SelfDeck.rectTransform : table.ui.EnemyDeck.rectTransform;
         if (eventArg.to.name == PileName.HAND)
         {
             //抽牌
             if (!table.tryGetHand(eventArg.card, out var hand))
             {
                 hand = table.createHand(eventArg.card);
                 hand.rectTransform.position = deckTransform.position;
                 hand.GetComponentInChildren <PositionLerp>().setTarget(hand.rectTransform);
             }
             if (!SimpleAnimHelper.update(table, ref _anim, hand.onDraw, hand.animator))
             {
                 return(false);
             }
             //if (!_timer.isStarted)
             //{
             //    _item = table.createHand(eventArg.card);
             //    if (eventArg.from.owner == table.player)
             //    {
             //        _item.Card.rectTransform.position = table.ui.SelfDeck.rectTransform.position;
             //        _startPosition = table.ui.SelfDeck.rectTransform.position;
             //    }
             //    else
             //    {
             //        _item.Card.rectTransform.position = table.ui.EnemyDeck.rectTransform.position;
             //        _startPosition = table.ui.EnemyDeck.rectTransform.position;
             //    }
             //    _timer.start();
             //}
             //_item.Card.rectTransform.position = Vector3.Lerp(_startPosition, _item.rectTransform.position, _item.Card.drawCurve.Evaluate(_timer.progress));
             //if (!_timer.isExpired())
             //    return false;
         }
         else if (eventArg.to.name == PileName.WARP)
         {
             if (!table.tryGetHand(eventArg.card, out var hand))
             {
                 hand = table.createHand(eventArg.card);
                 hand.GetComponentInChildren <PositionLerp>().setTarget(deckTransform);
             }
             if (!SimpleAnimHelper.update(table, ref _anim, hand.onDraw, hand.animator))
             {
                 return(false);
             }
             if (!SimpleAnimHelper.update(table, ref _anim2, hand.onDiscard, hand.animator))
             {
                 return(false);
             }
             table.ui.SelfHandList.removeItem(hand);
             table.ui.EnemyHandList.removeItem(hand);
         }
     }
     else if (eventArg.from.name == PileName.HAND)
     {
         if (table.tryGetHand(eventArg.card, out var hand))
         {
             if (eventArg.to.name == PileName.GRAVE)
             {
                 //弃牌
                 if (!SimpleAnimHelper.update(table, ref _anim, hand.onDiscard, hand.animator, next =>
                 {
                     if (next is MoveCardAnim moveCard && moveCard.tEventArg.card != eventArg.card)
                     {
                         return(true);
                     }
                     return(false);
                 }))
Ejemplo n.º 7
0
 public override bool update(TableManager table, THHPlayer.UseEventArg eventArg)
 {
     if (eventArg.card.define is ServantCardDefine)
     {
         if (eventArg.player == table.player)
         {
             if (!table.ui.ServantPlaceHolder.Servant.isDisplaying)
             {
                 HandListItem item = table.getHand(eventArg.card);
                 if (_handToField == null)
                 {
                     _handToField = new HandToFieldAnim(table, item, table.ui.SelfFieldList, eventArg.position);
                 }
                 if (!_handToField.update(table))
                 {
                     return(false);
                 }
             }
             if (tryTargetedAnim(table, eventArg))
             {
                 return(false);
             }
             table.ui.SelfHandList.removeItem(table.getHand(eventArg.card));
             table.ui.addChild(table.ui.ServantPlaceHolder.rectTransform);
             table.ui.ServantPlaceHolder.hide();
         }
         else
         {
             var hand = table.getHand(eventArg.card);
             if (hand == null)
             {
                 throw new ActorNotFoundException(eventArg.card);
             }
             if (!table.ui.ServantPlaceHolder.Servant.isDisplaying)
             {
                 //敌方使用随从
                 if (_handToField == null)
                 {
                     _handToField = new HandToFieldAnim(table, hand, table.ui.EnemyFieldList, eventArg.position);
                 }
                 if (!_handToField.update(table))
                 {
                     return(false);
                 }
             }
             if (tryTargetedAnim(table, eventArg))
             {
                 return(false);
             }
             table.ui.EnemyHandList.removeItem(hand);
             table.ui.addChild(table.ui.ServantPlaceHolder.rectTransform);
             table.ui.ServantPlaceHolder.hide();
         }
     }
     else if (eventArg.card.define is SpellCardDefine)
     {
         if (eventArg.player == table.player)
         {
             table.ui.SelfHandList.removeItem(table.getHand(eventArg.card));
             if (tryTargetedAnim(table, eventArg))
             {
                 return(false);
             }
         }
         else
         {
             HandListItem hand = table.getHand(eventArg.card);
             table.setCard(hand.Card, eventArg.card, true);
             hand.GetComponentInChildren <PositionLerp>().setTarget(table.ui.getChild("SpellDisplay"));
             if (!SimpleAnimHelper.update(table, ref _useAnim, hand.onEnemyUse, hand.animator))
             {
                 return(false);
             }
             table.ui.EnemyHandList.removeItem(table.getHand(eventArg.card));
             if (tryTargetedAnim(table, eventArg))
             {
                 return(false);
             }
         }
     }
     else if (eventArg.card.isSkill())
     {
         if (eventArg.player == table.player)
         {
             table.setSkill(table.ui.SelfSkill, eventArg.card);
         }
         else
         {
             table.setSkill(table.ui.EnemySkill, eventArg.card);
         }
         if (tryTargetedAnim(table, eventArg))
         {
             return(false);
         }
     }
     else if (eventArg.card.isItem())
     {
         if (eventArg.player == table.player)
         {
             table.setItem(table.ui.SelfItem, eventArg.card);
             if (!SimpleAnimHelper.update(table, ref _useAnim, table.ui.SelfItem.onEquip, table.ui.SelfItem.animator))
             {
                 return(false);
             }
         }
         else
         {
             table.setItem(table.ui.EnemyItem, eventArg.card);
             if (!SimpleAnimHelper.update(table, ref _useAnim, table.ui.EnemyItem.onEquip, table.ui.EnemyItem.animator))
             {
                 return(false);
             }
         }
         if (tryTargetedAnim(table, eventArg))
         {
             return(false);
         }
     }
     return(true);
 }
Ejemplo n.º 8
0
        public override bool update(TableManager table, TouhouCardEngine.Card.AddModiEventArg eventArg)
        {
            SimpleAnim simpleAnim = null;
            Animator   animator   = null;

            if (table.tryGetServant(eventArg.card, out var servant))
            {
                animator = servant.animator;
                if (eventArg.modifier is AttackModifier atkMod)
                {
                    if (atkMod.value > 0)
                    {
                        simpleAnim = servant.onAttackUp;
                    }
                    else
                    {
                        simpleAnim = servant.onAttackDown;
                    }
                    servant.AttackTextPropNumber.asText.text = eventArg.card.getAttack(table.game).ToString();
                }
                else if (eventArg.modifier is LifeModifier lifMod)
                {
                    if (lifMod.value > 0)
                    {
                        simpleAnim = servant.onLifeUp;
                    }
                    else
                    {
                        simpleAnim = servant.onLifeDown;
                    }
                    servant.HpTextPropNumber.asText.text = eventArg.card.getCurrentLife(table.game).ToString();
                }
            }
            else if (table.tryGetHand(eventArg.card, out var hand))
            {
                animator = hand.animator;
                if (eventArg.modifier is AttackModifier atkMod)
                {
                    if (atkMod.value > 0)
                    {
                        simpleAnim = hand.onAttackUp;
                    }
                    else
                    {
                        simpleAnim = hand.onAttackDown;
                    }
                    hand.Card.AttackPropNumber.asText.text = eventArg.card.getAttack(table.game).ToString();
                }
                else if (eventArg.modifier is LifeModifier lifMod)
                {
                    if (lifMod.value > 0)
                    {
                        simpleAnim = hand.onLifeUp;
                    }
                    else
                    {
                        simpleAnim = hand.onLifeDown;
                    }
                    hand.Card.LifePropNumber.asText.text = eventArg.card.getLife(table.game).ToString();
                }
                else if (eventArg.modifier is CostModifier costMod)
                {
                    if (costMod.value > 0)
                    {
                        simpleAnim = hand.onCostUp;
                    }
                    else
                    {
                        simpleAnim = hand.onCostDown;
                    }
                    hand.Card.CostPropNumber.asText.text = eventArg.card.getCost(table.game).ToString();
                }
            }
            if (!SimpleAnimHelper.update(table, ref _anim, simpleAnim, animator))
            {
                return(false);
            }
            return(true);
        }
Ejemplo n.º 9
0
 public override bool update(TableManager table, THHCard.AttackEventArg eventArg)
 {
     if (table.tryGetMaster(eventArg.card, out var attackMaster))
     {
         if (table.tryGetMaster(eventArg.target, out var targetMaster))
         {
             attackMaster.GetComponentInChildren <PositionLerp>().setTarget(targetMaster.rectTransform, targetMaster.rectTransform.sizeDelta.x / 2);
             if (!SimpleAnimHelper.update(table, ref _attackAnim, attackMaster.onAttack, attackMaster.animator))
             {
                 return(false);
             }
             if (!SimpleAnimHelper.update(table, ref _attackedAnim, targetMaster.onAttacked, targetMaster.animator))
             {
                 return(false);
             }
         }
         else if (table.tryGetServant(eventArg.target, out var targetServant))
         {
             attackMaster.GetComponentInChildren <PositionLerp>().setTarget(targetServant.rectTransform, targetServant.rectTransform.sizeDelta.x / 2);
             if (!SimpleAnimHelper.update(table, ref _attackAnim, attackMaster.onAttack, attackMaster.animator))
             {
                 return(false);
             }
             if (!SimpleAnimHelper.update(table, ref _attackedAnim, targetServant.onAttacked, targetServant.animator))
             {
                 return(false);
             }
         }
         table.setMaster(attackMaster, eventArg.card);
     }
     else if (table.getServant(eventArg.card) is Servant attackServant)
     {
         if (table.tryGetMaster(eventArg.target, out var targetMaster))
         {
             attackServant.GetComponentInChildren <PositionLerp>().setTarget(targetMaster.rectTransform, targetMaster.rectTransform.sizeDelta.x / 2);
             if (!SimpleAnimHelper.update(table, ref _attackAnim, attackServant.onAttack, attackServant.animator))
             {
                 return(false);
             }
             if (!SimpleAnimHelper.update(table, ref _attackedAnim, targetMaster.onAttacked, targetMaster.animator))
             {
                 return(false);
             }
         }
         else if (table.tryGetServant(eventArg.target, out var targetServant))
         {
             attackServant.GetComponentInChildren <PositionLerp>().setTarget(targetServant.rectTransform, targetServant.rectTransform.sizeDelta.x / 2);
             if (!SimpleAnimHelper.update(table, ref _attackAnim, attackServant.onAttack, attackServant.animator))
             {
                 return(false);
             }
             if (!SimpleAnimHelper.update(table, ref _attackedAnim, targetServant.onAttacked, targetServant.animator))
             {
                 return(false);
             }
         }
         //if (table.tryGetMaster(eventArg.target, out var targetMaster))
         //{
         //    if (!_timer1.isStarted)
         //        _timer1.start();
         //    attackServant.getChild("Root").position =
         //        Vector3.Lerp(attackServant.rectTransform.position, targetMaster.rectTransform.position,
         //        attackServant.attackAnimationCurve.Evaluate(_timer1.progress));
         //    if (!_timer1.isExpired())
         //        return false;
         //    if (!_timer2.isStarted)
         //        _timer2.start();
         //    attackServant.getChild("Root").position =
         //        Vector3.Lerp(targetMaster.rectTransform.position, attackServant.rectTransform.position,
         //        attackServant.attackAnimationCurve.Evaluate(_timer2.progress));
         //    if (!_timer2.isExpired())
         //        return false;
         //}
         //else if (table.getServant(eventArg.target) is Servant targetServant)
         //{
         //    if (!_timer1.isStarted)
         //        _timer1.start();
         //    attackServant.getChild("Root").position =
         //        Vector3.Lerp(attackServant.rectTransform.position, targetServant.rectTransform.position,
         //        attackServant.attackAnimationCurve.Evaluate(_timer1.progress));
         //    if (!_timer1.isExpired())
         //        return false;
         //    if (!_timer2.isStarted)
         //        _timer2.start();
         //    attackServant.getChild("Root").position =
         //        Vector3.Lerp(targetServant.rectTransform.position, attackServant.rectTransform.position,
         //        attackServant.attackAnimationCurve.Evaluate(_timer2.progress));
         //    if (!_timer2.isExpired())
         //        return false;
         //}
         table.setServant(attackServant, eventArg.card);
     }
     return(true);
 }