Example #1
0
        public override bool update(TableManager table, THHCard.DamageEventArg eventArg)
        {
            if (_animList == null)
            {
                _animList = new List <AnimAnim>();
                foreach (var card in eventArg.infoDic.Keys)
                {
                    if (table.tryGetServant(card, out var servant))
                    {
                        servant.DamageText.text = "-" + eventArg.value;
                        servant.HpTextPropNumber.asText.text = eventArg.infoDic[card].currentLife.ToString();
                        servant.onDamage.invokeBeforeAnim();
                        _animList.Add(new AnimAnim(servant.animator, servant.onDamage.animName));
                    }
                    else if (table.tryGetMaster(card, out Master master))
                    {
                        master.DamageText.text            = "-" + eventArg.value;
                        master.LifePropNumber.asText.text = eventArg.infoDic[card].currentLife.ToString();
                        master.onDamage.invokeBeforeAnim();
                        _animList.Add(new AnimAnim(master.animator, master.onDamage.animName));
                    }
                    else if (table.tryGetItem(card, out var item))
                    {
                        item.DurabilityPropNumber.asText.text = eventArg.infoDic[card].currentLife.ToString();
                        item.onLifeDown.invokeBeforeAnim();
                        _animList.Add(new AnimAnim(item.animator, item.onLifeDown.animName));
                    }
                }
            }
            bool isAllAnimDone = true;

            foreach (var anim in _animList)
            {
                if (!anim.update(table))
                {
                    isAllAnimDone = false;
                }
            }
            if (!isAllAnimDone)
            {
                return(false);
            }
            foreach (var card in eventArg.infoDic.Keys)
            {
                if (table.tryGetServant(card, out var servant))
                {
                    servant.onDamage.afterAnim.Invoke();
                }
                else if (table.tryGetMaster(card, out Master master))
                {
                    master.onDamage.afterAnim.Invoke();
                }
                else if (table.tryGetItem(card, out var item))
                {
                    item.onLifeDown.afterAnim.Invoke();
                }
            }
            return(true);
        }
Example #2
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);
 }
Example #3
0
        /// <summary>
        /// 每一帧调用
        /// </summary>
        /// <param name="table">游戏桌面UI管理器</param>
        /// <param name="eventArg">死亡事件</param>
        /// <returns></returns>
        public override bool update(TableManager table, THHCard.DeathEventArg eventArg)
        {
            if (_animList == null)
            {
                _animList = new List <AnimAnim>();
                foreach (var card in eventArg.infoDic.Keys)         //列举所有死亡的信息
                {
                    if (table.tryGetServant(card, out var servant)) //尝试获取死亡的随从的随从UI
                    {
                        servant.onDeath.beforeAnim.Invoke();
                        _animList.Add(new AnimAnim(servant.animator, servant.onDeath.animName));
                        //table.ui.SelfFieldList.removeItem(servant);//从自己的场上移除随从UI
                        //table.ui.EnemyFieldList.removeItem(servant);//从敌人的场上移除随从UI
                    }
                    else if (table.tryGetServant(card, out var master))
                    {
                        master.onDeath.beforeAnim.Invoke();
                        _animList.Add(new AnimAnim(master.animator, master.onDeath.animName));
                    }
                    else if (table.tryGetItem(card, out var item))
                    {
                        item.onDestroy.beforeAnim.Invoke();
                        _animList.Add(new AnimAnim(item.animator, item.onDestroy.animName));
                    }
                }
            }
            bool isAllAnimDone = true;

            foreach (var anim in _animList)
            {
                if (!anim.update(table))
                {
                    isAllAnimDone = false;
                }
            }
            if (!isAllAnimDone)
            {
                return(false);
            }
            foreach (var card in eventArg.infoDic.Keys)         //列举所有死亡的信息
            {
                if (table.tryGetServant(card, out var servant)) //尝试获取死亡的随从的随从UI
                {
                    servant.onDeath.afterAnim.Invoke();
                    table.ui.SelfFieldList.removeItem(servant);  //从自己的场上移除随从UI
                    table.ui.EnemyFieldList.removeItem(servant); //从敌人的场上移除随从UI
                }
                else if (table.tryGetMaster(card, out var master))
                {
                    master.onDeath.afterAnim.Invoke();
                }
                else if (table.tryGetItem(card, out var item))
                {
                    item.onDestroy.afterAnim.Invoke();
                }
            }
            return(true);
        }
 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);
 }