diff --git a/Craftimizer/Simulator/Actions/BaseBuffAction.cs b/Craftimizer/Simulator/Actions/BaseBuffAction.cs new file mode 100644 index 0000000..b6bf56e --- /dev/null +++ b/Craftimizer/Simulator/Actions/BaseBuffAction.cs @@ -0,0 +1,22 @@ +using System; + +namespace Craftimizer.Simulator.Actions; + +public abstract class BaseBuffAction : BaseAction +{ + public BaseBuffAction(Simulation simulation) : base(simulation) { } + + public abstract Effect Effect { get; } + public abstract int EffectDuration { get; } + public virtual Effect[] ConflictingEffects => Array.Empty(); + + public override int DurabilityCost => 0; + + public override void UseSuccess() + { + if (ConflictingEffects.Length != 0) + foreach(var effect in ConflictingEffects) + Simulation.RemoveEffect(effect); + Simulation.AddEffect(Effect, EffectDuration); + } +} diff --git a/Craftimizer/Simulator/Actions/FinalAppraisal.cs b/Craftimizer/Simulator/Actions/FinalAppraisal.cs index a5935ff..1e367c6 100644 --- a/Craftimizer/Simulator/Actions/FinalAppraisal.cs +++ b/Craftimizer/Simulator/Actions/FinalAppraisal.cs @@ -1,6 +1,6 @@ namespace Craftimizer.Simulator.Actions; -internal class FinalAppraisal : BaseAction +internal class FinalAppraisal : BaseBuffAction { public FinalAppraisal(Simulation simulation) : base(simulation) { } @@ -9,9 +9,8 @@ internal class FinalAppraisal : BaseAction public override int ActionId => 19012; public override int CPCost => 1; - public override int DurabilityCost => 0; public override bool IncreasesStepCount => false; - public override void UseSuccess() => - Simulation.AddEffect(Effect.FinalAppraisal, 5); + public override Effect Effect => Effect.FinalAppraisal; + public override int EffectDuration => 5; } diff --git a/Craftimizer/Simulator/Actions/GreatStrides.cs b/Craftimizer/Simulator/Actions/GreatStrides.cs index 76d8eaf..dafcc7b 100644 --- a/Craftimizer/Simulator/Actions/GreatStrides.cs +++ b/Craftimizer/Simulator/Actions/GreatStrides.cs @@ -1,6 +1,6 @@ namespace Craftimizer.Simulator.Actions; -internal class GreatStrides : BaseAction +internal class GreatStrides : BaseBuffAction { public GreatStrides(Simulation simulation) : base(simulation) { } @@ -9,8 +9,7 @@ internal class GreatStrides : BaseAction public override int ActionId => 260; public override int CPCost => 32; - public override int DurabilityCost => 0; - public override void UseSuccess() => - Simulation.AddEffect(Effect.GreatStrides, 3); + public override Effect Effect => Effect.GreatStrides; + public override int EffectDuration => 3; } diff --git a/Craftimizer/Simulator/Actions/Innovation.cs b/Craftimizer/Simulator/Actions/Innovation.cs index 90b67ae..4764cf6 100644 --- a/Craftimizer/Simulator/Actions/Innovation.cs +++ b/Craftimizer/Simulator/Actions/Innovation.cs @@ -1,6 +1,6 @@ namespace Craftimizer.Simulator.Actions; -internal class Innovation : BaseAction +internal class Innovation : BaseBuffAction { public Innovation(Simulation simulation) : base(simulation) { } @@ -9,8 +9,7 @@ internal class Innovation : BaseAction public override int ActionId => 19004; public override int CPCost => 18; - public override int DurabilityCost => 0; - public override void UseSuccess() => - Simulation.AddEffect(Effect.Innovation, 4); + public override Effect Effect => Effect.Innovation; + public override int EffectDuration => 4; } diff --git a/Craftimizer/Simulator/Actions/Manipulation.cs b/Craftimizer/Simulator/Actions/Manipulation.cs index ab88d94..ffd41c4 100644 --- a/Craftimizer/Simulator/Actions/Manipulation.cs +++ b/Craftimizer/Simulator/Actions/Manipulation.cs @@ -1,6 +1,6 @@ namespace Craftimizer.Simulator.Actions; -internal class Manipulation : BaseAction +internal class Manipulation : BaseBuffAction { public Manipulation(Simulation simulation) : base(simulation) { } @@ -9,8 +9,7 @@ internal class Manipulation : BaseAction public override int ActionId => 4574; public override int CPCost => 96; - public override int DurabilityCost => 0; - public override void UseSuccess() => - Simulation.AddEffect(Effect.Manipulation, 8); + public override Effect Effect => Effect.Manipulation; + public override int EffectDuration => 8; } diff --git a/Craftimizer/Simulator/Actions/Veneration.cs b/Craftimizer/Simulator/Actions/Veneration.cs index 41fd1c9..2961a5a 100644 --- a/Craftimizer/Simulator/Actions/Veneration.cs +++ b/Craftimizer/Simulator/Actions/Veneration.cs @@ -1,6 +1,6 @@ namespace Craftimizer.Simulator.Actions; -internal class Veneration : BaseAction +internal class Veneration : BaseBuffAction { public Veneration(Simulation simulation) : base(simulation) { } @@ -11,6 +11,6 @@ internal class Veneration : BaseAction public override int CPCost => 18; public override int DurabilityCost => 0; - public override void UseSuccess() => - Simulation.AddEffect(Effect.Veneration, 4); + public override Effect Effect => Effect.Veneration; + public override int EffectDuration => 4; } diff --git a/Craftimizer/Simulator/Actions/WasteNot.cs b/Craftimizer/Simulator/Actions/WasteNot.cs index 45af866..2870b7d 100644 --- a/Craftimizer/Simulator/Actions/WasteNot.cs +++ b/Craftimizer/Simulator/Actions/WasteNot.cs @@ -1,6 +1,6 @@ namespace Craftimizer.Simulator.Actions; -internal class WasteNot : BaseAction +internal class WasteNot : BaseBuffAction { public WasteNot(Simulation simulation) : base(simulation) { } @@ -9,11 +9,8 @@ internal class WasteNot : BaseAction public override int ActionId => 4631; public override int CPCost => 56; - public override int DurabilityCost => 0; - public override void UseSuccess() - { - Simulation.RemoveEffect(Effect.WasteNot2); - Simulation.AddEffect(Effect.WasteNot, 4); - } + public override Effect Effect => Effect.WasteNot; + public override int EffectDuration => 4; + public override Effect[] ConflictingEffects => new[] { Effect.WasteNot2 }; } diff --git a/Craftimizer/Simulator/Actions/WasteNot2.cs b/Craftimizer/Simulator/Actions/WasteNot2.cs index 78c2c64..127ac79 100644 --- a/Craftimizer/Simulator/Actions/WasteNot2.cs +++ b/Craftimizer/Simulator/Actions/WasteNot2.cs @@ -1,6 +1,6 @@ namespace Craftimizer.Simulator.Actions; -internal class WasteNot2 : BaseAction +internal class WasteNot2 : BaseBuffAction { public WasteNot2(Simulation simulation) : base(simulation) { } @@ -9,11 +9,8 @@ internal class WasteNot2 : BaseAction public override int ActionId => 4639; public override int CPCost => 98; - public override int DurabilityCost => 0; - public override void UseSuccess() - { - Simulation.RemoveEffect(Effect.WasteNot); - Simulation.AddEffect(Effect.WasteNot2, 8); - } + public override Effect Effect => Effect.WasteNot2; + public override int EffectDuration => 8; + public override Effect[] ConflictingEffects => new[] { Effect.WasteNot }; }