This commit is contained in:
@@ -5,11 +5,14 @@ namespace PkmnLib.Dynamic.AI.Explicit;
|
||||
|
||||
public record struct MoveOption(AIMoveState Move, IBattle Battle, IPokemon? Target, uint EstimatedDamage = 0);
|
||||
|
||||
public delegate bool AIBoolHandler(MoveOption option);
|
||||
public delegate bool AIBoolHandler(IExplicitAI ai, MoveOption option);
|
||||
|
||||
public delegate void AIMoveBasePowerHandler(MoveOption option, ref int score);
|
||||
public delegate bool AISwitchBoolHandler(IExplicitAI ai, IPokemon pokemon, IBattle battle,
|
||||
IReadOnlyList<IPokemon> reserves);
|
||||
|
||||
public delegate void AIScoreMoveHandler(MoveOption option, ref int score);
|
||||
public delegate void AIMoveBasePowerHandler(IExplicitAI ai, MoveOption option, ref int score);
|
||||
|
||||
public delegate void AIScoreMoveHandler(IExplicitAI ai, MoveOption option, ref int score);
|
||||
|
||||
public interface IReadOnlyExplicitAIHandlers
|
||||
{
|
||||
@@ -21,7 +24,7 @@ public interface IReadOnlyExplicitAIHandlers
|
||||
/// <summary>
|
||||
/// Checks if a move will fail based on the provided function code and options.
|
||||
/// </summary>
|
||||
bool MoveWillFail(StringKey functionCode, MoveOption option);
|
||||
bool MoveWillFail(IExplicitAI ai, StringKey functionCode, MoveOption option);
|
||||
|
||||
/// <summary>
|
||||
/// A list of checks to determine if a move will fail against a target.
|
||||
@@ -31,7 +34,7 @@ public interface IReadOnlyExplicitAIHandlers
|
||||
/// <summary>
|
||||
/// Checks if a move will fail against a target based on the provided function code and options.
|
||||
/// </summary>
|
||||
bool MoveWillFailAgainstTarget(StringKey functionCode, MoveOption option);
|
||||
bool MoveWillFailAgainstTarget(IExplicitAI ai, StringKey functionCode, MoveOption option);
|
||||
|
||||
/// <summary>
|
||||
/// A list of handlers to apply scores for move effects.
|
||||
@@ -41,7 +44,7 @@ public interface IReadOnlyExplicitAIHandlers
|
||||
/// <summary>
|
||||
/// Applies the score for a move effect based on the provided name and options.
|
||||
/// </summary>
|
||||
void ApplyMoveEffectScore(StringKey name, MoveOption option, ref int score);
|
||||
void ApplyMoveEffectScore(IExplicitAI ai, StringKey name, MoveOption option, ref int score);
|
||||
|
||||
/// <summary>
|
||||
/// A list of handlers to apply scores for move effects against a target.
|
||||
@@ -51,7 +54,7 @@ public interface IReadOnlyExplicitAIHandlers
|
||||
/// <summary>
|
||||
/// Applies the score for a move effect against a target based on the provided name and options.
|
||||
/// </summary>
|
||||
void ApplyMoveEffectAgainstTargetScore(StringKey name, MoveOption option, ref int score);
|
||||
void ApplyMoveEffectAgainstTargetScore(IExplicitAI ai, StringKey name, MoveOption option, ref int score);
|
||||
|
||||
/// <summary>
|
||||
/// A list of handlers to determine the base power of a move.
|
||||
@@ -61,7 +64,7 @@ public interface IReadOnlyExplicitAIHandlers
|
||||
/// <summary>
|
||||
/// Applies the base power for a move based on the provided name and options.
|
||||
/// </summary>
|
||||
void GetBasePower(StringKey name, MoveOption option, ref int power);
|
||||
void GetBasePower(IExplicitAI ai, StringKey name, MoveOption option, ref int power);
|
||||
|
||||
/// <summary>
|
||||
/// A list of handlers to apply scores for general move effectiveness.
|
||||
@@ -71,10 +74,7 @@ public interface IReadOnlyExplicitAIHandlers
|
||||
/// <summary>
|
||||
/// Applies the score for a general move based on the provided option.
|
||||
/// </summary>
|
||||
/// <param name="option"></param>
|
||||
/// <param name="score"></param>
|
||||
/// <returns></returns>
|
||||
void ApplyGenerateMoveScoreModifiers(MoveOption option, ref int score);
|
||||
void ApplyGenerateMoveScoreModifiers(IExplicitAI ai, MoveOption option, ref int score);
|
||||
|
||||
/// <summary>
|
||||
/// A list of handlers to apply scores for general move effectiveness against a target.
|
||||
@@ -84,10 +84,16 @@ public interface IReadOnlyExplicitAIHandlers
|
||||
/// <summary>
|
||||
/// Applies the score for a general move against a target based on the provided option.
|
||||
/// </summary>
|
||||
void ApplyGenerateMoveAgainstTargetScoreModifiers(MoveOption option, ref int score);
|
||||
void ApplyGenerateMoveAgainstTargetScoreModifiers(IExplicitAI ai, MoveOption option, ref int score);
|
||||
|
||||
IReadOnlyDictionary<StringKey, AISwitchBoolHandler> ShouldSwitchFunctions { get; }
|
||||
|
||||
bool ShouldSwitch(IExplicitAI ai, IPokemon pokemon, IBattle battle, IReadOnlyList<IPokemon> reserves);
|
||||
|
||||
IReadOnlyDictionary<StringKey, AISwitchBoolHandler> ShouldNotSwitchFunctions { get; }
|
||||
|
||||
bool ShouldNotSwitch(IExplicitAI ai, IPokemon pokemon, IBattle battle, IReadOnlyList<IPokemon> reserves);
|
||||
|
||||
IReadOnlyDictionary<StringKey, AIBoolHandler> ShouldSwitch { get; }
|
||||
IReadOnlyDictionary<StringKey, AIBoolHandler> ShouldNotSwitch { get; }
|
||||
IReadOnlyDictionary<StringKey, AIScoreMoveHandler> AbilityRanking { get; }
|
||||
}
|
||||
|
||||
@@ -99,8 +105,8 @@ public class ExplicitAIHandlers : IReadOnlyExplicitAIHandlers
|
||||
public FunctionHandlerDictionary<AIBoolHandler> MoveFailureCheck { get; } = new();
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool MoveWillFail(StringKey functionCode, MoveOption option) =>
|
||||
MoveFailureCheck.TryGetValue(functionCode, out var handler) && handler(option);
|
||||
public bool MoveWillFail(IExplicitAI ai, StringKey functionCode, MoveOption option) =>
|
||||
MoveFailureCheck.TryGetValue(functionCode, out var handler) && handler(ai, option);
|
||||
|
||||
public FunctionHandlerDictionary<AIBoolHandler> MoveFailureAgainstTargetCheck { get; } = new();
|
||||
|
||||
@@ -109,8 +115,8 @@ public class ExplicitAIHandlers : IReadOnlyExplicitAIHandlers
|
||||
MoveFailureAgainstTargetCheck;
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool MoveWillFailAgainstTarget(StringKey functionCode, MoveOption option) =>
|
||||
MoveFailureAgainstTargetCheck.TryGetValue(functionCode, out var handler) && handler(option);
|
||||
public bool MoveWillFailAgainstTarget(IExplicitAI ai, StringKey functionCode, MoveOption option) =>
|
||||
MoveFailureAgainstTargetCheck.TryGetValue(functionCode, out var handler) && handler(ai, option);
|
||||
|
||||
public FunctionHandlerDictionary<AIScoreMoveHandler> MoveEffectScore { get; } = [];
|
||||
|
||||
@@ -121,10 +127,10 @@ public class ExplicitAIHandlers : IReadOnlyExplicitAIHandlers
|
||||
public FunctionHandlerDictionary<AIScoreMoveHandler> MoveEffectAgainstTargetScore = [];
|
||||
|
||||
/// <inheritdoc />
|
||||
public void ApplyMoveEffectScore(StringKey name, MoveOption option, ref int score)
|
||||
public void ApplyMoveEffectScore(IExplicitAI ai, StringKey name, MoveOption option, ref int score)
|
||||
{
|
||||
if (MoveEffectScore.TryGetValue(name, out var handler))
|
||||
handler(option, ref score);
|
||||
handler(ai, option, ref score);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
@@ -134,10 +140,10 @@ public class ExplicitAIHandlers : IReadOnlyExplicitAIHandlers
|
||||
public FunctionHandlerDictionary<AIMoveBasePowerHandler> MoveBasePower = [];
|
||||
|
||||
/// <inheritdoc />
|
||||
public void ApplyMoveEffectAgainstTargetScore(StringKey name, MoveOption option, ref int score)
|
||||
public void ApplyMoveEffectAgainstTargetScore(IExplicitAI ai, StringKey name, MoveOption option, ref int score)
|
||||
{
|
||||
if (MoveEffectAgainstTargetScore.TryGetValue(name, out var handler))
|
||||
handler(option, ref score);
|
||||
handler(ai, option, ref score);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
@@ -147,10 +153,10 @@ public class ExplicitAIHandlers : IReadOnlyExplicitAIHandlers
|
||||
public FunctionHandlerDictionary<AIScoreMoveHandler> GeneralMoveScore = [];
|
||||
|
||||
/// <inheritdoc />
|
||||
public void GetBasePower(StringKey name, MoveOption option, ref int power)
|
||||
public void GetBasePower(IExplicitAI ai, StringKey name, MoveOption option, ref int power)
|
||||
{
|
||||
if (MoveBasePower.TryGetValue(name, out var handler))
|
||||
handler(option, ref power);
|
||||
handler(ai, option, ref power);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
@@ -160,11 +166,11 @@ public class ExplicitAIHandlers : IReadOnlyExplicitAIHandlers
|
||||
public FunctionHandlerDictionary<AIScoreMoveHandler> GeneralMoveAgainstTargetScore = [];
|
||||
|
||||
/// <inheritdoc />
|
||||
public void ApplyGenerateMoveScoreModifiers(MoveOption option, ref int score)
|
||||
public void ApplyGenerateMoveScoreModifiers(IExplicitAI ai, MoveOption option, ref int score)
|
||||
{
|
||||
foreach (var (_, handler) in GeneralMoveScore)
|
||||
{
|
||||
handler(option, ref score);
|
||||
handler(ai, option, ref score);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -172,27 +178,51 @@ public class ExplicitAIHandlers : IReadOnlyExplicitAIHandlers
|
||||
IReadOnlyDictionary<StringKey, AIScoreMoveHandler> IReadOnlyExplicitAIHandlers.GeneralMoveAgainstTargetScore =>
|
||||
GeneralMoveAgainstTargetScore;
|
||||
|
||||
public FunctionHandlerDictionary<AIBoolHandler> ShouldSwitch = [];
|
||||
|
||||
/// <inheritdoc />
|
||||
public void ApplyGenerateMoveAgainstTargetScoreModifiers(MoveOption option, ref int score)
|
||||
public void ApplyGenerateMoveAgainstTargetScoreModifiers(IExplicitAI ai, MoveOption option, ref int score)
|
||||
{
|
||||
foreach (var (_, handler) in GeneralMoveAgainstTargetScore)
|
||||
{
|
||||
handler(option, ref score);
|
||||
handler(ai, option, ref score);
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
IReadOnlyDictionary<StringKey, AIBoolHandler> IReadOnlyExplicitAIHandlers.ShouldSwitch => ShouldSwitch;
|
||||
|
||||
public FunctionHandlerDictionary<AIBoolHandler> ShouldNotSwitch = [];
|
||||
public FunctionHandlerDictionary<AISwitchBoolHandler> ShouldSwitchFunctions = [];
|
||||
|
||||
/// <inheritdoc />
|
||||
IReadOnlyDictionary<StringKey, AIBoolHandler> IReadOnlyExplicitAIHandlers.ShouldNotSwitch => ShouldNotSwitch;
|
||||
IReadOnlyDictionary<StringKey, AISwitchBoolHandler> IReadOnlyExplicitAIHandlers.ShouldSwitchFunctions =>
|
||||
ShouldSwitchFunctions;
|
||||
|
||||
public bool ShouldSwitch(IExplicitAI ai, IPokemon pokemon, IBattle battle, IReadOnlyList<IPokemon> reserves)
|
||||
{
|
||||
var shouldSwitch = false;
|
||||
foreach (var (_, handler) in ShouldSwitchFunctions)
|
||||
{
|
||||
shouldSwitch |= handler(ai, pokemon, battle, reserves);
|
||||
}
|
||||
return shouldSwitch;
|
||||
}
|
||||
|
||||
public FunctionHandlerDictionary<AISwitchBoolHandler> ShouldNotSwitchFunctions = [];
|
||||
|
||||
/// <inheritdoc />
|
||||
/// <inheritdoc />
|
||||
IReadOnlyDictionary<StringKey, AISwitchBoolHandler> IReadOnlyExplicitAIHandlers.ShouldNotSwitchFunctions =>
|
||||
ShouldNotSwitchFunctions;
|
||||
|
||||
public FunctionHandlerDictionary<AIScoreMoveHandler> AbilityRanking = [];
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool ShouldNotSwitch(IExplicitAI ai, IPokemon pokemon, IBattle battle, IReadOnlyList<IPokemon> reserves)
|
||||
{
|
||||
var shouldNotSwitch = false;
|
||||
foreach (var (_, handler) in ShouldNotSwitchFunctions)
|
||||
{
|
||||
shouldNotSwitch |= handler(ai, pokemon, battle, reserves);
|
||||
}
|
||||
return shouldNotSwitch;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
IReadOnlyDictionary<StringKey, AIScoreMoveHandler> IReadOnlyExplicitAIHandlers.AbilityRanking =>
|
||||
AbilityRanking;
|
||||
|
||||
Reference in New Issue
Block a user