diff --git a/Simulator/Actions/BaseAction.cs b/Simulator/Actions/BaseAction.cs index 70c40c5..51416e6 100644 --- a/Simulator/Actions/BaseAction.cs +++ b/Simulator/Actions/BaseAction.cs @@ -1,3 +1,4 @@ +using System.Runtime.CompilerServices; using System.Text; namespace Craftimizer.Simulator.Actions; @@ -9,7 +10,7 @@ public abstract class BaseAction( int durabilityCost = 10, bool increasesStepCount = true, int defaultCPCost = 0, int defaultEfficiency = 0, - float defaultSuccessRate = 1) + int defaultSuccessRate = 100) { // Non-instanced properties @@ -31,16 +32,19 @@ public abstract class BaseAction( // Instanced properties public readonly int DefaultCPCost = defaultCPCost; public readonly int DefaultEfficiency = defaultEfficiency; - public readonly float DefaultSuccessRate = defaultSuccessRate; + public readonly int DefaultSuccessRate = defaultSuccessRate; // out of 100 // Instanced properties + [MethodImpl(MethodImplOptions.AggressiveInlining)] public virtual int CPCost(Simulator s) => DefaultCPCost; + [MethodImpl(MethodImplOptions.AggressiveInlining)] public virtual int Efficiency(Simulator s) => DefaultEfficiency; - public virtual float SuccessRate(Simulator s) => + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public virtual int SuccessRate(Simulator s) => DefaultSuccessRate; // Return true if it can be in the action pool now or in the future @@ -116,8 +120,8 @@ public abstract class BaseAction( } if (!IncreasesStepCount) builder.AppendLine($"Does Not Increase Step Count"); - if (success != 1) - builder.AppendLine($"{s.CalculateSuccessRate(success) * 100:##}% Success Rate"); + if (success != 100) + builder.AppendLine($"{s.CalculateSuccessRate(success)}% Success Rate"); return builder.ToString(); } } diff --git a/Simulator/Actions/BaseBuffAction.cs b/Simulator/Actions/BaseBuffAction.cs index 64be9fb..02e5daa 100644 --- a/Simulator/Actions/BaseBuffAction.cs +++ b/Simulator/Actions/BaseBuffAction.cs @@ -10,7 +10,7 @@ internal abstract class BaseBuffAction( int durabilityCost = 0, bool increasesStepCount = true, int defaultCPCost = 0, int defaultEfficiency = 0, - float defaultSuccessRate = 1) : + int defaultSuccessRate = 100) : BaseAction( category, level, actionId, macroWaitTime, diff --git a/Simulator/Actions/FocusedSynthesis.cs b/Simulator/Actions/FocusedSynthesis.cs index 9ddde41..06510c7 100644 --- a/Simulator/Actions/FocusedSynthesis.cs +++ b/Simulator/Actions/FocusedSynthesis.cs @@ -5,9 +5,9 @@ internal sealed class FocusedSynthesis() : BaseAction( increasesProgress: true, defaultCPCost: 5, defaultEfficiency: 200, - defaultSuccessRate: 0.50f + defaultSuccessRate: 50 ) { - public override float SuccessRate(Simulator s) => - s.ActionStates.Observed ? 1.00f : 0.50f; + public override int SuccessRate(Simulator s) => + s.ActionStates.Observed ? 100 : 50; } diff --git a/Simulator/Actions/FocusedTouch.cs b/Simulator/Actions/FocusedTouch.cs index 5798590..3946b79 100644 --- a/Simulator/Actions/FocusedTouch.cs +++ b/Simulator/Actions/FocusedTouch.cs @@ -5,9 +5,9 @@ internal sealed class FocusedTouch() : BaseAction( increasesQuality: true, defaultCPCost: 18, defaultEfficiency: 150, - defaultSuccessRate: 0.50f + defaultSuccessRate: 50 ) { - public override float SuccessRate(Simulator s) => - s.ActionStates.Observed ? 1.00f : 0.50f; + public override int SuccessRate(Simulator s) => + s.ActionStates.Observed ? 100 : 50; } diff --git a/Simulator/Actions/HastyTouch.cs b/Simulator/Actions/HastyTouch.cs index 66b7897..b069407 100644 --- a/Simulator/Actions/HastyTouch.cs +++ b/Simulator/Actions/HastyTouch.cs @@ -5,7 +5,7 @@ internal sealed class HastyTouch() : BaseAction( increasesQuality: true, defaultCPCost: 0, defaultEfficiency: 100, - defaultSuccessRate: 0.60f + defaultSuccessRate: 60 ) { diff --git a/Simulator/Actions/RapidSynthesis.cs b/Simulator/Actions/RapidSynthesis.cs index 703df9d..28418ca 100644 --- a/Simulator/Actions/RapidSynthesis.cs +++ b/Simulator/Actions/RapidSynthesis.cs @@ -5,7 +5,7 @@ internal sealed class RapidSynthesis() : BaseAction( increasesProgress: true, defaultCPCost: 0, defaultEfficiency: 250, - defaultSuccessRate: 0.50f + defaultSuccessRate: 50 ) { // Rapid Synthesis Mastery Trait diff --git a/Simulator/Simulator.cs b/Simulator/Simulator.cs index b984d9b..9d1b8da 100644 --- a/Simulator/Simulator.cs +++ b/Simulator/Simulator.cs @@ -124,10 +124,10 @@ public class Simulator public bool HasEffect(EffectType effect) => ActiveEffects.HasEffect(effect); - public virtual bool RollSuccessRaw(float successRate) => - successRate >= Input.Random.NextSingle(); + public virtual bool RollSuccessRaw(int successRate) => + successRate >= Input.Random.NextSingle() * 100f; - public bool RollSuccess(float successRate) => + public bool RollSuccess(int successRate) => RollSuccessRaw(CalculateSuccessRate(successRate)); public void IncreaseStepCount() @@ -189,11 +189,12 @@ public class Simulator CP = Input.Stats.CP; } - public float CalculateSuccessRate(float successRate) + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public int CalculateSuccessRate(int successRate) { if (Condition == Condition.Centered) - successRate += 0.25f; - return Math.Clamp(successRate, 0, 1); + successRate += 25; + return Math.Clamp(successRate, 0, 100); } public int CalculateDurabilityCost(int amount) diff --git a/Simulator/SimulatorNoRandom.cs b/Simulator/SimulatorNoRandom.cs index 9c39996..1957105 100644 --- a/Simulator/SimulatorNoRandom.cs +++ b/Simulator/SimulatorNoRandom.cs @@ -2,6 +2,6 @@ namespace Craftimizer.Simulator; public class SimulatorNoRandom : Simulator { - public sealed override bool RollSuccessRaw(float successRate) => successRate == 1; + public sealed override bool RollSuccessRaw(int successRate) => successRate == 100; public sealed override Condition GetNextRandomCondition() => Condition.Normal; } diff --git a/Solver/Simulator.cs b/Solver/Simulator.cs index 1a935cb..a7be9be 100644 --- a/Solver/Simulator.cs +++ b/Solver/Simulator.cs @@ -38,7 +38,7 @@ internal sealed class Simulator : SimulatorNoRandom [MethodImpl(MethodImplOptions.AggressiveInlining)] private bool CouldUseAction(BaseAction baseAction) { - if (CalculateSuccessRate(baseAction.SuccessRate(this)) != 1) + if (CalculateSuccessRate(baseAction.SuccessRate(this)) != 100) return false; // don't allow quality moves at max quality @@ -56,7 +56,7 @@ internal sealed class Simulator : SimulatorNoRandom private bool ShouldUseAction(ActionType action, BaseAction baseAction) #pragma warning restore MA0051 // Method is too long { - if (CalculateSuccessRate(baseAction.SuccessRate(this)) != 1) + if (CalculateSuccessRate(baseAction.SuccessRate(this)) != 100) return false; // don't allow quality moves at max quality