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); }
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); }
/// <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); }