Card爆改!
This commit is contained in:
@@ -12,28 +12,28 @@ using Random = UnityEngine.Random;
|
||||
|
||||
namespace Continentis.MainGame.Card
|
||||
{
|
||||
public partial class CardLogicBase
|
||||
public partial class CardInstance
|
||||
{
|
||||
/// <summary>
|
||||
/// 选中目标时触发的效果,效果在所有逻辑组件的Targeting之前执行(在SetUp函数生成EventSubmodule的时候)。
|
||||
/// 如果必须需要在逻辑组件之后执行,请重写Initialize函数。
|
||||
/// </summary>
|
||||
public virtual void TargetingEffect(CharacterBase target)
|
||||
public virtual void Targeting(CharacterBase target)
|
||||
{
|
||||
|
||||
eventSubmodule.onTargeting.Invoke(target);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取消选中目标时触发的效果,效果在所有逻辑组件的Untargeting之前执行(在SetUp函数生成EventSubmodule的时候)。
|
||||
/// 如果必须需要在逻辑组件之后执行,请重写Initialize函数。
|
||||
/// </summary>
|
||||
public virtual void UntargetingEffect()
|
||||
public virtual void Untargeting()
|
||||
{
|
||||
|
||||
eventSubmodule.onUntargeting.Invoke();
|
||||
}
|
||||
}
|
||||
|
||||
public partial class CardLogicBase
|
||||
public partial class CardInstance
|
||||
{
|
||||
/// <summary>
|
||||
/// 刷新卡牌属性
|
||||
@@ -54,13 +54,13 @@ namespace Continentis.MainGame.Card
|
||||
/// <summary>
|
||||
/// 根据卡牌内容应用属性变化
|
||||
/// </summary>
|
||||
public virtual void ApplyAttributeChangesByCard()
|
||||
public void ApplyAttributeChangesByCard()
|
||||
{
|
||||
|
||||
cardLogic.ApplyAttributeChangesByCard();
|
||||
}
|
||||
}
|
||||
|
||||
public partial class CardLogicBase
|
||||
public partial class CardInstance
|
||||
{
|
||||
public virtual void DetectTargetsValidity(out List<CharacterBase> valid, out List<CharacterBase> notMet, out List<CharacterBase> invalid)
|
||||
{
|
||||
@@ -175,15 +175,15 @@ namespace Continentis.MainGame.Card
|
||||
handCardView.isDuringPlaying = true;
|
||||
}
|
||||
|
||||
cardInstance.user = user ?? CombatMainManager.Instance.currentCharacter;
|
||||
cardInstance.user.recordSubmodule.RecordCardPlay(cardInstance);
|
||||
this.user = user ?? CombatMainManager.Instance.currentCharacter;
|
||||
this.user.recordSubmodule.RecordCardPlay(this);
|
||||
|
||||
if (!willCheckBeforePlay || CheckBeforePlay())
|
||||
{
|
||||
cardInstance.user.ModifyStamina(-GetAttribute("StaminaCost"));
|
||||
cardInstance.user.ModifyMana(-GetAttribute("ManaCost"));
|
||||
this.user.ModifyStamina(-GetAttribute("StaminaCost"));
|
||||
this.user.ModifyMana(-GetAttribute("ManaCost"));
|
||||
|
||||
if (cardInstance.user is PlayerHero)
|
||||
if (this.user is PlayerHero)
|
||||
{
|
||||
CombatUIManager.Instance.combatMainPage.combatResourcesDisplayer.UpdateIcons();
|
||||
}
|
||||
@@ -194,24 +194,26 @@ namespace Continentis.MainGame.Card
|
||||
{
|
||||
playSubmodule.isDuringPlayEffect = true;
|
||||
eventSubmodule.onBeforePlay.Invoke(targetList);
|
||||
cardInstance.user.eventSubmodule?.onBeforePlayCard.Invoke(cardInstance, targetList);
|
||||
cardInstance.user.combatBuffSubmodule.buffList.For(buff =>
|
||||
this.user.eventSubmodule?.onBeforePlayCard.Invoke(this, targetList);
|
||||
this.user.combatBuffSubmodule.buffList.For(buff =>
|
||||
{
|
||||
buff.eventSubmodule?.onBeforePlayCard.Invoke(cardInstance, targetList);
|
||||
buff.eventSubmodule?.onBeforePlayCard.Invoke(this, targetList);
|
||||
});
|
||||
}));
|
||||
|
||||
CommandQueueManager.Instance.AddCommands(PlayEffect(targetList));
|
||||
CommandQueueManager.Instance.AddCommands(cardLogic.PlayEffect(targetList));
|
||||
CommandQueueManager.Instance.AddCommand(new Cmd_Function(() =>
|
||||
{
|
||||
eventSubmodule.onAfterPlay.Invoke(targetList);
|
||||
combatBuffSubmodule.buffList.For(buff => buff.usageSubmodule?.UpdateModule());
|
||||
cardInstance.user.eventSubmodule.onAfterPlayCard.Invoke(cardInstance, targetList);
|
||||
cardInstance.user.combatBuffSubmodule.buffList.For(buff =>
|
||||
this.user.eventSubmodule.onAfterPlayCard.Invoke(this, targetList);
|
||||
this.user.combatBuffSubmodule.buffList.For(buff =>
|
||||
{
|
||||
buff.eventSubmodule?.onAfterPlayCard.Invoke(cardInstance, targetList);
|
||||
buff.eventSubmodule?.onAfterPlayCard.Invoke(this, targetList);
|
||||
});
|
||||
AfterPlayEffect(targetList);
|
||||
cardLogic.AfterPlayEffect(targetList);
|
||||
playSubmodule.isDuringPlayEffect = false;
|
||||
if (handCardView != null)
|
||||
{
|
||||
@@ -233,37 +235,37 @@ namespace Continentis.MainGame.Card
|
||||
|
||||
protected virtual List<CommandBase> PlayEffect(List<CharacterBase> targetList)
|
||||
{
|
||||
return null;
|
||||
return new List<CommandBase>();
|
||||
}
|
||||
|
||||
protected virtual void AfterPlayEffect(List<CharacterBase> targetList)
|
||||
{
|
||||
if (contentSubmodule.cardType == CardType.Power)
|
||||
{
|
||||
CommandQueueManager.Instance.AddCommand(user.deckSubmodule.UsePowerCard(cardInstance));
|
||||
CommandQueueManager.Instance.AddCommand(user.deckSubmodule.UsePowerCard(this));
|
||||
return;
|
||||
}
|
||||
|
||||
if (HasKeyword("Exhaust"))
|
||||
{
|
||||
CommandQueueManager.Instance.AddCommand(user.deckSubmodule.ExhaustCard(cardInstance));
|
||||
CommandQueueManager.Instance.AddCommand(user.deckSubmodule.ExhaustCard(this));
|
||||
return;
|
||||
}
|
||||
|
||||
if(HasKeyword("Exhaustible"))
|
||||
{
|
||||
if (!cardInstance.cardLogic.HasAttribute("ExhaustibleCount"))
|
||||
if (!HasAttribute("ExhaustibleCount"))
|
||||
{
|
||||
Debug.LogError("Exhaustible card missing ExhaustibleCount attribute: " + contentSubmodule.cardName);
|
||||
CommandQueueManager.Instance.AddCommand(user.deckSubmodule.ExhaustCard(cardInstance));
|
||||
CommandQueueManager.Instance.AddCommand(user.deckSubmodule.ExhaustCard(this));
|
||||
return;
|
||||
}
|
||||
|
||||
cardInstance.cardLogic.ModifyAttribute("ExhaustibleCount", -1);
|
||||
ModifyAttribute("ExhaustibleCount", -1);
|
||||
|
||||
if(cardInstance.cardLogic.GetAttribute("ExhaustibleCount") <= 0)
|
||||
if(GetAttribute("ExhaustibleCount") <= 0)
|
||||
{
|
||||
CommandQueueManager.Instance.AddCommand(user.deckSubmodule.ExhaustCard(cardInstance));
|
||||
CommandQueueManager.Instance.AddCommand(user.deckSubmodule.ExhaustCard(this));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -272,7 +274,7 @@ namespace Continentis.MainGame.Card
|
||||
{
|
||||
if(!HasKeyword("Reuseable"))
|
||||
{
|
||||
CommandQueueManager.Instance.AddCommand(playerHero.deckSubmodule.DiscardCard(cardInstance, false));
|
||||
CommandQueueManager.Instance.AddCommand(playerHero.deckSubmodule.DiscardCard(this, false));
|
||||
CommandQueueManager.Instance.AddCommand(new Cmd_Function(() =>
|
||||
{
|
||||
if (handCardView != null)
|
||||
@@ -289,8 +291,30 @@ namespace Continentis.MainGame.Card
|
||||
}
|
||||
}
|
||||
|
||||
public partial class CardLogicBase
|
||||
public partial class CardInstance
|
||||
{
|
||||
public void UpgradeCard()
|
||||
{
|
||||
if (owner is not CombatTeam)
|
||||
{
|
||||
KeyValuePair<string, List<CardInstance>> currentPile = deck.GetCardLocation(this, out int index);
|
||||
if (!cardData.upgradeNode.isTerminalNode)
|
||||
{
|
||||
DestroyHandCardView();
|
||||
|
||||
CardData newData = cardData.upgradeNode.upgradeCards[0]; //后续可改为选择升级方向
|
||||
CardLogicBase newLogic = CardLogicBase.GenerateCardLogic(newData);
|
||||
this.cardLogic = newLogic;
|
||||
newLogic.card = this;
|
||||
this.cardLogic.Initialize(this);
|
||||
if (user is PlayerHero)
|
||||
GenerateHandCardView(CombatUIManager.Instance.combatMainPage.Pile(currentPile.Key), index);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user