From 5fe665d0cea5f84b5812ed5b394773430b59955a Mon Sep 17 00:00:00 2001 From: SoulliesOfficial Date: Sat, 15 Nov 2025 12:17:34 -0500 Subject: [PATCH] =?UTF-8?q?Card=E7=88=86=E6=94=B9=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AblazeInPurgatory.cs | 14 +- .../Basic_SoulCleave/SoulCleave.cs | 10 +- .../CardLogicComponent_Protect.cs | 8 +- .../Basic/Cards/Scripts/Assassin/Ambush.cs | 4 +- .../Cards/Scripts/Assassin/AmbushStance.cs | 2 +- .../Basic/Cards/Scripts/Assassin/Backstab.cs | 5 +- .../Cards/Scripts/Assassin/BladeOfFear.cs | 6 +- .../Cards/Scripts/Assassin/CompoundPoison.cs | 2 +- .../Cards/Scripts/Assassin/ExtremePain.cs | 8 +- .../Cards/Scripts/Assassin/FlashTerror.cs | 2 +- .../Cards/Scripts/Assassin/KnifeTrick.cs | 2 +- .../Basic/Cards/Scripts/Assassin/Stealth.cs | 2 +- .../Basic/Cards/Scripts/Assassin/Torture.cs | 2 +- .../Scripts/Assassin/WoundDeterioration.cs | 2 +- .../Cards/Scripts/Cleric/BlessedHolyWater.cs | 2 +- .../Cards/Scripts/Cleric/ChainBlessing.cs | 8 +- .../Cards/Scripts/Cleric/DivineProtection.cs | 6 +- .../Cards/Scripts/Cleric/DivinePunishment.cs | 8 +- .../Mods/Basic/Cards/Scripts/Cleric/Faith.cs | 2 +- .../Cards/Scripts/Cleric/FreedomOfMovement.cs | 2 +- .../Cards/Scripts/Cleric/LessRestoration.cs | 2 +- .../Cards/Scripts/Cleric/PrayerOfHealing.cs | 2 +- .../Basic/Cards/Scripts/Cleric/Sanctuary.cs | 2 +- .../Cards/Scripts/Cleric/ShieldOfDevotion.cs | 2 +- .../Cards/Scripts/Cleric/SpiritGuardian.cs | 2 +- .../MarshalOfUnderworld/ArmyOfTheDead.cs | 2 +- .../MarshalOfUnderworld/GreatswordSweep.cs | 6 +- .../MarshalOfUnderworld/HellfireBlast.cs | 8 +- .../NecromanticInfusion.cs | 2 +- .../MarshalOfUnderworld/WrathOfUnderworld.cs | 6 +- .../Mods/Basic/Cards/Scripts/General/Rouse.cs | 2 +- .../Basic/Cards/Scripts/General/Tactic.cs | 6 +- .../Basic/Cards/Scripts/General/Whimsy.cs | 2 +- .../Scripts/Knight/BattlefieldExperience.cs | 6 +- .../Cards/Scripts/Knight/BodyAsShield.cs | 4 +- .../Mods/Basic/Cards/Scripts/Knight/Cover.cs | 4 +- .../Basic/Cards/Scripts/Knight/DivineSmite.cs | 8 +- .../Basic/Cards/Scripts/Knight/EchoOfHonor.cs | 10 +- .../Scripts/Knight/EstablishFormation.cs | 4 +- .../Basic/Cards/Scripts/Knight/FirmBelief.cs | 12 +- .../Cards/Scripts/Knight/GuardianAura.cs | 2 +- .../Basic/Cards/Scripts/Knight/HeavySlash.cs | 8 +- .../Basic/Cards/Scripts/Knight/IronWall.cs | 2 +- .../Cards/Scripts/Knight/OathOfCourage.cs | 4 +- .../Basic/Cards/Scripts/Knight/OathOfHonor.cs | 2 +- .../Mods/Basic/Cards/Scripts/Knight/Smite.cs | 8 +- .../Cards/Scripts/Knight/UtmostStrike.cs | 10 +- .../Mods/Basic/Cards/Scripts/Mage/Abundant.cs | 8 +- .../Cards/Scripts/Mage/ArcaneMissiles.cs | 6 +- .../Scripts/Mage/ConcentratedSpellcasting.cs | 2 +- .../Basic/Cards/Scripts/Mage/ElectricClaw.cs | 6 +- .../Basic/Cards/Scripts/Mage/FarSighted.cs | 10 +- .../Mods/Basic/Cards/Scripts/Mage/FireBall.cs | 6 +- .../Cards/Scripts/Mage/FlameInscription.cs | 2 +- Assets/Mods/Basic/Cards/Scripts/Mage/Haste.cs | 2 +- .../Cards/Scripts/Mage/IdentifyWeakness.cs | 2 +- .../Mods/Basic/Cards/Scripts/Mage/Scorch.cs | 2 +- .../Basic/Cards/Scripts/Mage/WitchcraftRay.cs | 6 +- .../Cards/Scripts/ObsoleteGeneral/Bludgeon.cs | 8 +- .../Cards/Scripts/ObsoleteGeneral/Cohesion.cs | 16 +- .../ObsoleteGeneral/CommonHolyWater.cs | 6 +- .../Cards/Scripts/ObsoleteGeneral/Defense.cs | 4 +- .../Scripts/ObsoleteGeneral/DualStrike.cs | 10 +- .../Cards/Scripts/ObsoleteGeneral/Faint.cs | 6 +- .../ObsoleteGeneral/FightingInspiration.cs | 4 +- .../Cards/Scripts/ObsoleteGeneral/FireBolt.cs | 6 +- .../Cards/Scripts/ObsoleteGeneral/Guard.cs | 2 +- .../Scripts/ObsoleteGeneral/HiddenBlade.cs | 8 +- .../ObsoleteGeneral/HolyWaterPreparation.cs | 6 +- .../Scripts/ObsoleteGeneral/MudBarrier.cs | 4 +- .../Cards/Scripts/ObsoleteGeneral/Oblivion.cs | 10 +- .../Cards/Scripts/ObsoleteGeneral/Prick.cs | 8 +- .../Scripts/ObsoleteGeneral/RadiantBolt.cs | 8 +- .../Scripts/ObsoleteGeneral/RayOfFrost.cs | 6 +- .../ObsoleteGeneral/RecklessAssault.cs | 8 +- .../Scripts/ObsoleteGeneral/Recollection.cs | 6 +- .../Cards/Scripts/ObsoleteGeneral/Slash.cs | 8 +- .../Cards/Scripts/ObsoleteGeneral/Strike.cs | 6 +- .../ThinkingCountermeasures.cs | 2 +- .../Scripts/ObsoleteGeneral/WindBlade.cs | 10 +- .../CombatBuffs/Cleric/FreedomOfMovement.cs | 2 +- .../CombatBuffs/Mage/FlameInscription.cs | 2 +- .../Characters/Scripts/MarshalOfUnderworld.cs | 18 +- .../Base/Interpreters/CardTextInterpreter.cs | 8 +- .../MainGame/Card/CardAssistanceFunctions.cs | 282 +----------- .../MainGame/Card/CardBuff/BuffSubmodules.cs | 2 +- .../MainGame/Card/CardBuff/CardBuffBase.cs | 8 +- .../Card/CardBuff/CardCombatBuffBase.cs | 6 +- Assets/Scripts/MainGame/Card/CardInstance.cs | 90 +++- Assets/Scripts/MainGame/Card/CardLogicBase.cs | 423 ++++++++++++++---- .../MainGame/Card/CardMainFunctions.cs | 84 ++-- .../Card/CardSubmodules/AttributeSubmodule.cs | 4 +- .../CardSubmodules/CombatBuffSubmodule.cs | 4 +- .../Card/CardSubmodules/ContentSubmodule.cs | 4 +- .../Card/CardSubmodules/EventSubmodule.cs | 7 +- .../Card/CardSubmodules/PlaySubmodule.cs | 4 +- .../Card/CardSubmodules/WeightSubmodule.cs | 4 +- .../MainGame/Card/CardView/CardViewBase.cs | 36 +- .../HandCardView/HandCardView_Operations.cs | 50 +-- .../CardLogicComponent_Attack.cs | 4 +- .../CardLogicComponent_SelectCustomCards.cs | 2 +- .../CardLogicComponent_SelectHandCards.cs | 2 +- .../MainGame/Character/CharacterBase.cs | 5 +- .../CharacterBuff/CharacterCombatBuffBase.cs | 6 +- ...acterInstance.cs => CharacterLogicBase.cs} | 2 +- ...nce.cs.meta => CharacterLogicBase.cs.meta} | 0 .../Character/CharacterMainFunctions.cs | 24 +- .../CharacterSubmodules/DeckSubmodule.cs | 10 +- .../CharacterSubmodules/RecordSubmodule.cs | 2 +- .../Scripts/MainGame/Character/CombatNPC.cs | 13 +- .../Scripts/MainGame/Character/PlayerHero.cs | 16 +- .../Combat/CombatCharacterController.cs | 6 +- .../MainGame/Combat/CombatMainManager.cs | 18 +- .../MainGame/Commands/Cmd_DiscardCards.cs | 4 +- .../MainGame/Commands/Cmd_DrawCards.cs | 4 +- .../MainGame/Commands/Cmd_ExhaustCards.cs | 4 +- .../MainGame/Commands/Cmd_UsePowerCards.cs | 2 +- .../CustomCardSelectionInterface.cs | 8 +- .../HandCardSelectionInterface.cs | 14 +- .../UI/CombatMainPage/TeamSwitchButton.cs | 6 +- .../CommandQueue/CommandQueueManager.cs | 2 + 121 files changed, 838 insertions(+), 783 deletions(-) rename Assets/Scripts/MainGame/Character/{CharacterInstance.cs => CharacterLogicBase.cs} (89%) rename Assets/Scripts/MainGame/Character/{CharacterInstance.cs.meta => CharacterLogicBase.cs.meta} (100%) diff --git a/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/Basic_AblazeInPurgatory/AblazeInPurgatory.cs b/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/Basic_AblazeInPurgatory/AblazeInPurgatory.cs index ed5bd10e..6187dd00 100644 --- a/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/Basic_AblazeInPurgatory/AblazeInPurgatory.cs +++ b/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/Basic_AblazeInPurgatory/AblazeInPurgatory.cs @@ -12,24 +12,22 @@ namespace Continentis.Mods.Basic.Cards { public override void TargetingEffect(CharacterBase target) { - SetAttribute("DisplayHellfireStack", GetAttribute("HellfireStack")); + card.SetAttribute("DisplayHellfireStack", card.GetAttribute("HellfireStack")); } public override void UntargetingEffect() { - SetAttribute("DisplayHellfireStack", GetAttribute("HellfireStack")); + card.SetAttribute("DisplayHellfireStack", card.GetAttribute("HellfireStack")); } - - protected override List PlayEffect(List targetList) - { - base.PlayEffect(targetList); + public override List PlayEffect(List targetList) + { CommandGroup mainGroup = TargetListCommandGroup(targetList, ExecutionMode.Parallel, ExecutionMode.Parallel, new Cmd_ParamFunction(0.2f, target => { Debug.Log(target.data.className + " is ablaze in purgatory!"); - Basic_Hellfire buff = new Basic_Hellfire(GetAttribute("HellfireStack")); + Basic_Hellfire buff = new Basic_Hellfire(card.GetAttribute("HellfireStack")); buff.Apply(target, user, this); })); @@ -39,7 +37,7 @@ namespace Continentis.Mods.Basic.Cards public override void ApplyAttributeChangesByCard() { int offsetFromInt = user.GetAttribute("OffsetFromIntelligence"); - SetVariableAttribute("HellfireStack", offsetFromInt); + card.SetVariableAttribute("HellfireStack", offsetFromInt); } } } \ No newline at end of file diff --git a/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/Basic_SoulCleave/SoulCleave.cs b/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/Basic_SoulCleave/SoulCleave.cs index d6354b80..e4fe2b43 100644 --- a/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/Basic_SoulCleave/SoulCleave.cs +++ b/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/Basic_SoulCleave/SoulCleave.cs @@ -10,20 +10,20 @@ namespace Continentis.Mods.Basic.Cards { public class SoulCleave : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); AddLogicComponent(); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_ParamFunction(0.2f, target => { - int hurt = user.Attack(target, GetFinalDamage(target)).hurtDamage; + int hurt = user.Attack(target, GetTargetedFinalDamage(target)).hurtDamage; LogicComponent().LifeSteal(hurt); Basic_Hellfire hellfireBuff = target.combatBuffSubmodule.GetBuff(); @@ -33,9 +33,9 @@ namespace Continentis.Mods.Basic.Cards return new List { mainGroup }; } - public override int GetFinalDamage(CharacterBase target, List elementalTags = null) + public override int GetTargetedFinalDamage(CharacterBase target, List elementalTags = null) { - int damage = base.GetFinalDamage(target, elementalTags); + int damage = base.GetTargetedFinalDamage(target, elementalTags); Basic_Hellfire hellfireBuff = target.combatBuffSubmodule.GetBuff(); int hellfireStack = hellfireBuff != null ? hellfireBuff.unitedStackSubmodule.stackAmount : 0; damage += hellfireStack * 2; diff --git a/Assets/Mods/Basic/Cards/LogicComponents/CardLogicComponent_Protect.cs b/Assets/Mods/Basic/Cards/LogicComponents/CardLogicComponent_Protect.cs index 091a2ab8..75e44e2d 100644 --- a/Assets/Mods/Basic/Cards/LogicComponents/CardLogicComponent_Protect.cs +++ b/Assets/Mods/Basic/Cards/LogicComponents/CardLogicComponent_Protect.cs @@ -9,10 +9,10 @@ namespace Continentis.Mods.Basic.Cards { public void GenerateProtection(CharacterBase protector, CharacterBase target, int roundCount) { - Protected protectedBuff = card.CreateCharacterBuff(); - protectedBuff.Apply(target, user, card); - Protecting protectingBuff = card.CreateCharacterBuff(target, roundCount, protectedBuff); - protectingBuff.Apply(protector, user, card); + Protected protectedBuff = mainLogic.CreateCharacterBuff(); + protectedBuff.Apply(target, user, mainLogic); + Protecting protectingBuff = mainLogic.CreateCharacterBuff(target, roundCount, protectedBuff); + protectingBuff.Apply(protector, user, mainLogic); } } } \ No newline at end of file diff --git a/Assets/Mods/Basic/Cards/Scripts/Assassin/Ambush.cs b/Assets/Mods/Basic/Cards/Scripts/Assassin/Ambush.cs index 4a1e50bb..f59fda4f 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Assassin/Ambush.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Assassin/Ambush.cs @@ -9,12 +9,12 @@ namespace Continentis.Mods.Basic.Cards.Assassin { public class Ambush : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential); mainGroup.AddCommand(new Cmd_PlayAnimation(user.characterView, "Skill")); diff --git a/Assets/Mods/Basic/Cards/Scripts/Assassin/AmbushStance.cs b/Assets/Mods/Basic/Cards/Scripts/Assassin/AmbushStance.cs index f5a939c9..f7fe359c 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Assassin/AmbushStance.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Assassin/AmbushStance.cs @@ -8,7 +8,7 @@ namespace Continentis.Mods.Basic.Cards.Assassin { public class AmbushStance : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_ParamFunction(0.05f, target => diff --git a/Assets/Mods/Basic/Cards/Scripts/Assassin/Backstab.cs b/Assets/Mods/Basic/Cards/Scripts/Assassin/Backstab.cs index 47eae9c8..48eb361e 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Assassin/Backstab.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Assassin/Backstab.cs @@ -9,7 +9,8 @@ namespace Continentis.Mods.Basic.Cards.Assassin public class Backstab : CardLogicBase { private int _sharpnessCount = 0; - protected override List PlayEffect(List targetList) + + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup( targetList, new Cmd_PlayAnimation(user.characterView, "Attack"), @@ -22,7 +23,7 @@ namespace Continentis.Mods.Basic.Cards.Assassin { _sharpnessCount = user.combatBuffSubmodule.GetBuff().unitedStackSubmodule.stackAmount; } - user.Attack(target, GetFinalDamage(target)); + user.Attack(target, GetTargetedFinalDamage(target)); }), new Cmd_ParamFunction(target => { diff --git a/Assets/Mods/Basic/Cards/Scripts/Assassin/BladeOfFear.cs b/Assets/Mods/Basic/Cards/Scripts/Assassin/BladeOfFear.cs index 1b928248..2f1b9399 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Assassin/BladeOfFear.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Assassin/BladeOfFear.cs @@ -9,12 +9,12 @@ namespace Continentis.Mods.Basic.Cards.Assassin { public class BladeOfFear : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); @@ -22,7 +22,7 @@ namespace Continentis.Mods.Basic.Cards.Assassin new Cmd_PlayAnimation(user.characterView, "Attack"), new Cmd_ParamFunction(0.2f, target => { - user.Attack(target, GetFinalDamage(target)); + user.Attack(target, GetTargetedFinalDamage(target)); })); mainGroup.AddCommand(new Cmd_Function(() => { diff --git a/Assets/Mods/Basic/Cards/Scripts/Assassin/CompoundPoison.cs b/Assets/Mods/Basic/Cards/Scripts/Assassin/CompoundPoison.cs index e4aeccd3..86f7e2b3 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Assassin/CompoundPoison.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Assassin/CompoundPoison.cs @@ -10,7 +10,7 @@ namespace Continentis.Mods.Basic.Cards.Assassin { public class CompoundPoison : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_ParamFunction(0.05f, target => diff --git a/Assets/Mods/Basic/Cards/Scripts/Assassin/ExtremePain.cs b/Assets/Mods/Basic/Cards/Scripts/Assassin/ExtremePain.cs index a229754e..73d7c862 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Assassin/ExtremePain.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Assassin/ExtremePain.cs @@ -8,7 +8,7 @@ namespace Continentis.Mods.Basic.Cards.Assassin { public class ExtremePain : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Attack"), @@ -16,15 +16,15 @@ namespace Continentis.Mods.Basic.Cards.Assassin new Cmd_SpawnVFX("VFX_Basic_RedImpact"), new Cmd_ParamFunction(target => { - user.Attack(target, GetFinalDamage(target)); + user.Attack(target, GetTargetedFinalDamage(target)); })); return new List { mainGroup }; } - public override int GetFinalDamage(CharacterBase target, List elementalTags = null) + public override int GetTargetedFinalDamage(CharacterBase target, List elementalTags = null) { - var baseDamage = base.GetFinalDamage(target, elementalTags); + var baseDamage = base.GetTargetedFinalDamage(target, elementalTags); var extraDamage = 0; if (target.combatBuffSubmodule.HasBuff()) { diff --git a/Assets/Mods/Basic/Cards/Scripts/Assassin/FlashTerror.cs b/Assets/Mods/Basic/Cards/Scripts/Assassin/FlashTerror.cs index e508faad..77e167e1 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Assassin/FlashTerror.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Assassin/FlashTerror.cs @@ -8,7 +8,7 @@ namespace Continentis.Mods.Basic.Cards.Assassin { public class FlashTerror : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_ParamFunction(0.01f, target => diff --git a/Assets/Mods/Basic/Cards/Scripts/Assassin/KnifeTrick.cs b/Assets/Mods/Basic/Cards/Scripts/Assassin/KnifeTrick.cs index f8ada6e8..82e9e472 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Assassin/KnifeTrick.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Assassin/KnifeTrick.cs @@ -8,7 +8,7 @@ namespace Continentis.Mods.Basic.Cards.Assassin { public class KnifeTrick : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential, new Cmd_PlayAnimation(user.characterView, "Skill"), diff --git a/Assets/Mods/Basic/Cards/Scripts/Assassin/Stealth.cs b/Assets/Mods/Basic/Cards/Scripts/Assassin/Stealth.cs index 047df990..aa2174ac 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Assassin/Stealth.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Assassin/Stealth.cs @@ -8,7 +8,7 @@ namespace Continentis.Mods.Basic.Cards.Assassin { public class Stealth : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { var mainGroup = new CommandGroup(ExecutionMode.Sequential); mainGroup.AddCommand(new Cmd_Function(() => diff --git a/Assets/Mods/Basic/Cards/Scripts/Assassin/Torture.cs b/Assets/Mods/Basic/Cards/Scripts/Assassin/Torture.cs index 6b00c7fd..3190492b 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Assassin/Torture.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Assassin/Torture.cs @@ -9,7 +9,7 @@ namespace Continentis.Mods.Basic.Cards.Assassin { public class Torture : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandQueueManager.Instance.AddCommand(user.deckSubmodule.DrawCards(GetAttribute("DrawCount"))); CommandGroup mainGroup = TargetListCommandGroup(targetList, diff --git a/Assets/Mods/Basic/Cards/Scripts/Assassin/WoundDeterioration.cs b/Assets/Mods/Basic/Cards/Scripts/Assassin/WoundDeterioration.cs index ca99e209..81947162 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Assassin/WoundDeterioration.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Assassin/WoundDeterioration.cs @@ -8,7 +8,7 @@ namespace Continentis.Mods.Basic.Cards.Assassin { public class WoundDeterioration : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_ParamFunction(0.05f, target => diff --git a/Assets/Mods/Basic/Cards/Scripts/Cleric/BlessedHolyWater.cs b/Assets/Mods/Basic/Cards/Scripts/Cleric/BlessedHolyWater.cs index eba205b7..e3c0ed55 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Cleric/BlessedHolyWater.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Cleric/BlessedHolyWater.cs @@ -9,7 +9,7 @@ namespace Continentis.Mods.Basic.Cards.Cleric { public class BlessedHolyWater : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential); mainGroup.AddCommand(new Cmd_PlayAnimation(user.characterView, "Skill")); diff --git a/Assets/Mods/Basic/Cards/Scripts/Cleric/ChainBlessing.cs b/Assets/Mods/Basic/Cards/Scripts/Cleric/ChainBlessing.cs index 39504e09..22c4da77 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Cleric/ChainBlessing.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Cleric/ChainBlessing.cs @@ -11,12 +11,12 @@ namespace Continentis.Mods.Basic.Cards.Cleric { public class ChainBlessing : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential); mainGroup.AddCommand(new Cmd_PlayAnimation(user.characterView, "Skill")); @@ -26,7 +26,7 @@ namespace Continentis.Mods.Basic.Cards.Cleric var powerCards = new List(); foreach (var card in user.deckSubmodule.HandPile) { - if (card.cardLogic.contentSubmodule.cardType == MainGame.Card.CardType.Power) + if (card.contentSubmodule.cardType == MainGame.Card.CardType.Power) { powerCards.Add(card); } @@ -37,7 +37,7 @@ namespace Continentis.Mods.Basic.Cards.Cleric var copyCount = GetAttribute("CopyCount"); for (int i = 0; i < copyCount; i++) { - CardInstance newCard = CardInstance.GenerateCardInstance(randomPowerCard.cardLogic, user, "Hand"); + CardInstance newCard = CardInstance.GenerateCardInstance(randomPowerCard, user, "Hand"); newCard.cardLogic.SetAttribute("StaminaCost", 0); newCard.GenerateHandCardView("Hand"); } diff --git a/Assets/Mods/Basic/Cards/Scripts/Cleric/DivineProtection.cs b/Assets/Mods/Basic/Cards/Scripts/Cleric/DivineProtection.cs index fa2ff0bb..7c46bbc1 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Cleric/DivineProtection.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Cleric/DivineProtection.cs @@ -13,7 +13,7 @@ namespace Continentis.Mods.Basic { public class DivineProtection : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); @@ -26,8 +26,8 @@ namespace Continentis.Mods.Basic mainGroup.AddCommand(new Cmd_Function(() => { - CreateCardBuff(GetAttribute("BlockStack")).Apply(this, user, this); - this.contentSubmodule.dirtyMark = true; + CreateCardBuff(GetAttribute("BlockStack")).Apply(card, user, this); + card.contentSubmodule.dirtyMark = true; })); return new List { mainGroup }; diff --git a/Assets/Mods/Basic/Cards/Scripts/Cleric/DivinePunishment.cs b/Assets/Mods/Basic/Cards/Scripts/Cleric/DivinePunishment.cs index b5829ef4..d16c3dd6 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Cleric/DivinePunishment.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Cleric/DivinePunishment.cs @@ -14,7 +14,7 @@ namespace Continentis.Mods.Basic { public class DivinePunishment : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); @@ -22,13 +22,13 @@ namespace Continentis.Mods.Basic new Cmd_PlayAnimation(user.characterView, "Attack"), new Cmd_ParamFunction(0.2f, target => { - user.Attack(target, GetFinalDamage(target)); + user.Attack(target, GetTargetedFinalDamage(target)); })); mainGroup.AddCommand(new Cmd_Function(() => { - CreateCardBuff(GetAttribute("DamageStack")).Apply(this, user, this); - this.contentSubmodule.dirtyMark = true; + CreateCardBuff(GetAttribute("DamageStack")).Apply(card, user, this); + card.contentSubmodule.dirtyMark = true; })); return new List { mainGroup }; diff --git a/Assets/Mods/Basic/Cards/Scripts/Cleric/Faith.cs b/Assets/Mods/Basic/Cards/Scripts/Cleric/Faith.cs index 9fb0c7bd..f528c13e 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Cleric/Faith.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Cleric/Faith.cs @@ -10,7 +10,7 @@ namespace Continentis.Mods.Basic.Cards.Cleric { public class Faith : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = user.deckSubmodule.DrawCards(GetAttribute("DrawCount")); return new List { mainGroup }; diff --git a/Assets/Mods/Basic/Cards/Scripts/Cleric/FreedomOfMovement.cs b/Assets/Mods/Basic/Cards/Scripts/Cleric/FreedomOfMovement.cs index 8b399d10..41b64eab 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Cleric/FreedomOfMovement.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Cleric/FreedomOfMovement.cs @@ -10,7 +10,7 @@ namespace Continentis.Mods.Basic.Cards.Cleric { public class FreedomOfMovement : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_ParamFunction(0.01f, target => diff --git a/Assets/Mods/Basic/Cards/Scripts/Cleric/LessRestoration.cs b/Assets/Mods/Basic/Cards/Scripts/Cleric/LessRestoration.cs index 73b645ca..ef8d3446 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Cleric/LessRestoration.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Cleric/LessRestoration.cs @@ -9,7 +9,7 @@ namespace Continentis.Mods.Basic.Cards.Cleric { public class LessRestoration : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Skill"), diff --git a/Assets/Mods/Basic/Cards/Scripts/Cleric/PrayerOfHealing.cs b/Assets/Mods/Basic/Cards/Scripts/Cleric/PrayerOfHealing.cs index 2b9222fb..b30159b9 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Cleric/PrayerOfHealing.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Cleric/PrayerOfHealing.cs @@ -10,7 +10,7 @@ namespace Continentis.Mods.Basic.Cards.Cleric { public class PrayerOfHealing : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Skill"), diff --git a/Assets/Mods/Basic/Cards/Scripts/Cleric/Sanctuary.cs b/Assets/Mods/Basic/Cards/Scripts/Cleric/Sanctuary.cs index 9821099e..5a74c988 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Cleric/Sanctuary.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Cleric/Sanctuary.cs @@ -11,7 +11,7 @@ namespace Continentis.Mods.Basic.Cards.Cleric { public class Sanctuary : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Skill"), diff --git a/Assets/Mods/Basic/Cards/Scripts/Cleric/ShieldOfDevotion.cs b/Assets/Mods/Basic/Cards/Scripts/Cleric/ShieldOfDevotion.cs index cb7ef734..4018be71 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Cleric/ShieldOfDevotion.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Cleric/ShieldOfDevotion.cs @@ -11,7 +11,7 @@ namespace Continentis.Mods.Basic.Cards.Cleric { public class ShieldOfDevotion : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_ParamFunction(0.01f, target => diff --git a/Assets/Mods/Basic/Cards/Scripts/Cleric/SpiritGuardian.cs b/Assets/Mods/Basic/Cards/Scripts/Cleric/SpiritGuardian.cs index 15b9883a..97381338 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Cleric/SpiritGuardian.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Cleric/SpiritGuardian.cs @@ -10,7 +10,7 @@ namespace Continentis.Mods.Basic.Cards.Cleric { public class SpiritGuardian : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_ParamFunction(0.01f, target => diff --git a/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/ArmyOfTheDead.cs b/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/ArmyOfTheDead.cs index a54bfc10..ab217025 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/ArmyOfTheDead.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/ArmyOfTheDead.cs @@ -10,7 +10,7 @@ namespace Continentis.Mods.Basic.Cards { public class ArmyOfTheDead : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); diff --git a/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/GreatswordSweep.cs b/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/GreatswordSweep.cs index 72d4909f..4fa50d65 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/GreatswordSweep.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/GreatswordSweep.cs @@ -9,12 +9,12 @@ namespace Continentis.Mods.Basic.Cards { public class GreatswordSweep : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = new CommandGroup(new Cmd_PlayAnimation(user.characterView, "Attack")); @@ -22,7 +22,7 @@ namespace Continentis.Mods.Basic.Cards ExecutionMode.Parallel, ExecutionMode.Sequential, new Cmd_ParamFunction(target => { - user.Attack(target, GetFinalDamage(target)); + user.Attack(target, GetTargetedFinalDamage(target)); }))); return new List { mainGroup }; diff --git a/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/HellfireBlast.cs b/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/HellfireBlast.cs index 17b9a94c..34e2e3c5 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/HellfireBlast.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/HellfireBlast.cs @@ -10,17 +10,17 @@ namespace Continentis.Mods.Basic.Cards { public class HellfireBlast : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - - protected override List PlayEffect(List targetList) + + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_ParamFunction(0.2f, target => { - user.Attack(target, GetFinalDamage(target)); + user.Attack(target, GetTargetedFinalDamage(target)); CreateCharacterBuff(GetAttribute("BuffStack_Burn")).Apply(target, user, this); })); diff --git a/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/NecromanticInfusion.cs b/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/NecromanticInfusion.cs index 92ab4f38..0e787ce9 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/NecromanticInfusion.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/NecromanticInfusion.cs @@ -10,7 +10,7 @@ namespace Continentis.Mods.Basic.Cards { public class NecromanticInfusion : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup main = new CommandGroup(new Cmd_Function(() => { diff --git a/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/WrathOfUnderworld.cs b/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/WrathOfUnderworld.cs index 4257e4ed..1c80e1cb 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/WrathOfUnderworld.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/WrathOfUnderworld.cs @@ -11,18 +11,18 @@ namespace Continentis.Mods.Basic.Cards { public class WrathOfUnderworld : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup singleTargetGroup = new CommandGroup(ExecutionMode.Parallel, new Cmd_PlayAnimation(user.characterView, "Attack"), new Cmd_ParamFunction(0.4f, target => { - user.Attack(target, GetFinalDamage(target)); + user.Attack(target, GetTargetedFinalDamage(target)); }) ); diff --git a/Assets/Mods/Basic/Cards/Scripts/General/Rouse.cs b/Assets/Mods/Basic/Cards/Scripts/General/Rouse.cs index 1706fba8..5fdf51e4 100644 --- a/Assets/Mods/Basic/Cards/Scripts/General/Rouse.cs +++ b/Assets/Mods/Basic/Cards/Scripts/General/Rouse.cs @@ -8,7 +8,7 @@ namespace Continentis.Mods.Basic.Cards { public class Rouse : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential, new Cmd_PlayAnimation(user.characterView, "Skill"), diff --git a/Assets/Mods/Basic/Cards/Scripts/General/Tactic.cs b/Assets/Mods/Basic/Cards/Scripts/General/Tactic.cs index 39b9d08e..be6c558b 100644 --- a/Assets/Mods/Basic/Cards/Scripts/General/Tactic.cs +++ b/Assets/Mods/Basic/Cards/Scripts/General/Tactic.cs @@ -10,12 +10,12 @@ namespace Continentis.Mods.Basic.Cards { public class Tactic : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent().SetEffect(SelectEffect); } - - protected override List PlayEffect(List targetList) + + public override List PlayEffect(List targetList) { CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential, new Cmd_PlayAnimation(user.characterView, "Skill")); diff --git a/Assets/Mods/Basic/Cards/Scripts/General/Whimsy.cs b/Assets/Mods/Basic/Cards/Scripts/General/Whimsy.cs index 3a78764b..00a53568 100644 --- a/Assets/Mods/Basic/Cards/Scripts/General/Whimsy.cs +++ b/Assets/Mods/Basic/Cards/Scripts/General/Whimsy.cs @@ -9,7 +9,7 @@ namespace Continentis.Mods.Basic.Cards { public class Whimsy : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential, new Cmd_PlayAnimation(user.characterView, "Skill"), diff --git a/Assets/Mods/Basic/Cards/Scripts/Knight/BattlefieldExperience.cs b/Assets/Mods/Basic/Cards/Scripts/Knight/BattlefieldExperience.cs index 66029fe4..34f5bd33 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Knight/BattlefieldExperience.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Knight/BattlefieldExperience.cs @@ -9,12 +9,12 @@ namespace Continentis.Mods.Basic.Cards { public class BattlefieldExperience : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - - protected override List PlayEffect(List targetList) + + public override List PlayEffect(List targetList) { CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential); mainGroup.AddCommand(new Cmd_PlayAnimation(user.characterView, "Skill")); diff --git a/Assets/Mods/Basic/Cards/Scripts/Knight/BodyAsShield.cs b/Assets/Mods/Basic/Cards/Scripts/Knight/BodyAsShield.cs index 2008ee8a..128171a8 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Knight/BodyAsShield.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Knight/BodyAsShield.cs @@ -10,12 +10,12 @@ namespace Continentis.Mods.Basic.Cards { public class BodyAsShield : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Skill"), diff --git a/Assets/Mods/Basic/Cards/Scripts/Knight/Cover.cs b/Assets/Mods/Basic/Cards/Scripts/Knight/Cover.cs index eba0d24e..ddeab661 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Knight/Cover.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Knight/Cover.cs @@ -10,13 +10,13 @@ namespace Continentis.Mods.Basic.Cards { public class Cover : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); AddLogicComponent(); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Skill"), diff --git a/Assets/Mods/Basic/Cards/Scripts/Knight/DivineSmite.cs b/Assets/Mods/Basic/Cards/Scripts/Knight/DivineSmite.cs index 4bccfdbb..b74fbe80 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Knight/DivineSmite.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Knight/DivineSmite.cs @@ -11,19 +11,19 @@ namespace Continentis.Mods.Basic.Cards { public class DivineSmite : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); AddLogicComponent(); } - - protected override List PlayEffect(List targetList) + + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Attack"), new Cmd_PlaySFX("SFX_Basic_SwordStrike"), new Cmd_SpawnVFX("VFX_Basic_RedImpact"), - new Cmd_ParamFunction(target => user.Attack(target, GetFinalDamage(target)))); + new Cmd_ParamFunction(target => user.Attack(target, GetTargetedFinalDamage(target)))); foreach (CharacterBase protectTarget in CombatMainManager.Instance.characterController.GetAllAllies(user)) { diff --git a/Assets/Mods/Basic/Cards/Scripts/Knight/EchoOfHonor.cs b/Assets/Mods/Basic/Cards/Scripts/Knight/EchoOfHonor.cs index 444d63b4..d58eae2d 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Knight/EchoOfHonor.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Knight/EchoOfHonor.cs @@ -9,20 +9,20 @@ namespace Continentis.Mods.Basic.Cards { public class EchoOfHonor : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - - protected override List PlayEffect(List targetList) + + public override List PlayEffect(List targetList) { CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential); mainGroup.AddCommand(new Cmd_PlayAnimation(user.characterView, "Skill")); mainGroup.AddCommand(new Cmd_Function(() => { - if (user.deckSubmodule.HandPile.Exclude(this.cardInstance).TryGetRandom(out CardInstance randomHandCard)) + if (user.deckSubmodule.HandPile.Exclude(this.card).TryGetRandom(out CardInstance randomHandCard)) { - CardInstance newCard = CardInstance.GenerateCardInstance(randomHandCard.cardLogic, user, "Hand"); + CardInstance newCard = CardInstance.GenerateCardInstance(randomHandCard, user, "Hand"); newCard.cardLogic.SetAttribute("StaminaCost", 0); newCard.GenerateHandCardView("Hand"); } diff --git a/Assets/Mods/Basic/Cards/Scripts/Knight/EstablishFormation.cs b/Assets/Mods/Basic/Cards/Scripts/Knight/EstablishFormation.cs index 3ea10ac5..3a701bdc 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Knight/EstablishFormation.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Knight/EstablishFormation.cs @@ -9,12 +9,12 @@ namespace Continentis.Mods.Basic.Cards { public class EstablishFormation : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); diff --git a/Assets/Mods/Basic/Cards/Scripts/Knight/FirmBelief.cs b/Assets/Mods/Basic/Cards/Scripts/Knight/FirmBelief.cs index e1733e46..4b7b61a5 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Knight/FirmBelief.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Knight/FirmBelief.cs @@ -9,19 +9,19 @@ namespace Continentis.Mods.Basic.Cards { public class FirmBelief : CardLogicBase { - public override void Initialize() + public override void Initialize(CardInstance card) { - base.Initialize(); - this.eventSubmodule.onInitiativeDiscard.Add("FirmBelief_PlayWhenDiscard", - new PrioritizedCheckAndEffect(() => true, () => this.Play(new List(), user))); + base.Initialize(card); + this.card.eventSubmodule.onInitiativeDiscard.Add("FirmBelief_PlayWhenDiscard", + new PrioritizedCheckAndEffect(() => true, () => card.Play(new List(), user))); } - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = SingleCommandGroup( new Cmd_PlayAnimation(user.characterView, "Skill"), diff --git a/Assets/Mods/Basic/Cards/Scripts/Knight/GuardianAura.cs b/Assets/Mods/Basic/Cards/Scripts/Knight/GuardianAura.cs index 6e312250..d30cfb70 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Knight/GuardianAura.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Knight/GuardianAura.cs @@ -9,7 +9,7 @@ namespace Continentis.Mods.Basic.Cards { public class GuardianAura : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential, new Cmd_PlayAnimation(user.characterView, "Skill"), diff --git a/Assets/Mods/Basic/Cards/Scripts/Knight/HeavySlash.cs b/Assets/Mods/Basic/Cards/Scripts/Knight/HeavySlash.cs index daee7e5c..2f936b1e 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Knight/HeavySlash.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Knight/HeavySlash.cs @@ -10,12 +10,12 @@ namespace Continentis.Mods.Basic.Cards { public class HeavySlash : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - - protected override List PlayEffect(List targetList) + + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Attack"), @@ -23,7 +23,7 @@ namespace Continentis.Mods.Basic.Cards new Cmd_SpawnVFX("VFX_Basic_RedImpact"), new Cmd_ParamFunction(target => { - user.Attack(target, GetFinalDamage(target)); + user.Attack(target, GetTargetedFinalDamage(target)); })); //对目标造成伤害 mainGroup.AddCommand(new Cmd_Function(() => diff --git a/Assets/Mods/Basic/Cards/Scripts/Knight/IronWall.cs b/Assets/Mods/Basic/Cards/Scripts/Knight/IronWall.cs index 587a5715..064c9114 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Knight/IronWall.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Knight/IronWall.cs @@ -10,7 +10,7 @@ namespace Continentis.Mods.Basic.Cards { public class IronWall : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential, new Cmd_PlayAnimation(user.characterView, "Skill"), diff --git a/Assets/Mods/Basic/Cards/Scripts/Knight/OathOfCourage.cs b/Assets/Mods/Basic/Cards/Scripts/Knight/OathOfCourage.cs index 4fe91b5b..41437dde 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Knight/OathOfCourage.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Knight/OathOfCourage.cs @@ -10,12 +10,12 @@ namespace Continentis.Mods.Basic.Cards { public class OathOfCourage : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Skill"), diff --git a/Assets/Mods/Basic/Cards/Scripts/Knight/OathOfHonor.cs b/Assets/Mods/Basic/Cards/Scripts/Knight/OathOfHonor.cs index f8b7720e..c9f29dbf 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Knight/OathOfHonor.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Knight/OathOfHonor.cs @@ -9,7 +9,7 @@ namespace Continentis.Mods.Basic.Cards { public class OathOfHonor : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential, new Cmd_PlayAnimation(user.characterView, "Skill"), diff --git a/Assets/Mods/Basic/Cards/Scripts/Knight/Smite.cs b/Assets/Mods/Basic/Cards/Scripts/Knight/Smite.cs index af7f7177..a0e09c42 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Knight/Smite.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Knight/Smite.cs @@ -10,12 +10,12 @@ namespace Continentis.Mods.Basic.Cards { public class Smite : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - - protected override List PlayEffect(List targetList) + + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Attack"), @@ -23,7 +23,7 @@ namespace Continentis.Mods.Basic.Cards new Cmd_SpawnVFX("VFX_Basic_RedImpact"), new Cmd_ParamFunction(target => { - user.Attack(target, GetFinalDamage(target)); + user.Attack(target, GetTargetedFinalDamage(target)); CreateCharacterBuff(GetAttribute("WeakCount")).Apply(target, user, this); })); diff --git a/Assets/Mods/Basic/Cards/Scripts/Knight/UtmostStrike.cs b/Assets/Mods/Basic/Cards/Scripts/Knight/UtmostStrike.cs index a89e52f7..62dce43d 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Knight/UtmostStrike.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Knight/UtmostStrike.cs @@ -9,13 +9,13 @@ namespace Continentis.Mods.Basic.Cards { public class UtmostStrike : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); AddLogicComponent().SetCondition(SelectCondition).SetEffect(SelectEffect); } - - protected override List PlayEffect(List targetList) + + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Attack"), @@ -23,7 +23,7 @@ namespace Continentis.Mods.Basic.Cards new Cmd_SpawnVFX("VFX_Basic_RedImpact"), new Cmd_ParamFunction(target => { - user.Attack(target, GetFinalDamage(target)); + user.Attack(target, GetTargetedFinalDamage(target)); })); //对目标造成伤害 LogicComponent().AddSelectionCommands(ref mainGroup); @@ -38,7 +38,7 @@ namespace Continentis.Mods.Basic.Cards private bool SelectCondition(CardInstance card) { - return card.cardLogic.contentSubmodule.cardType is not CardType.Attack; + return card.contentSubmodule.cardType is not CardType.Attack; } private void SelectEffect(CardInstance card) diff --git a/Assets/Mods/Basic/Cards/Scripts/Mage/Abundant.cs b/Assets/Mods/Basic/Cards/Scripts/Mage/Abundant.cs index 4a60cd8e..05b287b5 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Mage/Abundant.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Mage/Abundant.cs @@ -13,12 +13,12 @@ namespace Continentis.Mods.Basic { public class Abundant : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent().SetCondition(SelectCondition).SetEffect(SelectEffect); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential, new Cmd_PlayAnimation(user.characterView, "Skill")); @@ -29,12 +29,12 @@ namespace Continentis.Mods.Basic private bool SelectCondition(CardInstance card) { - return card.cardLogic.contentSubmodule.cardType is CardType.Attack && card.cardLogic.HasKeyword("Magic"); + return card.contentSubmodule.cardType is CardType.Attack && card.HasKeyword("Magic"); } private void SelectEffect(CardInstance card) { - CreateCardBuff(GetAttribute("BuffStack_Abundant")).Apply(card.cardLogic, user, this); + CreateCardBuff(GetAttribute("BuffStack_Abundant")).Apply(card, user, this); } } } diff --git a/Assets/Mods/Basic/Cards/Scripts/Mage/ArcaneMissiles.cs b/Assets/Mods/Basic/Cards/Scripts/Mage/ArcaneMissiles.cs index 9c584758..d39adedc 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Mage/ArcaneMissiles.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Mage/ArcaneMissiles.cs @@ -9,12 +9,12 @@ namespace Continentis.Mods.Basic.Cards { public class ArcaneMissiles : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); @@ -24,7 +24,7 @@ namespace Continentis.Mods.Basic.Cards { templates.Add(new Cmd_ParamFunction(0.4f, target => { - user.Attack(target, GetFinalDamage(target)); + user.Attack(target, GetTargetedFinalDamage(target)); Debug.Log("攻击命令触发"); })); } diff --git a/Assets/Mods/Basic/Cards/Scripts/Mage/ConcentratedSpellcasting.cs b/Assets/Mods/Basic/Cards/Scripts/Mage/ConcentratedSpellcasting.cs index 395fe43c..0c84de56 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Mage/ConcentratedSpellcasting.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Mage/ConcentratedSpellcasting.cs @@ -10,7 +10,7 @@ namespace Continentis.Mods.Basic.Cards { public class ConcentratedSpellcasting : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential, new Cmd_PlayAnimation(user.characterView, "Skill"), diff --git a/Assets/Mods/Basic/Cards/Scripts/Mage/ElectricClaw.cs b/Assets/Mods/Basic/Cards/Scripts/Mage/ElectricClaw.cs index f4b4f1b8..bf5b14a3 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Mage/ElectricClaw.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Mage/ElectricClaw.cs @@ -10,18 +10,18 @@ namespace Continentis.Mods.Basic.Cards { public class ElectricClaw : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Attack"), new Cmd_ParamFunction(0.2f, target => { - user.Attack(target, GetFinalDamage(target)); + user.Attack(target, GetTargetedFinalDamage(target)); })); mainGroup.AddCommand(new Cmd_Function(()=> diff --git a/Assets/Mods/Basic/Cards/Scripts/Mage/FarSighted.cs b/Assets/Mods/Basic/Cards/Scripts/Mage/FarSighted.cs index 89953402..27500c38 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Mage/FarSighted.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Mage/FarSighted.cs @@ -10,12 +10,12 @@ namespace Continentis.Mods.Basic.Cards { public class FarSighted : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent().SetEffect(SelectEffect); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential); @@ -27,9 +27,9 @@ namespace Continentis.Mods.Basic.Cards private void SelectEffect(CardInstance card) { - card.cardLogic.contentSubmodule.keywords.Add("Retain"); - card.cardLogic.contentSubmodule.originalFunctionText += " + $Keyword(\"Retain\")"; - card.cardLogic.contentSubmodule.dirtyMark = true; + card.contentSubmodule.keywords.Add("Retain"); + card.contentSubmodule.originalFunctionText += " + $Keyword(\"Retain\")"; + card.contentSubmodule.dirtyMark = true; } } } \ No newline at end of file diff --git a/Assets/Mods/Basic/Cards/Scripts/Mage/FireBall.cs b/Assets/Mods/Basic/Cards/Scripts/Mage/FireBall.cs index 9489c5f6..0630a2be 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Mage/FireBall.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Mage/FireBall.cs @@ -10,18 +10,18 @@ namespace Continentis.Mods.Basic.Cards { public class FireBall : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Attack"), new Cmd_ParamFunction(0.2f, target => { - user.Attack(target, GetFinalDamage(target)); + user.Attack(target, GetTargetedFinalDamage(target)); CreateCharacterBuff(GetAttribute("BuffStack_Burn")).Apply(target, user, this); })); diff --git a/Assets/Mods/Basic/Cards/Scripts/Mage/FlameInscription.cs b/Assets/Mods/Basic/Cards/Scripts/Mage/FlameInscription.cs index f5a3dc7c..faa47572 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Mage/FlameInscription.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Mage/FlameInscription.cs @@ -9,7 +9,7 @@ namespace Continentis.Mods.Basic.Cards { public class FlameInscription : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential, new Cmd_PlayAnimation(user.characterView, "Skill"), diff --git a/Assets/Mods/Basic/Cards/Scripts/Mage/Haste.cs b/Assets/Mods/Basic/Cards/Scripts/Mage/Haste.cs index 6470a9a1..9cd763d4 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Mage/Haste.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Mage/Haste.cs @@ -9,7 +9,7 @@ namespace Continentis.Mods.Basic.Cards { public class Haste : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential, new Cmd_PlayAnimation(user.characterView, "Skill"), diff --git a/Assets/Mods/Basic/Cards/Scripts/Mage/IdentifyWeakness.cs b/Assets/Mods/Basic/Cards/Scripts/Mage/IdentifyWeakness.cs index 8cd7521b..0433cc04 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Mage/IdentifyWeakness.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Mage/IdentifyWeakness.cs @@ -10,7 +10,7 @@ namespace Continentis.Mods.Basic.Cards { public class IdentifyWeakness : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Skill"), diff --git a/Assets/Mods/Basic/Cards/Scripts/Mage/Scorch.cs b/Assets/Mods/Basic/Cards/Scripts/Mage/Scorch.cs index a4e71a56..7f5c772a 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Mage/Scorch.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Mage/Scorch.cs @@ -10,7 +10,7 @@ namespace Continentis.Mods.Basic.Cards { public class Scorch : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Skill"), diff --git a/Assets/Mods/Basic/Cards/Scripts/Mage/WitchcraftRay.cs b/Assets/Mods/Basic/Cards/Scripts/Mage/WitchcraftRay.cs index cf917063..b8ebc2ca 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Mage/WitchcraftRay.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Mage/WitchcraftRay.cs @@ -9,18 +9,18 @@ namespace Continentis.Mods.Basic.Cards { public class WitchcraftRay : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Attack"), new Cmd_ParamFunction(target => { - user.Attack(target, GetFinalDamage(target)); + user.Attack(target, GetTargetedFinalDamage(target)); })); return new List { mainGroup }; diff --git a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Bludgeon.cs b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Bludgeon.cs index 539f709f..c7c9cc4e 100644 --- a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Bludgeon.cs +++ b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Bludgeon.cs @@ -10,12 +10,12 @@ namespace Continentis.Mods.Basic.Cards { public class Bludgeon : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - - protected override List PlayEffect(List targetList) + + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, ExecutionMode.Sequential, @@ -23,7 +23,7 @@ namespace Continentis.Mods.Basic.Cards new Cmd_PlayAnimation(user.characterView, "Attack"), new Cmd_ParamFunction(0.1f, target => { - user.Attack(target, GetFinalDamage(target)); + user.Attack(target, GetTargetedFinalDamage(target)); CreateCharacterBuff().Apply(target, user, this); })); diff --git a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Cohesion.cs b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Cohesion.cs index d05bcf9a..0a06ff68 100644 --- a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Cohesion.cs +++ b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Cohesion.cs @@ -11,12 +11,12 @@ namespace Continentis.Mods.Basic.Cards.General.Skills { public class Cohesion : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent().SetCondition(SelectCondition).SetEffect(SelectEffect); } - - protected override List PlayEffect(List targetList) + + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential); @@ -28,16 +28,16 @@ namespace Continentis.Mods.Basic.Cards.General.Skills private bool SelectCondition(CardInstance card) { - CardType type = card.cardLogic.contentSubmodule.cardType; + CardType type = card.contentSubmodule.cardType; return type != CardType.Status && type != CardType.Curse; } private void SelectEffect(CardInstance card) { - card.cardLogic.ModifyAttribute("StaminaCost", -1); - card.cardLogic.contentSubmodule.keywords.Add("Retain"); - card.cardLogic.contentSubmodule.originalFunctionText += " + $Keyword(\"Retain\")"; - card.cardLogic.contentSubmodule.dirtyMark = true; + card.ModifyAttribute("StaminaCost", -1); + card.contentSubmodule.keywords.Add("Retain"); + card.contentSubmodule.originalFunctionText += " + $Keyword(\"Retain\")"; + card.contentSubmodule.dirtyMark = true; } } } \ No newline at end of file diff --git a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/CommonHolyWater.cs b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/CommonHolyWater.cs index ff6ae439..a24a623e 100644 --- a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/CommonHolyWater.cs +++ b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/CommonHolyWater.cs @@ -12,12 +12,12 @@ namespace Continentis.Mods.Basic.Cards { public class CommonHolyWater : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential); @@ -29,7 +29,7 @@ namespace Continentis.Mods.Basic.Cards public bool SelectCondition(CardInstance card) { - CardType type = card.cardLogic.contentSubmodule.cardType; + CardType type = card.contentSubmodule.cardType; return type == CardType.Status || type == CardType.Curse; } diff --git a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Defense.cs b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Defense.cs index 24b4569b..d06c3442 100644 --- a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Defense.cs +++ b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Defense.cs @@ -9,12 +9,12 @@ namespace Continentis.Mods.Basic.Cards { public class Defense : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); diff --git a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/DualStrike.cs b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/DualStrike.cs index fbe1fd5c..d9f30ea9 100644 --- a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/DualStrike.cs +++ b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/DualStrike.cs @@ -9,23 +9,23 @@ namespace Continentis.Mods.Basic.Cards { public class DualStrike : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - - protected override List PlayEffect(List targetList) + + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); CommandGroup mainGroup = TargetListCommandGroup(targetList, ExecutionMode.Sequential, ExecutionMode.Sequential, new CommandGroup(ExecutionMode.Parallel, new Cmd_PlayAnimation(user.characterView, "Attack"), - new Cmd_ParamFunction(target => user.Attack(target, GetFinalDamage(target))) + new Cmd_ParamFunction(target => user.Attack(target, GetTargetedFinalDamage(target))) ), new CommandGroup(ExecutionMode.Parallel, new Cmd_PlayAnimation(user.characterView, "Attack"), - new Cmd_ParamFunction(target => user.Attack(target, GetFinalDamage(target))) + new Cmd_ParamFunction(target => user.Attack(target, GetTargetedFinalDamage(target))) )); return new List { mainGroup }; diff --git a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Faint.cs b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Faint.cs index 48536aca..faae5918 100644 --- a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Faint.cs +++ b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Faint.cs @@ -7,10 +7,10 @@ namespace Continentis.Mods.Basic.Cards { public class Faint : CardLogicBase { - public override void Initialize() + public override void Initialize(CardInstance card) { - base.Initialize(); - eventSubmodule.onDraw.Add("Basic_Faint", new PrioritizedAction(() => + base.Initialize(card); + this.card.eventSubmodule.onDraw.Add("Basic_Faint", new PrioritizedAction(() => { user.ModifyStamina(-1); })); diff --git a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/FightingInspiration.cs b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/FightingInspiration.cs index 4cf828cc..604b6587 100644 --- a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/FightingInspiration.cs +++ b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/FightingInspiration.cs @@ -9,12 +9,12 @@ namespace Continentis.Mods.Basic.Cards { public class FightingInspiration : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent().SetFilter(CardFilter); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); diff --git a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/FireBolt.cs b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/FireBolt.cs index 12b598f0..77bb5d7b 100644 --- a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/FireBolt.cs +++ b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/FireBolt.cs @@ -10,12 +10,12 @@ namespace Continentis.Mods.Basic.Cards { public class FireBolt : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); @@ -23,7 +23,7 @@ namespace Continentis.Mods.Basic.Cards new Cmd_PlayAnimation(user.characterView, "Attack"), new Cmd_ParamFunction(0.2f, target => { - user.Attack(target, GetFinalDamage(target)); + user.Attack(target, GetTargetedFinalDamage(target)); new Burn(GetAttribute("BuffLayer_Burn")).Apply(target, user, this); })); diff --git a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Guard.cs b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Guard.cs index 86ebaaa0..038bcf5e 100644 --- a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Guard.cs +++ b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Guard.cs @@ -10,7 +10,7 @@ namespace Continentis.Mods.Basic.Cards { public class Guard : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Skill"), diff --git a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/HiddenBlade.cs b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/HiddenBlade.cs index 016173e8..4c8ba18c 100644 --- a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/HiddenBlade.cs +++ b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/HiddenBlade.cs @@ -9,18 +9,18 @@ namespace Continentis.Mods.Basic.Cards { public class HiddenBlade : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - - protected override List PlayEffect(List targetList) + + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Attack"), - new Cmd_ParamFunction(0.2f, target => user.Attack(target, GetFinalDamage(target)))); + new Cmd_ParamFunction(0.2f, target => user.Attack(target, GetTargetedFinalDamage(target)))); return new List { mainGroup }; } diff --git a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/HolyWaterPreparation.cs b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/HolyWaterPreparation.cs index d1a49749..e71a9bf6 100644 --- a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/HolyWaterPreparation.cs +++ b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/HolyWaterPreparation.cs @@ -11,12 +11,12 @@ namespace Continentis.Mods.Basic.Cards { public class HolyWaterPreparation : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - - protected override List PlayEffect(List targetList) + + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); diff --git a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/MudBarrier.cs b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/MudBarrier.cs index bd1ea0f7..b10ec3ab 100644 --- a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/MudBarrier.cs +++ b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/MudBarrier.cs @@ -9,12 +9,12 @@ namespace Continentis.Mods.Basic.Cards { public class MudBarrier : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); diff --git a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Oblivion.cs b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Oblivion.cs index 19242c1d..2806914b 100644 --- a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Oblivion.cs +++ b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Oblivion.cs @@ -9,14 +9,14 @@ namespace Continentis.Mods.Basic.Cards { public partial class Oblivion : CardLogicBase { - public override void Initialize() + public override void Initialize(CardInstance card) { - base.Initialize(); - eventSubmodule.onActionEnd.Add("Basic_Oblivion_ExhaustCard", new PrioritizedAction(() => + base.Initialize(card); + this.card.eventSubmodule.onActionEnd.Add("Basic_Oblivion_ExhaustCard", new PrioritizedAction(() => { List handPile = user.deckSubmodule.HandPile; - if (handPile.Contains(cardInstance)) + if (handPile.Contains(card)) { if (handPile.Filtered(CardFilter).TryGetRandom(out CardInstance randomCard)) { @@ -31,7 +31,7 @@ namespace Continentis.Mods.Basic.Cards { private static bool CardFilter(CardInstance card) { - return card.cardLogic.contentSubmodule.cardType is not CardType.Status and not CardType.Curse; + return card.contentSubmodule.cardType is not CardType.Status and not CardType.Curse; } } } \ No newline at end of file diff --git a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Prick.cs b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Prick.cs index 527dfca5..49b23e0a 100644 --- a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Prick.cs +++ b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Prick.cs @@ -9,18 +9,18 @@ namespace Continentis.Mods.Basic.Cards { public class Prick : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - - protected override List PlayEffect(List targetList) + + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Attack"), - new Cmd_ParamFunction(0.1f, target => user.Attack(target, GetFinalDamage(target)))); + new Cmd_ParamFunction(0.1f, target => user.Attack(target, GetTargetedFinalDamage(target)))); return new List { mainGroup }; } diff --git a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/RadiantBolt.cs b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/RadiantBolt.cs index f5e62fc4..ce045cd4 100644 --- a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/RadiantBolt.cs +++ b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/RadiantBolt.cs @@ -10,12 +10,12 @@ namespace Continentis.Mods.Basic.Cards { public class RadiantBolt : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - - protected override List PlayEffect(List targetList) + + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); @@ -23,7 +23,7 @@ namespace Continentis.Mods.Basic.Cards new Cmd_PlayAnimation(user.characterView, "Attack"), new Cmd_ParamFunction(0.2f, target => { - user.Attack(target, GetFinalDamage(target)); + user.Attack(target, GetTargetedFinalDamage(target)); new Blind(GetAttribute("BuffLayer_Blind")).Apply(target, user, this); })); diff --git a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/RayOfFrost.cs b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/RayOfFrost.cs index b2f8206c..3b763958 100644 --- a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/RayOfFrost.cs +++ b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/RayOfFrost.cs @@ -10,18 +10,18 @@ namespace Continentis.Mods.Basic.Cards { public class RayOfFrost : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Attack"), - new Cmd_ParamFunction(0.2f, target => user.Attack(target, GetFinalDamage(target)))); + new Cmd_ParamFunction(0.2f, target => user.Attack(target, GetTargetedFinalDamage(target)))); return new List { mainGroup }; } diff --git a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/RecklessAssault.cs b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/RecklessAssault.cs index 9d9ff788..d7cb1fb4 100644 --- a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/RecklessAssault.cs +++ b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/RecklessAssault.cs @@ -9,18 +9,18 @@ namespace Continentis.Mods.Basic.Cards { public class RecklessAssault : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - - protected override List PlayEffect(List targetList) + + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Attack"), - new Cmd_ParamFunction(0.1f, target => user.Attack(target, GetFinalDamage(target)))); + new Cmd_ParamFunction(0.1f, target => user.Attack(target, GetTargetedFinalDamage(target)))); return new List { mainGroup }; } diff --git a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Recollection.cs b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Recollection.cs index dccf5038..183971c7 100644 --- a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Recollection.cs +++ b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Recollection.cs @@ -9,12 +9,12 @@ namespace Continentis.Mods.Basic.Cards { public class Recollection : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential); @@ -27,7 +27,7 @@ namespace Continentis.Mods.Basic.Cards public void SelectEffect(CardInstance card) { - CommandQueueManager.Instance.AddCommand(new Cmd_DrawCards(owner.deckSubmodule, new List() { card }, 0.1f)); + CommandQueueManager.Instance.AddCommand(new Cmd_DrawCards(card.deck, new List() { card }, 0.1f)); } } } \ No newline at end of file diff --git a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Slash.cs b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Slash.cs index 687f58be..861a8e4b 100644 --- a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Slash.cs +++ b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Slash.cs @@ -9,18 +9,18 @@ namespace Continentis.Mods.Basic.Cards { public class Slash : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - - protected override List PlayEffect(List targetList) + + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Attack"), - new Cmd_ParamFunction(target => user.Attack(target, GetFinalDamage(target)))); + new Cmd_ParamFunction(target => user.Attack(target, GetTargetedFinalDamage(target)))); return new List { mainGroup }; } diff --git a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Strike.cs b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Strike.cs index 15519c15..8da6b903 100644 --- a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Strike.cs +++ b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/Strike.cs @@ -11,12 +11,12 @@ namespace Continentis.Mods.Basic.Cards { public class Strike : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Attack"), @@ -25,7 +25,7 @@ namespace Continentis.Mods.Basic.Cards foreach (Cmd_PlayAnimation cmd in mainGroup.GetAllCommands()) { - cmd.AddAction(0.7f, "Target", target => user.Attack(target, GetFinalDamage(target))); + cmd.AddAction(0.7f, "Target", target => user.Attack(target, GetTargetedFinalDamage(target))); } return new List { mainGroup }; diff --git a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/ThinkingCountermeasures.cs b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/ThinkingCountermeasures.cs index 63bee13e..36793dff 100644 --- a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/ThinkingCountermeasures.cs +++ b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/ThinkingCountermeasures.cs @@ -10,7 +10,7 @@ namespace Continentis.Mods.Basic.Cards { public class ThinkingCountermeasures : CardLogicBase { - protected override List PlayEffect(List targetList) + public override List PlayEffect(List targetList) { CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential, user.deckSubmodule.DrawCards(GetAttribute("DrawCardAmount"))); diff --git a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/WindBlade.cs b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/WindBlade.cs index 8bf3c87f..95ece121 100644 --- a/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/WindBlade.cs +++ b/Assets/Mods/Basic/Cards/Scripts/ObsoleteGeneral/WindBlade.cs @@ -9,17 +9,17 @@ namespace Continentis.Mods.Basic.Cards { public class WindBlade : CardLogicBase { - protected override void SetUpLogicComponents() + public override void SetUpLogicComponents() { AddLogicComponent(); } - - protected override List PlayEffect(List targetList) + + public override List PlayEffect(List targetList) { base.PlayEffect(targetList); CommandGroup mainGroup = TargetListCommandGroup(targetList, new Cmd_PlayAnimation(user.characterView, "Attack"), - new Cmd_ParamFunction(0.2f, target => user.Attack(target, GetFinalDamage(target)))); + new Cmd_ParamFunction(0.2f, target => user.Attack(target, GetTargetedFinalDamage(target)))); return new List { mainGroup }; } @@ -29,7 +29,7 @@ namespace Continentis.Mods.Basic.Cards LogicComponent().SetDamage_Arcane(); } - public override int GetFinalDamage(CharacterBase target, List elementalTags = null) + public override int GetTargetedFinalDamage(CharacterBase target, List elementalTags = null) { float baseDamageFromSuppress = 0; diff --git a/Assets/Mods/Basic/Characters/CombatBuffs/Cleric/FreedomOfMovement.cs b/Assets/Mods/Basic/Characters/CombatBuffs/Cleric/FreedomOfMovement.cs index 95728de4..c3b3adae 100644 --- a/Assets/Mods/Basic/Characters/CombatBuffs/Cleric/FreedomOfMovement.cs +++ b/Assets/Mods/Basic/Characters/CombatBuffs/Cleric/FreedomOfMovement.cs @@ -25,7 +25,7 @@ namespace Continentis.Mods.Basic.Buffs private void OnBeforePlayCard(CardInstance instance, List list) { - if (instance.cardLogic.contentSubmodule.cardType == CardType.Power) + if (instance.contentSubmodule.cardType == CardType.Power) { CommandQueueManager.Instance.AddCommand(this.attachedCharacter.deckSubmodule.DrawCards(unitedStackSubmodule.stackAmount)); } diff --git a/Assets/Mods/Basic/Characters/CombatBuffs/Mage/FlameInscription.cs b/Assets/Mods/Basic/Characters/CombatBuffs/Mage/FlameInscription.cs index 97efbeab..6437f3f7 100644 --- a/Assets/Mods/Basic/Characters/CombatBuffs/Mage/FlameInscription.cs +++ b/Assets/Mods/Basic/Characters/CombatBuffs/Mage/FlameInscription.cs @@ -25,7 +25,7 @@ namespace Continentis.Mods.Basic.Buffs this.eventSubmodule.onAfterPlayCard.Add("FlameInscription", new PrioritizedAction>((card, targets) => { - if (card.cardLogic.contentSubmodule.cardType == CardType.Attack && card.cardLogic.HasKeyword("Magic")) + if (card.contentSubmodule.cardType == CardType.Attack && card.HasKeyword("Magic")) { List enemies = CombatMainManager.Instance.characterController.GetAllEnemies(attachedCharacter); foreach (CharacterBase enemy in enemies) diff --git a/Assets/Mods/Basic/Characters/Scripts/MarshalOfUnderworld.cs b/Assets/Mods/Basic/Characters/Scripts/MarshalOfUnderworld.cs index 491f6e03..3defd9d4 100644 --- a/Assets/Mods/Basic/Characters/Scripts/MarshalOfUnderworld.cs +++ b/Assets/Mods/Basic/Characters/Scripts/MarshalOfUnderworld.cs @@ -31,32 +31,32 @@ namespace Continentis.Mods.Basic.Characters { characterDeck.PoolPile.ForEach(card => { - card.cardLogic.weightSubmodule.baseWeight = 0; - card.cardLogic.weightSubmodule.forceUse = false; - card.cardLogic.weightSubmodule.forceIgnore = false; + card.weightSubmodule.baseWeight = 0; + card.weightSubmodule.forceUse = false; + card.weightSubmodule.forceIgnore = false; }); foreach (CardInstance card in characterDeck.PoolPile) { if (card.cardLogic is HellfireBlast) { - card.cardLogic.weightSubmodule.baseWeight = 1; + card.weightSubmodule.baseWeight = 1; } else if (card.cardLogic is NecromanticInfusion) { if (characterRecord.GetLastActionsRecords(3) .Any(rec => rec.cardsPlayed.Any(recCard => recCard.cardLogic is NecromanticInfusion))) { - card.cardLogic.weightSubmodule.baseWeight = 0; + card.weightSubmodule.baseWeight = 0; } else { - card.cardLogic.weightSubmodule.baseWeight = 1; + card.weightSubmodule.baseWeight = 1; } } else if (card.cardLogic is GreatswordSweep) { - card.cardLogic.weightSubmodule.baseWeight = 1; + card.weightSubmodule.baseWeight = 1; } } } @@ -83,7 +83,7 @@ namespace Continentis.Mods.Basic.Characters { if (card.cardLogic is ArmyOfTheDead) { - card.cardLogic.weightSubmodule.forceUse = true; + card.weightSubmodule.forceUse = true; } } } @@ -121,7 +121,7 @@ namespace Continentis.Mods.Basic.Characters { if (card.cardLogic is WrathOfUnderworld) { - card.cardLogic.weightSubmodule.forceUse = true; + card.weightSubmodule.forceUse = true; } } } diff --git a/Assets/Scripts/MainGame/Base/Interpreters/CardTextInterpreter.cs b/Assets/Scripts/MainGame/Base/Interpreters/CardTextInterpreter.cs index 0d26c4dc..82003347 100644 --- a/Assets/Scripts/MainGame/Base/Interpreters/CardTextInterpreter.cs +++ b/Assets/Scripts/MainGame/Base/Interpreters/CardTextInterpreter.cs @@ -21,7 +21,7 @@ namespace Continentis.MainGame } } - public static void InterpretText(CardLogicBase card, bool overrideDescription = false) + public static void InterpretText(CardInstance card, bool overrideDescription = false) { //card.contentSubmodule.keywords.Clear(); @@ -46,7 +46,7 @@ namespace Continentis.MainGame public static partial class CardTextInterpreter { - private static string GetAttribute(CardLogicBase card, string attributeName, bool higherIsBetter, bool inPercent) + private static string GetAttribute(CardInstance card, string attributeName, bool higherIsBetter, bool inPercent) { string displayName = "Display" + attributeName; string baseName = "Base" + attributeName; @@ -66,14 +66,14 @@ namespace Continentis.MainGame } } - private static string GetAttribute(CardLogicBase card, string attributeName, bool inPercent) + private static string GetAttribute(CardInstance card, string attributeName, bool inPercent) { string displayName = "Display" + attributeName; int displayValue = card.GetAttribute(displayName); return DynamicTextInterpreter.GetValue(displayValue, inPercent); } - private static string RemoveWhenSelecting(CardLogicBase card, string toRemove) + private static string RemoveWhenSelecting(CardInstance card, string toRemove) { return card.handCardView != null && card.handCardView.isSelecting ? "" : toRemove; } diff --git a/Assets/Scripts/MainGame/Card/CardAssistanceFunctions.cs b/Assets/Scripts/MainGame/Card/CardAssistanceFunctions.cs index 396f9b25..54470a04 100644 --- a/Assets/Scripts/MainGame/Card/CardAssistanceFunctions.cs +++ b/Assets/Scripts/MainGame/Card/CardAssistanceFunctions.cs @@ -11,7 +11,7 @@ using UnityEngine; namespace Continentis.MainGame.Card { #region Fundamental - public partial class CardLogicBase + public partial class CardInstance { public List GetElementalKeywords(List overrideKeywords = null) { @@ -25,223 +25,9 @@ namespace Continentis.MainGame.Card } } #endregion - - #region Command - - public partial class CardLogicBase - { - /// - /// 创建一个命令组,组内命令按顺序执行 - /// - /// 命令模板 - protected CommandGroup SingleCommandGroup(params CommandBase[] commands) - { - return SingleCommandGroup(ExecutionMode.Parallel, commands); - } - - /// - /// 创建一个命令组,组内命令按指定顺序执行 - /// - /// 执行模式,顺序或并行 - /// 命令模板 - protected virtual CommandGroup SingleCommandGroup( - ExecutionMode executionMode = ExecutionMode.Parallel, params CommandBase[] commands) - { - CommandGroup singleGroup = new CommandGroup(executionMode); - - foreach (CommandBase template in commands) - { - singleGroup.AddCommand(template.Clone()); - } - - return singleGroup; - } - - /// - /// 对目标列表中的每个目标,依次执行一组有参函数命令,每组命令的参数为targetList中的个体,主体Group顺序执行,单体Group并行执行。 - /// - /// 目标列表 - /// 单体命令模板 - protected CommandGroup TargetListCommandGroup(List targetList, - params CommandBase[] singleCommands) - { - return TargetListCommandGroup(targetList, ExecutionMode.Sequential, ExecutionMode.Parallel, singleCommands); - } - - /// - /// 对目标列表中的每个目标,依次执行一组有参函数命令,每组命令的参数为targetList中的个体。 - /// - /// 目标列表 - /// 主体Group(各个目标)的执行顺序 - /// 单体Group(一个目标中指令)的执行顺序 - /// 单体命令模板 - protected virtual CommandGroup TargetListCommandGroup( - List targetList, ExecutionMode mainExecutionMode = ExecutionMode.Sequential, - ExecutionMode singleExecutionMode = ExecutionMode.Parallel, - params CommandBase[] singleCommands) - { - CommandGroup mainGroup = new CommandGroup(mainExecutionMode); - - foreach (CharacterBase target in targetList) - { - CommandGroup singleGroup = new CommandGroup(singleExecutionMode); - - foreach (CommandBase template in singleCommands) - { - CommandBase clone = template.Clone(); - - List allCommands = new List(); - - if (clone is CommandGroup group) - { - allCommands.AddRange(group.GetAllCommands(true)); - } - else - { - allCommands.Add(clone); - } - - foreach (CommandBase cmd in allCommands) - { - cmd.selfContext.context["Target"] = target; - } - - singleGroup.AddCommand(clone); - } - - mainGroup.AddCommand(singleGroup); - } - - return mainGroup; - } - } - - #endregion - - #region Attack - public partial class CardLogicBase - { - /// - /// 获取最终伤害 - /// - /// 目标 - /// 元素标签,若为null则使用卡牌的元素标签 - public virtual int GetFinalDamage(CharacterBase target, List elementalTags = null) - { - return GetFinalDamage(target, elementalTags, out _, out _, out _, out _); - } - - /// - /// 获取最终伤害 - /// - /// 元素标签,若为null则使用卡牌的元素标签 - public virtual int GetUserDamage(List elementalTags = null) - { - return GetUserDamage(elementalTags, out _, out _, out _, out _); - } - - /// - /// 获取在没有指定目标时的最终伤害值 - /// - protected virtual int GetUserDamage(List elementalTags, - out float baseDamageAfterOffset, out float elementalMultiplier, out float magicMultiplier, out float finalMultiplier) - { - elementalTags ??= GetElementalKeywords(); - - //----计算基础伤害增量---- - int physicsOffset = 0; - if (HasKeyword("Physics") || HasKeyword("Slash") || HasKeyword("Prick") || HasKeyword("Strike")) - { - physicsOffset = user.GetAttribute("PhysicsDamageDealtOffset"); //物理伤害基础增量 - } - - int magicOffset = 0; - if (HasKeyword("Magic") || HasKeyword("Arcane") || HasKeyword("Sorcery")) - { - magicOffset = user.GetAttribute("MagicDamageDealtOffset"); //魔法伤害基础增量 - } - - Debug.Log("Magic Offset: " + magicOffset); - - //----计算伤害因数---- - - //计算元素伤害加成,注意,“物理Physics”也是一种元素,因此下方没有“通用物理伤害加成”的计算 - elementalMultiplier = 1; - foreach (string element in elementalTags) - { - elementalMultiplier *= user.GetRawAttribute(element + "DamageDealtMultiplier", 1); - } - - //计算通用的魔法伤害加成 - magicMultiplier = 1; - if (HasKeyword("Magic") || HasKeyword("Arcane") || HasKeyword("Sorcery")) - { - magicMultiplier = user.GetRawAttribute("MagicDamageDealtMultiplier", 1); - } - - //计算最终伤害加成 - finalMultiplier = user.GetRawAttribute("FinalDamageDealtMultiplier", 1); - - //----计算最终伤害---- - baseDamageAfterOffset = attributeSubmodule.GetCurrentAttribute("Damage") + physicsOffset + magicOffset; - - float finalDamage = baseDamageAfterOffset * elementalMultiplier * magicMultiplier * finalMultiplier; - - return Mathf.RoundToInt(finalDamage); - } - - protected virtual int GetFinalDamage(CharacterBase target, List elementalTags, - out float baseDamageAfterOffset, out float elementalMultiplier, out float magicMultiplier, out float finalMultiplier) - { - elementalTags ??= GetElementalKeywords(); - - //----计算基础伤害增量---- - int physicsOffset = 0; - if (HasKeyword("Physics") || HasKeyword("Slash") || HasKeyword("Prick") || HasKeyword("Strike")) - { - physicsOffset = user.GetAttribute("PhysicsDamageDealtOffset"); //物理伤害基础增量 - } - - int magicOffset = 0; - if (HasKeyword("Magic") || HasKeyword("Arcane") || HasKeyword("Sorcery")) - { - magicOffset = user.GetAttribute("MagicDamageDealtOffset"); //魔法伤害基础增量 - } - - //----计算伤害因数---- - - //计算元素伤害加成,注意,“物理Physics”也是一种元素,因此下方没有“通用物理伤害加成”的计算 - elementalMultiplier = 1; - foreach (string element in elementalTags) - { - elementalMultiplier *= user.GetRawAttribute(element + "DamageDealtMultiplier", 1) * - target.GetRawAttribute(element + "DamageGainMultiplier", 1); - } - - //计算通用的魔法伤害加成 - magicMultiplier = 1; - if (HasKeyword("Magic") || HasKeyword("Arcane") || HasKeyword("Sorcery")) - { - magicMultiplier = user.GetRawAttribute("MagicDamageDealtMultiplier", 1) * - target.GetRawAttribute("MagicDamageGainMultiplier", 1); - } - - //计算最终伤害加成 - finalMultiplier = user.GetRawAttribute("FinalDamageDealtMultiplier", 1) * - target.GetRawAttribute("FinalDamageGainMultiplier", 1); - - //----计算最终伤害---- - baseDamageAfterOffset = attributeSubmodule.GetCurrentAttribute("Damage") + physicsOffset + magicOffset; - - float finalDamage = baseDamageAfterOffset * elementalMultiplier * magicMultiplier * finalMultiplier; - - return Mathf.RoundToInt(finalDamage); - } - } - #endregion #region Attributes - public partial class CardLogicBase + public partial class CardInstance { /// /// 设置可变属性值 @@ -308,68 +94,4 @@ namespace Continentis.MainGame.Card } } #endregion - - #region Buffs - public partial class CardLogicBase - { - /// - /// 创建一个角色战斗Buff实例 - /// 注意,此函数依赖ModManager的类型注册功能,请确保在Mod加载时已注册对应Buff类型 - /// 此函数中的T并不是原型参数,而是获取Mod中注册的类型用的 - /// - public T CreateCharacterBuff(params object[] parameters) where T :CharacterCombatBuffBase - { - string buffTypeID = ModManager.GetTypeID(typeof(T)); - - if (string.IsNullOrEmpty(buffTypeID)) - { - Debug.LogError($"Failed to get buff name for type {typeof(T).FullName}"); - return null; - } - - return ModManager.CreateInstance(buffTypeID, parameters); - } - - public T CreateCharacterBuff(string buffTypeID, params object[] parameters) where T :CharacterCombatBuffBase - { - if (string.IsNullOrEmpty(buffTypeID)) - { - Debug.LogError($"Failed to get buff name for type {typeof(T).FullName}"); - return null; - } - - return ModManager.CreateInstance(buffTypeID, parameters); - } - - /// - /// 创建一个卡牌战斗Buff实例 - /// 注意,此函数依赖ModManager的类型注册功能,请确保在Mod加载时已注册对应Buff类型 - /// 此函数中的T并不是原型参数,而是获取Mod中注册的类型用的 - /// - public T CreateCardBuff(params object[] parameters) where T :CardBuffBase - { - string buffTypeID = ModManager.GetTypeID(typeof(T)); - - if (string.IsNullOrEmpty(buffTypeID)) - { - Debug.LogError($"Failed to get buff name for type {typeof(T).FullName}"); - return null; - } - - return ModManager.CreateInstance(buffTypeID, parameters); - } - - - public T CreateCardBuff(string buffTypeID, params object[] parameters) where T :CardBuffBase - { - if (string.IsNullOrEmpty(buffTypeID)) - { - Debug.LogError($"Failed to get buff name for type {typeof(T).FullName}"); - return null; - } - - return ModManager.CreateInstance(buffTypeID, parameters); - } - } - #endregion } \ No newline at end of file diff --git a/Assets/Scripts/MainGame/Card/CardBuff/BuffSubmodules.cs b/Assets/Scripts/MainGame/Card/CardBuff/BuffSubmodules.cs index cff69164..7f813d75 100644 --- a/Assets/Scripts/MainGame/Card/CardBuff/BuffSubmodules.cs +++ b/Assets/Scripts/MainGame/Card/CardBuff/BuffSubmodules.cs @@ -8,7 +8,7 @@ namespace Continentis.MainGame.Card { public abstract class CardBuffSubmodule : BuffSubmodule { - public CardLogicBase card => (buff as CardBuffBase)?.attachedCard; + public CardInstance card => (buff as CardBuffBase)?.attachedCard; protected CardBuffSubmodule(CardBuffBase buff) : base(buff) { diff --git a/Assets/Scripts/MainGame/Card/CardBuff/CardBuffBase.cs b/Assets/Scripts/MainGame/Card/CardBuff/CardBuffBase.cs index 76bc5c80..a98a59ba 100644 --- a/Assets/Scripts/MainGame/Card/CardBuff/CardBuffBase.cs +++ b/Assets/Scripts/MainGame/Card/CardBuff/CardBuffBase.cs @@ -3,9 +3,9 @@ using UnityEngine; namespace Continentis.MainGame.Card { - public abstract partial class CardBuffBase : BuffBase + public abstract partial class CardBuffBase : BuffBase { - public CardLogicBase attachedCard; + public CardInstance attachedCard; public CharacterBase sourceCharacter; public UsageSubmodule usageSubmodule; @@ -18,11 +18,11 @@ namespace Continentis.MainGame.Card public partial class CardBuffBase { - public override void Apply(CardLogicBase attached) + public override void Apply(CardInstance attached) { this.Apply(attached, null); } - public abstract void Apply(CardLogicBase attachedCard, CharacterBase sourceCharacter = null); + public abstract void Apply(CardInstance attachedCard, CharacterBase sourceCharacter = null); } } \ No newline at end of file diff --git a/Assets/Scripts/MainGame/Card/CardBuff/CardCombatBuffBase.cs b/Assets/Scripts/MainGame/Card/CardBuff/CardCombatBuffBase.cs index e7870a7b..e24bcdbd 100644 --- a/Assets/Scripts/MainGame/Card/CardBuff/CardCombatBuffBase.cs +++ b/Assets/Scripts/MainGame/Card/CardBuff/CardCombatBuffBase.cs @@ -16,7 +16,7 @@ namespace Continentis.MainGame.Card public partial class CardCombatBuffBase { - public sealed override bool OnBuffApply(out BuffBase existingBuff) + public sealed override bool OnBuffApply(out BuffBase existingBuff) { throw new System.NotImplementedException("请使用类型约束更强的OnBuffApply方法"); } @@ -70,12 +70,12 @@ namespace Continentis.MainGame.Card return base.FindExistingSameBuff(out existingBuff, attachedCard.combatBuffSubmodule.buffList); } - public override void Apply(CardLogicBase attachedCard, CharacterBase sourceCharacter = null) + public override void Apply(CardInstance attachedCard, CharacterBase sourceCharacter = null) { this.Apply(attachedCard, sourceCharacter, null); } - public void Apply(CardLogicBase attachedCard, CharacterBase sourceCharacter = null, CardLogicBase sourceCard = null) + public void Apply(CardInstance attachedCard, CharacterBase sourceCharacter = null, CardLogicBase sourceCard = null) { this.attachedCard = attachedCard; this.sourceCharacter = sourceCharacter; diff --git a/Assets/Scripts/MainGame/Card/CardInstance.cs b/Assets/Scripts/MainGame/Card/CardInstance.cs index 07c73237..b5030151 100644 --- a/Assets/Scripts/MainGame/Card/CardInstance.cs +++ b/Assets/Scripts/MainGame/Card/CardInstance.cs @@ -1,34 +1,55 @@ +using System; using System.Collections.Generic; using Continentis.MainGame.Character; using Continentis.MainGame.Combat; using Continentis.MainGame.UI; using Lean.Pool; +using NaughtyAttributes; +using SLSFramework.General; +using UniRx; using UnityEngine; namespace Continentis.MainGame.Card { - public partial class CardInstance + public partial class CardInstance : IGameElement { + public Guid elementID { get; set; } + [Header("References")] public DeckSubmodule deck; - //public string currentPileName; + public CardLocation cardLocation; + public CardData cardData; + public CompositeDisposable disposables = new CompositeDisposable(); public ICardOwner owner; public CharacterBase user; public CombatTeam usingTeam; public CardLogicBase cardLogic; - public CardLocation cardLocation; - public HandCardView handCardView; - public IntentionCardView intentionCardView; - - public CardInstance(CardLogicBase cardLogic, ICardOwner owner, string initialPileName, int index = -1) + public int upgradeLevel; + + [Header("Submodules")] + [ShowNativeProperty] + public AttributeSubmodule attributeSubmodule { get; private set; } + [ShowNativeProperty] + public WeightSubmodule weightSubmodule { get; private set; } + [ShowNativeProperty] + public CombatBuffSubmodule combatBuffSubmodule { get; private set; } + [ShowNativeProperty] + public EventSubmodule eventSubmodule { get; private set; } + [ShowNativeProperty] + public ContentSubmodule contentSubmodule { get; private set; } + [ShowNativeProperty] + public PlaySubmodule playSubmodule { get; private set; } + + public CardInstance(CardData data, ICardOwner owner, string initialPileName, int index = -1) { - cardLogic.cardInstance = this; - this.cardLogic = cardLogic; - + (this as IGameElement).Initialize(); + + this.cardData = data; this.owner = owner; this.user = owner as CharacterBase; + if (this.owner is CombatTeam team) { this.usingTeam = team; @@ -49,19 +70,30 @@ namespace Continentis.MainGame.Card { this.deck.Pile(cardLocation.pileName).Insert(index, this); } + + this.attributeSubmodule = new AttributeSubmodule(this); + this.weightSubmodule = new WeightSubmodule(this); + this.eventSubmodule = new EventSubmodule(this); + this.combatBuffSubmodule = new CombatBuffSubmodule(this); + this.contentSubmodule = new ContentSubmodule(this); + this.playSubmodule = new PlaySubmodule(this); + + this.cardLogic = CardLogicBase.GenerateCardLogic(data); + this.cardLogic.Initialize(this); + this.cardLogic.SetUpLogicComponents(); } /// /// 根据CardLogic生成卡牌实例 /// - /// 卡牌逻辑实例 + /// 卡牌实体实例 /// 卡牌持有者 /// 初始卡堆名称" /// 插入位置,默认为0 - public static CardInstance GenerateCardInstance(CardLogicBase logic, ICardOwner owner, string pileName, int index = -1) + public static CardInstance GenerateCardInstance(CardInstance template, ICardOwner owner, string pileName, int index = -1) { - CardInstance cardInstance = new CardInstance(logic, owner, pileName, index); - //cardInstance.cardLogic.Initialize(); + CardInstance cardInstance = new CardInstance(template.cardData, owner, pileName, index); + //TODO: 复制template的属性到cardInstance return cardInstance; } @@ -76,15 +108,27 @@ namespace Continentis.MainGame.Card /// public static CardInstance GenerateCardInstance(CardData data, ICardOwner owner, string pileName, int index = -1) { - CardInstance cardInstance = new CardInstance(CardLogicBase.GenerateCardLogic(data), owner, pileName, index); - cardInstance.cardLogic.Initialize(); + CardInstance card = new CardInstance(data, owner, pileName, index); if (owner == CombatMainManager.Instance.characterController.playerTeam) { - CombatUIManager.Instance.combatMainPage.teamSwitchButton.UpdateTeamPileText(CombatMainManager.Instance.characterController.playerTeam); + CombatUIManager.Instance.combatMainPage.teamSwitchButton + .UpdateTeamPileText(CombatMainManager.Instance.characterController.playerTeam); } - return cardInstance; + //下面的部分后续放入CardLogic的初始化函数中 + card.RefreshCardAttributes(); + + if (card.HasKeyword("Instant")) //如果是“瞬发”牌,添加抽牌后立刻打出的事件 + { + card.eventSubmodule.onDraw.InsertByPriority("Instant", new PrioritizedAction(() => + { + card.DetectTargetsValidity(out List valid, out _, out _); + card.Play(card.SetRandomTargets(valid), card.user); + }, 99)); + } + + return card; } public HandCardView GenerateHandCardView(string pileName, int index = -1) @@ -112,7 +156,7 @@ namespace Continentis.MainGame.Card pile.AddCard(handCardView); } - handCardView.cardInstance = this; + handCardView.card = this; this.handCardView = handCardView; handCardView.transform.localScale = pile is HandPile ? Vector3.one : Vector3.zero; @@ -140,7 +184,7 @@ namespace Continentis.MainGame.Card HUD_Intention intention = user.characterView.hudContainer.enablingHUDs["Intention"] as HUD_Intention; IntentionCardView intentionCardView = LeanPool.Spawn(intentionCardObjectPrefab, intention.hudTransform).GetComponent(); intention.AddCard(intentionCardView); - intentionCardView.cardInstance = this; + intentionCardView.card = this; this.intentionCardView = intentionCardView; intentionCardView.transform.localScale = Vector3.one; intentionCardView.Setup(this); @@ -157,6 +201,12 @@ namespace Continentis.MainGame.Card } } } + + public partial class CardInstance + { + public HandCardView handCardView; + public IntentionCardView intentionCardView; + } public class CardLocation { diff --git a/Assets/Scripts/MainGame/Card/CardLogicBase.cs b/Assets/Scripts/MainGame/Card/CardLogicBase.cs index 1568c06e..87fe3dd8 100644 --- a/Assets/Scripts/MainGame/Card/CardLogicBase.cs +++ b/Assets/Scripts/MainGame/Card/CardLogicBase.cs @@ -13,27 +13,9 @@ namespace Continentis.MainGame.Card public abstract partial class CardLogicBase { [Header("Reference")] - public CardData cardData; - public CardInstance cardInstance; - public CompositeDisposable disposables = new CompositeDisposable(); - - public ICardOwner owner => cardInstance.owner; - public CharacterBase user => cardInstance.user; - public CombatTeam UsingTeam => cardInstance.usingTeam; - public HandCardView handCardView => cardInstance.handCardView; - public IntentionCardView intentionCardView => cardInstance.intentionCardView; - - [Header("Card Base Info")] - public Guid cardID; - public int upgradeLevel; - - [Header("Submodules")] - public AttributeSubmodule attributeSubmodule { get; private set; } - public WeightSubmodule weightSubmodule { get; private set; } - public CombatBuffSubmodule combatBuffSubmodule { get; private set; } - public EventSubmodule eventSubmodule { get; private set; } - public ContentSubmodule contentSubmodule { get; private set; } - public PlaySubmodule playSubmodule { get; private set; } + public CardInstance card; + public CardData cardData => card.cardData; + public CharacterBase user => card.user; public HashSet logicComponents { get; private set; } /// @@ -52,8 +34,6 @@ namespace Continentis.MainGame.Card if (Activator.CreateInstance(logicType) is CardLogicBase cardLogic) { - cardLogic.cardData = data; - cardLogic.Setup(); return cardLogic; } @@ -61,45 +41,24 @@ namespace Continentis.MainGame.Card return null; } - public void Setup() + public virtual void Initialize(CardInstance cardInstance) { - this.cardID = Guid.NewGuid(); - - this.attributeSubmodule = new AttributeSubmodule(this); - this.weightSubmodule = new WeightSubmodule(this); - this.eventSubmodule = new EventSubmodule(this); - this.combatBuffSubmodule = new CombatBuffSubmodule(this); - this.contentSubmodule = new ContentSubmodule(this); - this.playSubmodule = new PlaySubmodule(this); - this.logicComponents = new HashSet(); - - SetUpLogicComponents(); + card = cardInstance; + logicComponents = new HashSet(); + card.eventSubmodule.onTargeting += TargetingEffect; + card.eventSubmodule.onUntargeting += UntargetingEffect; } - protected virtual void SetUpLogicComponents() + public virtual void SetUpLogicComponents() { } - - public virtual void Initialize() - { - RefreshCardAttributes(); - - if (HasKeyword("Instant")) //如果是“瞬发”牌,添加抽牌后立刻打出的事件 - { - eventSubmodule.onDraw.InsertByPriority("Instant", new PrioritizedAction(() => - { - DetectTargetsValidity(out List valid, out _, out _); - Play(SetRandomTargets(valid), user); - }, 99)); - } - } - + public T AddLogicComponent() where T : CardLogicComponentBase, new() { if (logicComponents.Any(component => component is T)) { - Debug.LogWarning($"Card {cardData.className} already has component of type {typeof(T)}, cannot add duplicate."); + Debug.LogWarning($"Card {card.cardData.className} already has component of type {typeof(T)}, cannot add duplicate."); return null; } else @@ -116,30 +75,319 @@ namespace Continentis.MainGame.Card return logicComponents.OfType().FirstOrDefault(); } - public void UpgradeCard() + public virtual void ApplyAttributeChangesByCard() { - if (owner is not CombatTeam) - { - KeyValuePair> currentPile = cardInstance.deck.GetCardLocation(cardInstance, out int index); - if (!cardData.upgradeNode.isTerminalNode) - { - cardInstance.DestroyHandCardView(); - - CardData newData = cardData.upgradeNode.upgradeCards[0]; //后续可改为选择升级方向 - CardLogicBase newLogic = CardLogicBase.GenerateCardLogic(newData); - cardInstance.cardLogic = newLogic; - newLogic.cardInstance = cardInstance; - cardInstance.cardLogic.Initialize(); - if (user is PlayerHero) - cardInstance.GenerateHandCardView(CombatUIManager.Instance.combatMainPage.Pile(currentPile.Key), index); - } - } - else - { - - } + } + public virtual List PlayEffect(List targetList) + { + return null; + } + + public virtual void AfterPlayEffect(List targetList) + { + + } + } + + #region Attributes + public partial class CardLogicBase + { + /// + /// 设置可变属性值 + /// + /// 属性名,通常为 + /// 是否为叠加,true为叠加,false为覆盖,true时,originalValue为外部传入值 + /// 原始伤害值,仅在additive为true时有效,否则此值被覆盖为BaseAttribute + /// 伤害增量 + public void SetVariableAttribute(string attributeName, int baseOffset, bool additive = false, int originalValue = 0) + { + card.SetVariableAttribute(attributeName, baseOffset, additive, originalValue); + } + + /// + /// 检查卡牌是否具有某属性 + /// + public bool HasAttribute(string attributeName) + { + return card.HasAttribute(attributeName); + } + + /// + /// 获取卡牌的属性值 + /// + public int GetAttribute(string attributeName, int defaultValue = 0) + { + return card.GetAttribute(attributeName, defaultValue); + } + + public float GetRawAttribute(string attributeName, float defaultValue = 0) + { + return card.GetRawAttribute(attributeName, defaultValue); + } + + /// + /// 设置卡牌的属性值 + /// + public void SetAttribute(string attributeName, int value) + { + card.SetAttribute(attributeName, value); + } + + /// + /// 设置卡牌的属性值 + /// + public void SetAttribute(string attributeName, float value) + { + card.SetAttribute(attributeName, value); + } + + /// + /// 修改卡牌的属性值 + /// + public void ModifyAttribute(string attributeName, int delta) + { + card.ModifyAttribute(attributeName, delta); + } + } + #endregion + + #region Command + + public partial class CardLogicBase + { + /// + /// 创建一个命令组,组内命令按顺序执行 + /// + /// 命令模板 + protected CommandGroup SingleCommandGroup(params CommandBase[] commands) + { + return SingleCommandGroup(ExecutionMode.Parallel, commands); + } + + /// + /// 创建一个命令组,组内命令按指定顺序执行 + /// + /// 执行模式,顺序或并行 + /// 命令模板 + protected virtual CommandGroup SingleCommandGroup( + ExecutionMode executionMode = ExecutionMode.Parallel, params CommandBase[] commands) + { + CommandGroup singleGroup = new CommandGroup(executionMode); + + foreach (CommandBase template in commands) + { + singleGroup.AddCommand(template.Clone()); + } + + return singleGroup; + } + + /// + /// 对目标列表中的每个目标,依次执行一组有参函数命令,每组命令的参数为targetList中的个体,主体Group顺序执行,单体Group并行执行。 + /// + /// 目标列表 + /// 单体命令模板 + protected CommandGroup TargetListCommandGroup(List targetList, + params CommandBase[] singleCommands) + { + return TargetListCommandGroup(targetList, ExecutionMode.Sequential, ExecutionMode.Parallel, + singleCommands); + } + + /// + /// 对目标列表中的每个目标,依次执行一组有参函数命令,每组命令的参数为targetList中的个体。 + /// + /// 目标列表 + /// 主体Group(各个目标)的执行顺序 + /// 单体Group(一个目标中指令)的执行顺序 + /// 单体命令模板 + protected virtual CommandGroup TargetListCommandGroup( + List targetList, ExecutionMode mainExecutionMode = ExecutionMode.Sequential, + ExecutionMode singleExecutionMode = ExecutionMode.Parallel, + params CommandBase[] singleCommands) + { + CommandGroup mainGroup = new CommandGroup(mainExecutionMode); + + foreach (CharacterBase target in targetList) + { + CommandGroup singleGroup = new CommandGroup(singleExecutionMode); + + foreach (CommandBase template in singleCommands) + { + CommandBase clone = template.Clone(); + + List allCommands = new List(); + + if (clone is CommandGroup group) + { + allCommands.AddRange(group.GetAllCommands(true)); + } + else + { + allCommands.Add(clone); + } + + foreach (CommandBase cmd in allCommands) + { + cmd.selfContext.context["Target"] = target; + } + + singleGroup.AddCommand(clone); + } + + mainGroup.AddCommand(singleGroup); + } + + return mainGroup; + } + } + #endregion + + #region Attack + public partial class CardLogicBase + { + /// + /// 获取最终伤害 + /// + /// 目标 + /// 元素标签,若为null则使用卡牌的元素标签 + public virtual int GetTargetedFinalDamage(CharacterBase target, List elementalTags = null) + { + return GetFinalDamage(target, elementalTags, out _, out _, out _, out _); + } + + /// + /// 获取最终伤害 + /// + /// 元素标签,若为null则使用卡牌的元素标签 + public virtual int GetNoTargetFinalDamage(List elementalTags = null) + { + return GetFinalDamage(null, elementalTags, out _, out _, out _, out _); + } + + + protected virtual int GetFinalDamage(CharacterBase target, List elementalTags, + out float baseDamageAfterOffset, out float elementalMultiplier, + out float magicMultiplier, out float finalMultiplier) + { + bool haveTarget = target != null; + + elementalTags ??= card.GetElementalKeywords(); + + //----计算基础伤害增量---- + int physicsOffset = 0; + if (card.HasKeyword("Physics") || card.HasKeyword("Slash") || card.HasKeyword("Prick") || card.HasKeyword("Strike")) + { + physicsOffset = user.GetAttribute("PhysicsDamageDealtOffset"); //物理伤害基础增量 + } + + int magicOffset = 0; + if (card.HasKeyword("Magic") || card.HasKeyword("Arcane") || card.HasKeyword("Sorcery")) + { + magicOffset = user.GetAttribute("MagicDamageDealtOffset"); //魔法伤害基础增量 + } + + //----计算伤害因数---- + + //计算元素伤害加成,注意,“物理Physics”也是一种元素,因此下方没有“通用物理伤害加成”的计算 + elementalMultiplier = 1; + foreach (string element in elementalTags) + { + float targetGain = haveTarget ? target.GetRawAttribute(element + "DamageGainMultiplier", 1) : 1; + + elementalMultiplier *= user.GetRawAttribute(element + "DamageDealtMultiplier", 1) * targetGain; + } + + //计算通用的魔法伤害加成 + magicMultiplier = 1; + if (card.HasKeyword("Magic") || card.HasKeyword("Arcane") || card.HasKeyword("Sorcery")) + { + float targetGain = haveTarget ? target.GetRawAttribute("MagicDamageGainMultiplier", 1) : 1; + + magicMultiplier = user.GetRawAttribute("MagicDamageDealtMultiplier", 1) * targetGain; + } + + //计算最终伤害加成 + float targetFinalGain = haveTarget ? target.GetRawAttribute("FinalDamageGainMultiplier", 1) : 1; + finalMultiplier = user.GetRawAttribute("FinalDamageDealtMultiplier", 1) * targetFinalGain; + + //----计算最终伤害---- + baseDamageAfterOffset = card.attributeSubmodule.GetCurrentAttribute("Damage") + physicsOffset + magicOffset; + float finalDamage = baseDamageAfterOffset * elementalMultiplier * magicMultiplier * finalMultiplier; + + return Mathf.RoundToInt(finalDamage); + } + } + #endregion + + #region Buffs + public partial class CardLogicBase + { + /// + /// 创建一个角色战斗Buff实例 + /// 注意,此函数依赖ModManager的类型注册功能,请确保在Mod加载时已注册对应Buff类型 + /// 此函数中的T并不是原型参数,而是获取Mod中注册的类型用的 + /// + public T CreateCharacterBuff(params object[] parameters) where T :CharacterCombatBuffBase + { + string buffTypeID = ModManager.GetTypeID(typeof(T)); + + if (string.IsNullOrEmpty(buffTypeID)) + { + Debug.LogError($"Failed to get buff name for type {typeof(T).FullName}"); + return null; + } + + return ModManager.CreateInstance(buffTypeID, parameters); + } + + public T CreateCharacterBuff(string buffTypeID, params object[] parameters) where T :CharacterCombatBuffBase + { + if (string.IsNullOrEmpty(buffTypeID)) + { + Debug.LogError($"Failed to get buff name for type {typeof(T).FullName}"); + return null; + } + + return ModManager.CreateInstance(buffTypeID, parameters); + } + + /// + /// 创建一个卡牌战斗Buff实例 + /// 注意,此函数依赖ModManager的类型注册功能,请确保在Mod加载时已注册对应Buff类型 + /// 此函数中的T并不是原型参数,而是获取Mod中注册的类型用的 + /// + public T CreateCardBuff(params object[] parameters) where T :CardBuffBase + { + string buffTypeID = ModManager.GetTypeID(typeof(T)); + + if (string.IsNullOrEmpty(buffTypeID)) + { + Debug.LogError($"Failed to get buff name for type {typeof(T).FullName}"); + return null; + } + + return ModManager.CreateInstance(buffTypeID, parameters); + } + + + public T CreateCardBuff(string buffTypeID, params object[] parameters) where T :CardBuffBase + { + if (string.IsNullOrEmpty(buffTypeID)) + { + Debug.LogError($"Failed to get buff name for type {typeof(T).FullName}"); + return null; + } + + return ModManager.CreateInstance(buffTypeID, parameters); + } + } + #endregion + + public abstract partial class CardLogicBase + { /// /// 获取衍生卡牌数据 /// @@ -161,6 +409,24 @@ namespace Continentis.MainGame.Card Debug.LogError($"Card {cardData.className} does not contain derivative card data '{dataName}'."); return null; } + + /// + /// 选中目标时触发的效果,效果在所有逻辑组件的Targeting之前执行(在SetUp函数生成EventSubmodule的时候)。 + /// 如果必须需要在逻辑组件之后执行,请重写Initialize函数。 + /// + public virtual void TargetingEffect(CharacterBase target) + { + + } + + /// + /// 取消选中目标时触发的效果,效果在所有逻辑组件的Untargeting之前执行(在SetUp函数生成EventSubmodule的时候)。 + /// 如果必须需要在逻辑组件之后执行,请重写Initialize函数。 + /// + public virtual void UntargetingEffect() + { + + } } /// @@ -171,15 +437,16 @@ namespace Continentis.MainGame.Card /// public abstract class CardLogicComponentBase { - protected CardLogicBase card; + protected CardLogicBase mainLogic; + protected CardInstance card => mainLogic.card; protected CharacterBase user => card.user; - protected CombatTeam team => card.UsingTeam; + protected CombatTeam usingTeam => card.usingTeam; public virtual void Initialize(CardLogicBase card) { - this.card = card; - card.eventSubmodule.onTargeting += TargetingEffect; - card.eventSubmodule.onUntargeting += UntargetingEffect; + this.mainLogic = card; + this.card.eventSubmodule.onTargeting += TargetingEffect; + this.card.eventSubmodule.onUntargeting += UntargetingEffect; } protected virtual void TargetingEffect(CharacterBase target) diff --git a/Assets/Scripts/MainGame/Card/CardMainFunctions.cs b/Assets/Scripts/MainGame/Card/CardMainFunctions.cs index 1780c769..13423550 100644 --- a/Assets/Scripts/MainGame/Card/CardMainFunctions.cs +++ b/Assets/Scripts/MainGame/Card/CardMainFunctions.cs @@ -12,28 +12,28 @@ using Random = UnityEngine.Random; namespace Continentis.MainGame.Card { - public partial class CardLogicBase + public partial class CardInstance { /// /// 选中目标时触发的效果,效果在所有逻辑组件的Targeting之前执行(在SetUp函数生成EventSubmodule的时候)。 /// 如果必须需要在逻辑组件之后执行,请重写Initialize函数。 /// - public virtual void TargetingEffect(CharacterBase target) + public virtual void Targeting(CharacterBase target) { - + eventSubmodule.onTargeting.Invoke(target); } /// /// 取消选中目标时触发的效果,效果在所有逻辑组件的Untargeting之前执行(在SetUp函数生成EventSubmodule的时候)。 /// 如果必须需要在逻辑组件之后执行,请重写Initialize函数。 /// - public virtual void UntargetingEffect() + public virtual void Untargeting() { - + eventSubmodule.onUntargeting.Invoke(); } } - public partial class CardLogicBase + public partial class CardInstance { /// /// 刷新卡牌属性 @@ -54,13 +54,13 @@ namespace Continentis.MainGame.Card /// /// 根据卡牌内容应用属性变化 /// - public virtual void ApplyAttributeChangesByCard() + public void ApplyAttributeChangesByCard() { - + cardLogic.ApplyAttributeChangesByCard(); } } - public partial class CardLogicBase + public partial class CardInstance { public virtual void DetectTargetsValidity(out List valid, out List notMet, out List 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 PlayEffect(List targetList) { - return null; + return new List(); } protected virtual void AfterPlayEffect(List 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> 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 + { + + } + } } } \ No newline at end of file diff --git a/Assets/Scripts/MainGame/Card/CardSubmodules/AttributeSubmodule.cs b/Assets/Scripts/MainGame/Card/CardSubmodules/AttributeSubmodule.cs index 0d4a3217..39d65b8c 100644 --- a/Assets/Scripts/MainGame/Card/CardSubmodules/AttributeSubmodule.cs +++ b/Assets/Scripts/MainGame/Card/CardSubmodules/AttributeSubmodule.cs @@ -6,11 +6,11 @@ using UnityEngine; namespace Continentis.MainGame.Card { - public partial class AttributeSubmodule : SubmoduleBase + public partial class AttributeSubmodule : SubmoduleBase { public AttributeGroup attributeGroup; - public AttributeSubmodule(CardLogicBase card) : base(card) + public AttributeSubmodule(CardInstance card) : base(card) { Initialize(card.cardData); } diff --git a/Assets/Scripts/MainGame/Card/CardSubmodules/CombatBuffSubmodule.cs b/Assets/Scripts/MainGame/Card/CardSubmodules/CombatBuffSubmodule.cs index f13cc889..a89ff1fc 100644 --- a/Assets/Scripts/MainGame/Card/CardSubmodules/CombatBuffSubmodule.cs +++ b/Assets/Scripts/MainGame/Card/CardSubmodules/CombatBuffSubmodule.cs @@ -5,11 +5,11 @@ using UnityEngine; namespace Continentis.MainGame.Card { - public partial class CombatBuffSubmodule : SubmoduleBase + public partial class CombatBuffSubmodule : SubmoduleBase { public List buffList; - public CombatBuffSubmodule(CardLogicBase owner) : base(owner) + public CombatBuffSubmodule(CardInstance owner) : base(owner) { buffList = new List(); } diff --git a/Assets/Scripts/MainGame/Card/CardSubmodules/ContentSubmodule.cs b/Assets/Scripts/MainGame/Card/CardSubmodules/ContentSubmodule.cs index cdcf8ba6..1b8a51e5 100644 --- a/Assets/Scripts/MainGame/Card/CardSubmodules/ContentSubmodule.cs +++ b/Assets/Scripts/MainGame/Card/CardSubmodules/ContentSubmodule.cs @@ -6,7 +6,7 @@ using UnityEngine; namespace Continentis.MainGame.Card { - public class ContentSubmodule : SubmoduleBase + public class ContentSubmodule : SubmoduleBase { public List keywords; @@ -22,7 +22,7 @@ namespace Continentis.MainGame.Card /// public bool dirtyMark; - public ContentSubmodule(CardLogicBase card) : base(card) + public ContentSubmodule(CardInstance card) : base(card) { keywords = card.cardData.keywords; cardName = card.cardData.displayName.Localize(); diff --git a/Assets/Scripts/MainGame/Card/CardSubmodules/EventSubmodule.cs b/Assets/Scripts/MainGame/Card/CardSubmodules/EventSubmodule.cs index 62f82290..e811e996 100644 --- a/Assets/Scripts/MainGame/Card/CardSubmodules/EventSubmodule.cs +++ b/Assets/Scripts/MainGame/Card/CardSubmodules/EventSubmodule.cs @@ -7,7 +7,7 @@ using UnityEngine.Events; namespace Continentis.MainGame.Card { - public partial class EventSubmodule : SubmoduleBase + public partial class EventSubmodule : SubmoduleBase { public UnityAction onTargeting; //选中目标时 public UnityAction onUntargeting; //取消选中目标时 @@ -27,11 +27,8 @@ namespace Continentis.MainGame.Card public OrderedDictionary onInitiativeDiscard; //此卡牌被主动弃牌时,如果读到任意一个true,打断弃牌行为,执行所有对应效果 public OrderedDictionary onExhaust; //此卡牌被消耗时 - public EventSubmodule(CardLogicBase card) : base(card) + public EventSubmodule(CardInstance card) : base(card) { - onTargeting += card.TargetingEffect; - onUntargeting = card.UntargetingEffect; - onCombatStart = new OrderedDictionary(); onCombatEnd = new OrderedDictionary(); diff --git a/Assets/Scripts/MainGame/Card/CardSubmodules/PlaySubmodule.cs b/Assets/Scripts/MainGame/Card/CardSubmodules/PlaySubmodule.cs index 56e6a096..d34ec4b8 100644 --- a/Assets/Scripts/MainGame/Card/CardSubmodules/PlaySubmodule.cs +++ b/Assets/Scripts/MainGame/Card/CardSubmodules/PlaySubmodule.cs @@ -2,11 +2,11 @@ using UnityEngine; namespace Continentis.MainGame.Card { - public partial class PlaySubmodule : SubmoduleBase + public partial class PlaySubmodule : SubmoduleBase { public bool isDuringPlayEffect; - public PlaySubmodule(CardLogicBase card) : base(card) + public PlaySubmodule(CardInstance card) : base(card) { isDuringPlayEffect = false; } diff --git a/Assets/Scripts/MainGame/Card/CardSubmodules/WeightSubmodule.cs b/Assets/Scripts/MainGame/Card/CardSubmodules/WeightSubmodule.cs index 1a578acc..d7ae8eb3 100644 --- a/Assets/Scripts/MainGame/Card/CardSubmodules/WeightSubmodule.cs +++ b/Assets/Scripts/MainGame/Card/CardSubmodules/WeightSubmodule.cs @@ -3,14 +3,14 @@ using UnityEngine; namespace Continentis.MainGame.Card { - public class WeightSubmodule : SubmoduleBase + public class WeightSubmodule : SubmoduleBase { public bool forceUse; public bool forceIgnore; public float baseWeight; public float currentWeight; - public WeightSubmodule(CardLogicBase owner) : base(owner) + public WeightSubmodule(CardInstance owner) : base(owner) { this.forceUse = false; this.forceIgnore = false; diff --git a/Assets/Scripts/MainGame/Card/CardView/CardViewBase.cs b/Assets/Scripts/MainGame/Card/CardView/CardViewBase.cs index d72cc2fc..2fde69fa 100644 --- a/Assets/Scripts/MainGame/Card/CardView/CardViewBase.cs +++ b/Assets/Scripts/MainGame/Card/CardView/CardViewBase.cs @@ -10,8 +10,7 @@ namespace Continentis.MainGame.Card { public abstract partial class CardViewBase : UIElementBase, IPointerEnterHandler, IPointerExitHandler { - public CardInstance cardInstance; - public CardLogicBase cardLogic => cardInstance.cardLogic; + public CardInstance card; public Canvas canvas; public RectTransform cardTransform; @@ -58,7 +57,7 @@ namespace Continentis.MainGame.Card isHovering = true; List allKeywords = new List(); - allKeywords.AddRange(cardLogic.contentSubmodule.keywords); + allKeywords.AddRange(card.contentSubmodule.keywords); keywordList.Enable(allKeywords); } @@ -75,20 +74,25 @@ namespace Continentis.MainGame.Card { if (card != null) { - cardInstance = card; + this.card = card; isOccupied = false; isHovering = false; isSelecting = false; isDuringPlaying = false; } - - cardNameText.text = cardLogic.contentSubmodule.cardName; - cardDescriptionText.text = cardLogic.contentSubmodule.interpretedFunctionText; - cardImage.sprite = cardLogic.contentSubmodule.cardSprite; - - if (cardLogic.contentSubmodule.cardRarity != Rarity.None) + else if (this.card == null) { - cardRarityMark.color = MainGameManager.Instance.basePrefabs.GetRarityColor(cardLogic.contentSubmodule.cardRarity); + Debug.LogError("CardViewBase Setup called with null card!"); + return; + } + + cardNameText.text = this.card.contentSubmodule.cardName; + cardDescriptionText.text = this.card.contentSubmodule.interpretedFunctionText; + cardImage.sprite = this.card.contentSubmodule.cardSprite; + + if (this.card.contentSubmodule.cardRarity != Rarity.None) + { + cardRarityMark.color = MainGameManager.Instance.basePrefabs.GetRarityColor(this.card.contentSubmodule.cardRarity); } else { @@ -98,21 +102,21 @@ namespace Continentis.MainGame.Card if (string.IsNullOrEmpty(collectionName)) collectionName = "Basic"; CardViewCollection collection = MainGameManager.Instance.basePrefabs.cardViewCollections[collectionName]; - List layoutTags = cardLogic.cardData.cardLayoutTags; //TODO:后续可扩展为动态布局标签 + List layoutTags = this.card.cardData.cardLayoutTags; //TODO:后续可扩展为动态布局标签 string firstLayoutTag = layoutTags.Count > 0 ? layoutTags[0] : "Default"; if (!collection.cardViews.ContainsKey(firstLayoutTag)) firstLayoutTag = "Default"; cardBackground.sprite = collection.cardViews[firstLayoutTag].background; - cardTypeText.text = cardLogic.contentSubmodule.cardType.ToString(); + cardTypeText.text = this.card.contentSubmodule.cardType.ToString(); staminaCostText.rectTransform.parent.gameObject.SetActive(true); - staminaCostText.text = cardLogic.attributeSubmodule.GetRoundCurrentAttribute("StaminaCost").ToString(); + staminaCostText.text = this.card.attributeSubmodule.GetRoundCurrentAttribute("StaminaCost").ToString(); - int manaCost = cardLogic.attributeSubmodule.GetRoundCurrentAttribute("ManaCost"); + int manaCost = this.card.attributeSubmodule.GetRoundCurrentAttribute("ManaCost"); manaCostText.rectTransform.parent.gameObject.SetActive(manaCost > 0); manaCostText.text = manaCost.ToString(); - if (cardLogic.HasKeyword("Unplayable")) // 如果卡牌不能被打出,则隐藏费用文本 + if (this.card.HasKeyword("Unplayable")) // 如果卡牌不能被打出,则隐藏费用文本 { staminaCostText.rectTransform.parent.gameObject.SetActive(false); manaCostText.rectTransform.parent.gameObject.SetActive(false); diff --git a/Assets/Scripts/MainGame/Card/CardView/HandCardView/HandCardView_Operations.cs b/Assets/Scripts/MainGame/Card/CardView/HandCardView/HandCardView_Operations.cs index 59217267..ebf86855 100644 --- a/Assets/Scripts/MainGame/Card/CardView/HandCardView/HandCardView_Operations.cs +++ b/Assets/Scripts/MainGame/Card/CardView/HandCardView/HandCardView_Operations.cs @@ -20,7 +20,7 @@ namespace Continentis.MainGame.Card public override void OnPointerEnter(PointerEventData eventData) { base.OnPointerEnter(eventData); - cardLogic.contentSubmodule.dirtyMark = true; + card.contentSubmodule.dirtyMark = true; if (CombatUIManager.Instance.selectingCardView == null) { canvas.overrideSorting = true; @@ -46,7 +46,7 @@ namespace Continentis.MainGame.Card { if(isOccupied) return; - if (CombatUIManager.Instance.combatMainPage.handCardSelector.selectedCards.Contains(cardInstance)) + if (CombatUIManager.Instance.combatMainPage.handCardSelector.selectedCards.Contains(card)) { CombatUIManager.Instance.combatMainPage.handCardSelector.Deselect(this); } @@ -59,7 +59,7 @@ namespace Continentis.MainGame.Card { if(isOccupied) return; - if (CombatUIManager.Instance.combatMainPage.customCardSelector.selectedCards.Contains(cardInstance)) + if (CombatUIManager.Instance.combatMainPage.customCardSelector.selectedCards.Contains(card)) { CombatUIManager.Instance.combatMainPage.customCardSelector.Deselect(this); } @@ -75,14 +75,14 @@ namespace Continentis.MainGame.Card isSelecting = true; CombatUIManager.Instance.selectingCardView = this; - cardInstance.user = CombatMainManager.Instance.currentCharacter; - cardLogic.DetectTargetsValidity(out validTargets, out conditionNotMetTargets, out invalidTargets); + card.user = CombatMainManager.Instance.currentCharacter; + card.DetectTargetsValidity(out validTargets, out conditionNotMetTargets, out invalidTargets); - if (cardLogic.attributeSubmodule.targetCount == 1) + if (card.attributeSubmodule.targetCount == 1) { CombatUIManager.Instance.arrowsPage.GeneratePointerArrow(cardTransform.position, cardTransform.position, true); } - else if (cardLogic.attributeSubmodule.targetCount == -1) + else if (card.attributeSubmodule.targetCount == -1) { CombatUIManager.Instance.arrowsPage.GeneratePointerArrow(cardTransform.position, cardTransform.position, true); @@ -105,16 +105,16 @@ namespace Continentis.MainGame.Card // 如果悬停视图不是空的,说明鼠标移动到了一个新的目标上 if (CombatUIManager.Instance.hoveringCharacterView != null) { - cardLogic.eventSubmodule.onTargeting(CombatUIManager.Instance.hoveringCharacterView.character); + card.Targeting(CombatUIManager.Instance.hoveringCharacterView.character); currentTargetingCharacterView = CombatUIManager.Instance.hoveringCharacterView; } else // 悬停视图是空的,说明鼠标离开了之前的目标 { - cardLogic.eventSubmodule.onUntargeting(); + card.Untargeting(); currentTargetingCharacterView = null; } - cardLogic.contentSubmodule.dirtyMark = true; + card.contentSubmodule.dirtyMark = true; } Vector3 startPosition = cardTransform.position + new Vector3(0, cardTransform.rect.height * cardTransform.lossyScale.y / 2, 0); @@ -124,7 +124,7 @@ namespace Continentis.MainGame.Card CombatCharacterViewBase hoveringCharacterView = CombatUIManager.Instance.hoveringCharacterView; CharacterBase hoveringCharacter = hoveringCharacterView != null ? hoveringCharacterView.character : null; - if (cardLogic.attributeSubmodule.targetCount == 1) + if (card.attributeSubmodule.targetCount == 1) { mainPointerArrow.SetArrow(startPosition, endPosition); @@ -148,7 +148,7 @@ namespace Continentis.MainGame.Card mainPointerArrow.SetColor(Color.white); } } - else if (cardLogic.attributeSubmodule.targetCount == -1) + else if (card.attributeSubmodule.targetCount == -1) { mainPointerArrow.SetArrow(startPosition, endPosition); @@ -213,7 +213,7 @@ namespace Continentis.MainGame.Card CombatUIManager.Instance.arrowsPage.otherPointerArrows.ForEach(arrow => { arrow.gameObject.SetActive(false); }); } } - else if (cardLogic.attributeSubmodule.targetCount == 0) + else if (card.attributeSubmodule.targetCount == 0) { Vector3 cardPosition = SpaceConverter.ScreenPointToUIPoint(arrowCanvasRect, eventData.position, uiCamera); cardTransform.position = cardPosition; @@ -234,21 +234,21 @@ namespace Continentis.MainGame.Card CombatUIManager.Instance.selectingCardView = null; canvas.overrideSorting = false; canvas.sortingOrder = 0; - cardLogic.eventSubmodule.onUntargeting(); - cardLogic.contentSubmodule.dirtyMark = true; + card.eventSubmodule.onUntargeting(); + card.contentSubmodule.dirtyMark = true; } else { return; } - if (cardLogic.HasKeyword("Unplayable")) // 如果有“不能打出”关键词,直接返回 + if (card.HasKeyword("Unplayable")) // 如果有“不能打出”关键词,直接返回 { return; } - if (!cardLogic.HasKeyword("TargetSelf")) + if (!card.HasKeyword("TargetSelf")) { if (!validTargets.Contains(hoveringCharacter)) { @@ -258,14 +258,14 @@ namespace Continentis.MainGame.Card } // 根据目标类型,打出卡牌 - if (cardLogic.attributeSubmodule.targetCount == 1) + if (card.attributeSubmodule.targetCount == 1) { if (hoveringCharacter != null && validTargets.Contains(hoveringCharacter)) { - if (!cardLogic.Play(new List() { hoveringCharacter })) + if (!card.Play(new List() { hoveringCharacter })) { - cardLogic.eventSubmodule.onUntargeting(); - cardLogic.contentSubmodule.dirtyMark = true; + card.eventSubmodule.onUntargeting(); + card.contentSubmodule.dirtyMark = true; } } } @@ -275,18 +275,18 @@ namespace Continentis.MainGame.Card bool isInDropZone = RectTransformUtility.RectangleContainsScreenPoint(dropZone, eventData.position, uiCamera); List targetList = new List(); - if (cardLogic.attributeSubmodule.targetCount == -1) + if (card.attributeSubmodule.targetCount == -1) { targetList.AddRange(validTargets); } - else if (cardLogic.HasKeyword("TargetSelf") && cardLogic.attributeSubmodule.targetCount == 0) + else if (card.HasKeyword("TargetSelf") && card.attributeSubmodule.targetCount == 0) { - targetList.Add(cardLogic.user); + targetList.Add(card.user); } if (!isInDropZone) { - cardLogic.Play(targetList); + card.Play(targetList); } } } diff --git a/Assets/Scripts/MainGame/Card/LogicComponents/CardLogicComponent_Attack.cs b/Assets/Scripts/MainGame/Card/LogicComponents/CardLogicComponent_Attack.cs index 0f116cab..a711e553 100644 --- a/Assets/Scripts/MainGame/Card/LogicComponents/CardLogicComponent_Attack.cs +++ b/Assets/Scripts/MainGame/Card/LogicComponents/CardLogicComponent_Attack.cs @@ -8,12 +8,12 @@ namespace Continentis.MainGame.Card { protected override void TargetingEffect(CharacterBase target) { - card.SetAttribute("DisplayDamage", card.GetFinalDamage(target)); + card.SetAttribute("DisplayDamage", mainLogic.GetTargetedFinalDamage(target)); } protected override void UntargetingEffect() { - card.SetAttribute("DisplayDamage", card.GetUserDamage()); + card.SetAttribute("DisplayDamage", mainLogic.GetNoTargetFinalDamage()); } /// diff --git a/Assets/Scripts/MainGame/Card/LogicComponents/CardLogicComponent_SelectCustomCards.cs b/Assets/Scripts/MainGame/Card/LogicComponents/CardLogicComponent_SelectCustomCards.cs index a9254e2a..87b1652c 100644 --- a/Assets/Scripts/MainGame/Card/LogicComponents/CardLogicComponent_SelectCustomCards.cs +++ b/Assets/Scripts/MainGame/Card/LogicComponents/CardLogicComponent_SelectCustomCards.cs @@ -26,7 +26,7 @@ namespace Continentis.MainGame.Card commandGroup.AddCommand(new Cmd_Function(() => { - customCardSelector.Setup(title, card.cardInstance, cardsToSelect, maxSelection, forceMax); + customCardSelector.Setup(title, mainLogic.card, cardsToSelect, maxSelection, forceMax); })); commandGroup.AddCommand(new Cmd_WaitForUI(customCardSelector)); commandGroup.AddCommand(new Cmd_Function(() => diff --git a/Assets/Scripts/MainGame/Card/LogicComponents/CardLogicComponent_SelectHandCards.cs b/Assets/Scripts/MainGame/Card/LogicComponents/CardLogicComponent_SelectHandCards.cs index 23f5b08d..1f847a34 100644 --- a/Assets/Scripts/MainGame/Card/LogicComponents/CardLogicComponent_SelectHandCards.cs +++ b/Assets/Scripts/MainGame/Card/LogicComponents/CardLogicComponent_SelectHandCards.cs @@ -42,7 +42,7 @@ namespace Continentis.MainGame.Card commandGroup.AddCommand(new Cmd_Function(() => { - handCardSelector.Setup(title, card.cardInstance, maxSelection, selectCondition, forceMax); + handCardSelector.Setup(title, mainLogic.card, maxSelection, selectCondition, forceMax); })); commandGroup.AddCommand(new Cmd_WaitForUI(handCardSelector)); commandGroup.AddCommand(new Cmd_Function(() => diff --git a/Assets/Scripts/MainGame/Character/CharacterBase.cs b/Assets/Scripts/MainGame/Character/CharacterBase.cs index 3172232c..b20ecc03 100644 --- a/Assets/Scripts/MainGame/Character/CharacterBase.cs +++ b/Assets/Scripts/MainGame/Character/CharacterBase.cs @@ -60,12 +60,12 @@ namespace Continentis.MainGame.Character [ShowNativeProperty] public RecordSubmodule recordSubmodule { get; private set; } - public virtual void Initialize(Fraction fraction, CharacterData data) + public CharacterBase(CharacterData data, Fraction fraction) { (this as IGameElement).Initialize(); - this.fraction = fraction; this.data = data; + this.fraction = fraction; switch (fraction) { @@ -91,7 +91,6 @@ namespace Continentis.MainGame.Character this.logicBase = GenerateCharacterLogic(data); this.logicBase.Initialize(this); - } /// diff --git a/Assets/Scripts/MainGame/Character/CharacterBuff/CharacterCombatBuffBase.cs b/Assets/Scripts/MainGame/Character/CharacterBuff/CharacterCombatBuffBase.cs index de8f4c9a..a33f6494 100644 --- a/Assets/Scripts/MainGame/Character/CharacterBuff/CharacterCombatBuffBase.cs +++ b/Assets/Scripts/MainGame/Character/CharacterBuff/CharacterCombatBuffBase.cs @@ -91,21 +91,21 @@ namespace Continentis.MainGame.Character attachedCharacter.combatBuffSubmodule.buffList.Exclude(this).For(buff => buff.eventSubmodule?.onOtherBuffApplied.Invoke(this)); RefreshAttributes(); iconSubmodule?.Update(); - attachedCharacter.deckSubmodule.GetAllCards().ForEach(card => card.cardLogic.RefreshCardAttributes()); + attachedCharacter.deckSubmodule.GetAllCards().ForEach(card => card.RefreshCardAttributes()); } public override void Remove() { OnBuffRemove(); this.attachedCharacter.combatBuffSubmodule.buffList.Remove(this); - attachedCharacter.deckSubmodule.GetAllCards().ForEach(card => card.cardLogic.RefreshCardAttributes()); + attachedCharacter.deckSubmodule.GetAllCards().ForEach(card => card.RefreshCardAttributes()); attachedCharacter.combatBuffSubmodule.buffList.Exclude(this).For(buff => buff.eventSubmodule?.onOtherBuffRemoved.Invoke(this)); } public override void UntriggerRemove() { this.attachedCharacter.combatBuffSubmodule.buffList.Remove(this); - attachedCharacter.deckSubmodule.GetAllCards().ForEach(card => card.cardLogic.RefreshCardAttributes()); + attachedCharacter.deckSubmodule.GetAllCards().ForEach(card => card.RefreshCardAttributes()); } /// diff --git a/Assets/Scripts/MainGame/Character/CharacterInstance.cs b/Assets/Scripts/MainGame/Character/CharacterLogicBase.cs similarity index 89% rename from Assets/Scripts/MainGame/Character/CharacterInstance.cs rename to Assets/Scripts/MainGame/Character/CharacterLogicBase.cs index 229a7517..ef66a38e 100644 --- a/Assets/Scripts/MainGame/Character/CharacterInstance.cs +++ b/Assets/Scripts/MainGame/Character/CharacterLogicBase.cs @@ -7,7 +7,7 @@ namespace Continentis.MainGame.Character { public partial class CharacterLogicBase { - protected CharacterBase character; + protected CharacterBase character; public virtual void Initialize(CharacterBase character) { this.character = character; diff --git a/Assets/Scripts/MainGame/Character/CharacterInstance.cs.meta b/Assets/Scripts/MainGame/Character/CharacterLogicBase.cs.meta similarity index 100% rename from Assets/Scripts/MainGame/Character/CharacterInstance.cs.meta rename to Assets/Scripts/MainGame/Character/CharacterLogicBase.cs.meta diff --git a/Assets/Scripts/MainGame/Character/CharacterMainFunctions.cs b/Assets/Scripts/MainGame/Character/CharacterMainFunctions.cs index 3cdc380c..f8d0c28c 100644 --- a/Assets/Scripts/MainGame/Character/CharacterMainFunctions.cs +++ b/Assets/Scripts/MainGame/Character/CharacterMainFunctions.cs @@ -300,20 +300,20 @@ namespace Continentis.MainGame.Character { bool CanAfford(CardInstance card, int stamina, int mana) { - return card.cardLogic.GetAttribute("StaminaCost") <= stamina && - card.cardLogic.GetAttribute("ManaCost") <= mana; + return card.GetAttribute("StaminaCost") <= stamina && + card.GetAttribute("ManaCost") <= mana; } bool CheckAvailabilityAndSetTargets(CardInstance card, out List targets) { - card.cardLogic.DetectTargetsValidity(out List valid, out _, out _); - if (valid.Count == 0 || !card.cardLogic.CheckBeforePlay()) + card.DetectTargetsValidity(out List valid, out _, out _); + if (valid.Count == 0 || !card.CheckBeforePlay()) { targets = null; return false; // 无有效目标或无法使用则跳过 } - targets = card.cardLogic.SetRandomTargets(valid); + targets = card.SetRandomTargets(valid); return true; } @@ -331,7 +331,7 @@ namespace Continentis.MainGame.Character foreach (CardInstance card in availableCards) { - if (card.cardLogic.weightSubmodule.forceUse) + if (card.weightSubmodule.forceUse) { forced.Add(card); } @@ -360,8 +360,8 @@ namespace Continentis.MainGame.Character } intended.Add(new IntendedCard(card, targets)); - remainingStamina -= card.cardLogic.GetAttribute("StaminaCost"); - remainingMana -= card.cardLogic.GetAttribute("ManaCost"); + remainingStamina -= card.GetAttribute("StaminaCost"); + remainingMana -= card.GetAttribute("ManaCost"); } // 行动力不足则跳过该卡 } @@ -377,7 +377,7 @@ namespace Continentis.MainGame.Character break; } - float totalWeight = affordableCards.Sum(card => card.cardLogic.weightSubmodule.currentWeight); + float totalWeight = affordableCards.Sum(card => card.weightSubmodule.currentWeight); if (totalWeight <= 0f) break; float r = Random.value * totalWeight; @@ -385,7 +385,7 @@ namespace Continentis.MainGame.Character CardInstance chosen = null; foreach (CardInstance card in affordableCards) { - accum += card.cardLogic.weightSubmodule.currentWeight; + accum += card.weightSubmodule.currentWeight; if (r <= accum) { chosen = card; @@ -403,8 +403,8 @@ namespace Continentis.MainGame.Character intended.Add(new IntendedCard(chosen, targets)); normal.Remove(chosen); - remainingStamina -= chosen.cardLogic.GetAttribute("StaminaCost"); - remainingMana -= chosen.cardLogic.GetAttribute("ManaCost"); + remainingStamina -= chosen.GetAttribute("StaminaCost"); + remainingMana -= chosen.GetAttribute("ManaCost"); } } diff --git a/Assets/Scripts/MainGame/Character/CharacterSubmodules/DeckSubmodule.cs b/Assets/Scripts/MainGame/Character/CharacterSubmodules/DeckSubmodule.cs index e5402ede..1090f537 100644 --- a/Assets/Scripts/MainGame/Character/CharacterSubmodules/DeckSubmodule.cs +++ b/Assets/Scripts/MainGame/Character/CharacterSubmodules/DeckSubmodule.cs @@ -32,11 +32,11 @@ namespace Continentis.MainGame.Character { public void SetUpHandCardViews() { - DrawPile.ForEach(c=> c.GenerateHandCardView(CombatUIManager.Instance.combatMainPage.drawPile)); - HandPile.ForEach(c=> + DrawPile.ForEach(card=> card.GenerateHandCardView(CombatUIManager.Instance.combatMainPage.drawPile)); + HandPile.ForEach(card => { - if(!c.cardLogic.playSubmodule.isDuringPlayEffect) - c.GenerateHandCardView(CombatUIManager.Instance.combatMainPage.handPile); + if(!card.playSubmodule.isDuringPlayEffect) + card.GenerateHandCardView(CombatUIManager.Instance.combatMainPage.handPile); }); DiscardPile.ForEach(c=>c.GenerateHandCardView(CombatUIManager.Instance.combatMainPage.discardPile)); ExhaustPile.ForEach(c=>c.GenerateHandCardView(CombatUIManager.Instance.combatMainPage.exhaustPile)); @@ -83,7 +83,7 @@ namespace Continentis.MainGame.Character public void PlayCard(CardInstance card, List targetList) { - card.cardLogic.Play(targetList, owner); + card.Play(targetList, owner); } public CommandGroup DiscardCard(CardInstance card, bool initiative, float interval = 0.1f) diff --git a/Assets/Scripts/MainGame/Character/CharacterSubmodules/RecordSubmodule.cs b/Assets/Scripts/MainGame/Character/CharacterSubmodules/RecordSubmodule.cs index 10d4a660..6ccbc629 100644 --- a/Assets/Scripts/MainGame/Character/CharacterSubmodules/RecordSubmodule.cs +++ b/Assets/Scripts/MainGame/Character/CharacterSubmodules/RecordSubmodule.cs @@ -36,7 +36,7 @@ namespace Continentis.MainGame.Character } ActionRecord currentRecord = actionRecords[actionRecords.Count - 1]; currentRecord.cardsPlayed.Add(card); - Debug.Log($"在回合 {currentRecord.round} 行动 {currentRecord.actionIndex} 中记录了卡牌 {card.cardLogic.contentSubmodule.cardName} 的使用。"); + Debug.Log($"在回合 {currentRecord.round} 行动 {currentRecord.actionIndex} 中记录了卡牌 {card.contentSubmodule.cardName} 的使用。"); } } diff --git a/Assets/Scripts/MainGame/Character/CombatNPC.cs b/Assets/Scripts/MainGame/Character/CombatNPC.cs index abcddf33..30cd3ac0 100644 --- a/Assets/Scripts/MainGame/Character/CombatNPC.cs +++ b/Assets/Scripts/MainGame/Character/CombatNPC.cs @@ -5,17 +5,14 @@ namespace Continentis.MainGame.Character { public partial class CombatNPC : CharacterBase { - + public CombatNPC(CharacterData data, Fraction fraction) : base(data, fraction) + { + + } } public partial class CombatNPC { - public static CombatNPC GenerateCharacter(CharacterData data, Fraction fraction) - { - CombatNPC combatNpc = new CombatNPC(); - combatNpc.Initialize(fraction, data); - - return combatNpc; - } + } } \ No newline at end of file diff --git a/Assets/Scripts/MainGame/Character/PlayerHero.cs b/Assets/Scripts/MainGame/Character/PlayerHero.cs index 1b9d8841..d04cb422 100644 --- a/Assets/Scripts/MainGame/Character/PlayerHero.cs +++ b/Assets/Scripts/MainGame/Character/PlayerHero.cs @@ -8,19 +8,13 @@ namespace Continentis.MainGame.Character { public partial class PlayerHero : CharacterBase { - + public PlayerHero(CharacterData data, Fraction fraction) : base(data, fraction) + { + } } public partial class PlayerHero { - public static PlayerHero GenerateCharacter(CharacterData data) - { - PlayerHero playerHero = new PlayerHero(); - playerHero.Initialize(Fraction.Player, data); - - return playerHero; - } - public override void InitializeCards() { base.InitializeCards(); @@ -30,13 +24,13 @@ namespace Continentis.MainGame.Character drawPile.Shuffle(); // 处理“固有”卡牌 - foreach (CardInstance card in drawPile.Where(card => card.cardLogic.HasKeyword("Innate")).ToList()) + foreach (CardInstance card in drawPile.Where(card => card.HasKeyword("Innate")).ToList()) { deckSubmodule.TransferCard("Draw", 0, card); } // 处理“迟钝”卡牌 - foreach (CardInstance card in drawPile.Where(card => card.cardLogic.HasKeyword("Tardy")).ToList()) + foreach (CardInstance card in drawPile.Where(card => card.HasKeyword("Tardy")).ToList()) { deckSubmodule.TransferCard("Draw", "Discard", card); } diff --git a/Assets/Scripts/MainGame/Combat/CombatCharacterController.cs b/Assets/Scripts/MainGame/Combat/CombatCharacterController.cs index 9e8911e8..9bf60c93 100644 --- a/Assets/Scripts/MainGame/Combat/CombatCharacterController.cs +++ b/Assets/Scripts/MainGame/Combat/CombatCharacterController.cs @@ -44,7 +44,7 @@ namespace Continentis.MainGame.Combat foreach (var data in playerHeroDataList) { - PlayerHero hero = PlayerHero.GenerateCharacter(data); + PlayerHero hero = new PlayerHero(data, Fraction.Player); CombatCharacterViewBase view = hero.GenerateCharacterView(new Vector3(-4.5f, 0, 0)); playerHeroes.Add(hero); @@ -54,7 +54,7 @@ namespace Continentis.MainGame.Combat foreach (var data in enemyDataList) { - CombatNPC enemy = CombatNPC.GenerateCharacter(data, Fraction.Enemy); + CombatNPC enemy = new CombatNPC(data, Fraction.Enemy); CombatCharacterViewBase view = enemy.GenerateCharacterView(new Vector3(4.5f, 0, 0)); view.mainView.transform.localEulerAngles = new Vector3(0, 180, 0); @@ -82,7 +82,7 @@ namespace Continentis.MainGame.Combat return; } - CombatNPC npc = CombatNPC.GenerateCharacter(data, fraction); + CombatNPC npc = new CombatNPC(data, fraction); npc.InitializeCards(); Vector3 eulerAngles = fraction == Fraction.Enemy ? new Vector3(0, 180, 0) : Vector3.zero; diff --git a/Assets/Scripts/MainGame/Combat/CombatMainManager.cs b/Assets/Scripts/MainGame/Combat/CombatMainManager.cs index 97f94229..337a1ed3 100644 --- a/Assets/Scripts/MainGame/Combat/CombatMainManager.cs +++ b/Assets/Scripts/MainGame/Combat/CombatMainManager.cs @@ -80,7 +80,7 @@ namespace Continentis.MainGame.Combat foreach (CardInstance card in characterController.characters.SelectMany(character => character.deckSubmodule.GetAllCards())) { - card.cardLogic.eventSubmodule.onCombatStart.Invoke(); + card.eventSubmodule.onCombatStart.Invoke(); } NextRound(); @@ -104,7 +104,7 @@ namespace Continentis.MainGame.Combat if (character is CombatNPC npc) { npc.IntentionBrain(); - npc.deckSubmodule.PoolPile.ForEach(card => card.cardLogic.weightSubmodule.RefreshCurrentWeight()); + npc.deckSubmodule.PoolPile.ForEach(card => card.weightSubmodule.RefreshCurrentWeight()); npc.intentionSubmodule.getIntendedCards.Invoke(); foreach (IntendedCard intendedCard in npc.intentionSubmodule.intendedCards) @@ -112,9 +112,9 @@ namespace Continentis.MainGame.Combat intendedCard.cardInstance.GenerateIntentionCardView(); if (intendedCard.targets.Count > 0) { - var cardLogic = intendedCard.cardInstance.cardLogic; - cardLogic.eventSubmodule.onTargeting(intendedCard.targets[0]); - cardLogic.contentSubmodule.dirtyMark = true; + CardInstance card = intendedCard.cardInstance; + card.eventSubmodule.onTargeting(intendedCard.targets[0]); + card.contentSubmodule.dirtyMark = true; //TODO: 现在仅对第一个目标显示指向,后续可以对多目标进行优化 } } @@ -190,7 +190,7 @@ namespace Continentis.MainGame.Combat foreach (IntendedCard intendedCard in currentCharacter.intentionSubmodule.intendedCards) { CommandQueueManager.Instance.AddCommand(new Cmd_Function(0.25f, () => intendedCard.cardInstance.DestroyIntentionCardView())); - intendedCard.cardInstance.cardLogic.Play(intendedCard.targets, currentCharacter, false); + intendedCard.cardInstance.Play(intendedCard.targets, currentCharacter, false); } CommandQueueManager.Instance.AddCommand(new Cmd_Function(0f, EndAction)); } @@ -208,7 +208,7 @@ namespace Continentis.MainGame.Combat CommandQueueManager.Instance.AddCommand(new Cmd_Function(currentCharacter.eventSubmodule.onActionEnd.Invoke)); foreach (var card in currentCharacter.deckSubmodule.GetAllCards()) { - CommandQueueManager.Instance.AddCommand(new Cmd_Function(card.cardLogic.eventSubmodule.onActionEnd.Invoke)); + CommandQueueManager.Instance.AddCommand(new Cmd_Function(card.eventSubmodule.onActionEnd.Invoke)); } CommandQueueManager.Instance.AddCommand(new Cmd_Function(() => @@ -220,8 +220,8 @@ namespace Continentis.MainGame.Combat Debug.Log(currentCharacter.data.className + " 结束行动,整理手牌。"); List handPile = new List(playerHero.deckSubmodule.HandPile); - List cardToRetain = handPile.Where(card => card.cardLogic.HasKeyword("Retain")).ToList(); //含有“保留”关键词的卡牌 - List cardToExhaust = handPile.Where(card => card.cardLogic.HasKeyword("Ethereal")).ToList(); //含有“虚无”关键词的卡牌 + List cardToRetain = handPile.Where(card => card.HasKeyword("Retain")).ToList(); //含有“保留”关键词的卡牌 + List cardToExhaust = handPile.Where(card => card.HasKeyword("Ethereal")).ToList(); //含有“虚无”关键词的卡牌 List cardsToDiscard = handPile.Except(cardToRetain).Except(cardToExhaust).ToList(); //其他卡牌,默认丢弃 CommandQueueManager.Instance.AddCommand(playerHero.deckSubmodule.ExhaustCards(cardToExhaust)); CommandQueueManager.Instance.AddCommand(playerHero.deckSubmodule.DiscardCards(cardsToDiscard, false)); diff --git a/Assets/Scripts/MainGame/Commands/Cmd_DiscardCards.cs b/Assets/Scripts/MainGame/Commands/Cmd_DiscardCards.cs index ed6021a2..06c76288 100644 --- a/Assets/Scripts/MainGame/Commands/Cmd_DiscardCards.cs +++ b/Assets/Scripts/MainGame/Commands/Cmd_DiscardCards.cs @@ -72,11 +72,11 @@ namespace Continentis.MainGame.Commands { if (isInitiative) { - if (card.cardLogic.eventSubmodule.onInitiativeDiscard.GetChecks().Any()) // 如果主动弃牌后,有触发条件,则打断弃牌,直接触发效果 + if (card.eventSubmodule.onInitiativeDiscard.GetChecks().Any()) // 如果主动弃牌后,有触发条件,则打断弃牌,直接触发效果 { CommandQueueManager.Instance.AddCommand(new Cmd_Function(() => { - card.cardLogic.eventSubmodule.onInitiativeDiscard.GetEffects().ForEach(effect => effect.Invoke()); + card.eventSubmodule.onInitiativeDiscard.GetEffects().ForEach(effect => effect.Invoke()); })); return Observable.Return(Unit.Default); } diff --git a/Assets/Scripts/MainGame/Commands/Cmd_DrawCards.cs b/Assets/Scripts/MainGame/Commands/Cmd_DrawCards.cs index dd06c154..8b6f855b 100644 --- a/Assets/Scripts/MainGame/Commands/Cmd_DrawCards.cs +++ b/Assets/Scripts/MainGame/Commands/Cmd_DrawCards.cs @@ -97,7 +97,7 @@ namespace Continentis.MainGame.Commands CardInstance card = deck.DrawPile[0]; deck.TransferCard(deck.DrawPile, deck.HandPile, card); - card.cardLogic.eventSubmodule.onDraw.Invoke(); + card.eventSubmodule.onDraw.Invoke(); card.handCardView.TransferCardView(CombatUIManager.Instance.combatMainPage.handPile); Vector3 targetPosition = CombatUIManager.Instance.combatMainPage.handPile.GetCardPosition(index, totalCount); @@ -116,7 +116,7 @@ namespace Continentis.MainGame.Commands private IObservable Draw(CardInstance card, int index, int totalCount) { deck.TransferCard(card.cardLocation.pileName, "Hand", card); - card.cardLogic.eventSubmodule.onDraw.Invoke(); + card.eventSubmodule.onDraw.Invoke(); card.handCardView.TransferCardView(CombatUIManager.Instance.combatMainPage.handPile); Vector3 targetPosition = CombatUIManager.Instance.combatMainPage.handPile.GetCardPosition(index, totalCount); diff --git a/Assets/Scripts/MainGame/Commands/Cmd_ExhaustCards.cs b/Assets/Scripts/MainGame/Commands/Cmd_ExhaustCards.cs index dd987c09..511f34b0 100644 --- a/Assets/Scripts/MainGame/Commands/Cmd_ExhaustCards.cs +++ b/Assets/Scripts/MainGame/Commands/Cmd_ExhaustCards.cs @@ -72,7 +72,7 @@ namespace Continentis.MainGame.Commands private IObservable PlayerExhaustCard(CardInstance card) { deck.TransferCard(deck.Pile(card.cardLocation.pileName), deck.ExhaustPile, card); - card.cardLogic.eventSubmodule.onExhaust.Invoke(); + card.eventSubmodule.onExhaust.Invoke(); card.handCardView.TransferCardView(CombatUIManager.Instance.combatMainPage.exhaustPile); @@ -94,7 +94,7 @@ namespace Continentis.MainGame.Commands private IObservable NpcExhaustCard(CardInstance card) { deck.TransferCard(deck.Pile(card.cardLocation.pileName), deck.ExhaustPile, card); - card.cardLogic.eventSubmodule.onExhaust.Invoke(); + card.eventSubmodule.onExhaust.Invoke(); return Observable.Timer(TimeSpan.FromSeconds(singleCardAnimationDuration)).AsUnitObservable(); } } diff --git a/Assets/Scripts/MainGame/Commands/Cmd_UsePowerCards.cs b/Assets/Scripts/MainGame/Commands/Cmd_UsePowerCards.cs index a95b3e27..6e5256c4 100644 --- a/Assets/Scripts/MainGame/Commands/Cmd_UsePowerCards.cs +++ b/Assets/Scripts/MainGame/Commands/Cmd_UsePowerCards.cs @@ -77,7 +77,7 @@ namespace Continentis.MainGame.Commands card.handCardView.TransferCardView(CombatUIManager.Instance.combatMainPage.gravePile); RectTransform cardTransform = card.handCardView.cardTransform; - Vector2 userViewPosition = card.cardLogic.user.characterView.hudContainer.GetComponent().position; + Vector2 userViewPosition = card.user.characterView.hudContainer.GetComponent().position; cardTransform.DOMove(userViewPosition, singleCardAnimationDuration).SetEase(Ease.Linear).Play(); cardTransform.DOScale(Vector3.zero, singleCardAnimationDuration).SetEase(Ease.Linear).OnComplete(() => { diff --git a/Assets/Scripts/MainGame/UI/CombatMainPage/CustomCardSelectionInterface.cs b/Assets/Scripts/MainGame/UI/CombatMainPage/CustomCardSelectionInterface.cs index f1de9024..e5532e1f 100644 --- a/Assets/Scripts/MainGame/UI/CombatMainPage/CustomCardSelectionInterface.cs +++ b/Assets/Scripts/MainGame/UI/CombatMainPage/CustomCardSelectionInterface.cs @@ -58,7 +58,7 @@ namespace Continentis.MainGame.UI this.selectedCards = new List(); foreach (CardInstance card in this.cardsToSelect) { - Debug.Log($"Card to select: {card.cardLogic.contentSubmodule.cardName} from {card.cardLocation.pileName}"); + Debug.Log($"Card to select: {card.contentSubmodule.cardName} from {card.cardLocation.pileName}"); CombatUIManager.Instance.combatMainPage.Pile(card.cardLocation.pileName).RemoveCard(card.handCardView); card.handCardView.transform.SetParent(selectionContainer, false); card.handCardView.transform.localScale = Vector3.one; @@ -80,7 +80,7 @@ namespace Continentis.MainGame.UI public void Select(HandCardView cardView) { - if (selectedCards.Contains(cardView.cardInstance)) + if (selectedCards.Contains(cardView.card)) { return; } @@ -90,7 +90,7 @@ namespace Continentis.MainGame.UI return; } - selectedCards.Add(cardView.cardInstance); + selectedCards.Add(cardView.card); cardView.EnableSelectShadow(); if (isForcedMaximum) { @@ -100,7 +100,7 @@ namespace Continentis.MainGame.UI public void Deselect(HandCardView cardView) { - selectedCards.Remove(cardView.cardInstance); + selectedCards.Remove(cardView.card); cardView.DisableSelectShadow(); if (isForcedMaximum) { diff --git a/Assets/Scripts/MainGame/UI/CombatMainPage/HandCardSelectionInterface.cs b/Assets/Scripts/MainGame/UI/CombatMainPage/HandCardSelectionInterface.cs index db371e87..2241e934 100644 --- a/Assets/Scripts/MainGame/UI/CombatMainPage/HandCardSelectionInterface.cs +++ b/Assets/Scripts/MainGame/UI/CombatMainPage/HandCardSelectionInterface.cs @@ -80,19 +80,19 @@ namespace Continentis.MainGame.UI return; } - if (selectedCards.Contains(cardView.cardInstance)) + if (selectedCards.Contains(cardView.card)) { return; } - if (!selectionCondition(cardView.cardInstance)) + if (!selectionCondition(cardView.card)) { return; } - string pileName = cardView.cardInstance.cardLocation.pileName; - int index = cardView.cardInstance.deck.Pile(pileName).IndexOf(cardView.cardInstance); - selectedCards.Add(cardView.cardInstance); + string pileName = cardView.card.cardLocation.pileName; + int index = cardView.card.deck.Pile(pileName).IndexOf(cardView.card); + selectedCards.Add(cardView.card); CombatUIManager.Instance.combatMainPage.Pile(pileName).RemoveCard(cardView); cardView.transform.SetParent(selectionContainer, false); @@ -105,9 +105,9 @@ namespace Continentis.MainGame.UI public void Deselect(HandCardView cardView) { - CardLocation location = cardView.cardInstance.cardLocation; + CardLocation location = cardView.card.cardLocation; PileBase uiPile = CombatUIManager.Instance.combatMainPage.Pile(location.pileName); - selectedCards.Remove(cardView.cardInstance); + selectedCards.Remove(cardView.card); uiPile.AddCard(cardView); cardView.transform.SetParent(uiPile.rectTransform, false); cardView.transform.SetSiblingIndex(location.index); diff --git a/Assets/Scripts/MainGame/UI/CombatMainPage/TeamSwitchButton.cs b/Assets/Scripts/MainGame/UI/CombatMainPage/TeamSwitchButton.cs index 98438216..c6c667db 100644 --- a/Assets/Scripts/MainGame/UI/CombatMainPage/TeamSwitchButton.cs +++ b/Assets/Scripts/MainGame/UI/CombatMainPage/TeamSwitchButton.cs @@ -45,10 +45,10 @@ namespace Continentis.MainGame.UI { CombatUIManager.Instance.combatMainPage.ClearAllCardViews(); CombatMainManager.Instance.characterController.playerTeam.deckSubmodule.SetUpHandCardViews(); - CombatMainManager.Instance.characterController.playerTeam.deckSubmodule.GetAllCards().ForEach(c => + CombatMainManager.Instance.characterController.playerTeam.deckSubmodule.GetAllCards().ForEach(card => { - c.user = CombatMainManager.Instance.currentCharacter; - c.cardLogic.RefreshCardAttributes(); + card.user = CombatMainManager.Instance.currentCharacter; + card.RefreshCardAttributes(); }); })); diff --git a/Assets/Scripts/ScriptExtensions/CommandQueue/CommandQueueManager.cs b/Assets/Scripts/ScriptExtensions/CommandQueue/CommandQueueManager.cs index 51f7e571..9f449cd0 100644 --- a/Assets/Scripts/ScriptExtensions/CommandQueue/CommandQueueManager.cs +++ b/Assets/Scripts/ScriptExtensions/CommandQueue/CommandQueueManager.cs @@ -82,6 +82,8 @@ namespace SLSFramework.General public CommandBase AddCommand(CommandBase command, bool insertAtFirst, CommandContext context = null) { + if(command == null) return null; + context ??= new CommandContext(); // 将指令和其上下文入队 if (insertAtFirst || command.insertAtFirst)