Support for Bide

This commit is contained in:
2025-01-11 14:08:04 +01:00
parent ecdc9c7654
commit 83b316ad53
6 changed files with 160 additions and 3 deletions

View File

@@ -1,3 +1,4 @@
using System.Diagnostics.CodeAnalysis;
using PkmnLib.Dynamic.Events;
using PkmnLib.Dynamic.Libraries;
using PkmnLib.Dynamic.Models.BattleFlow;
@@ -92,6 +93,8 @@ public interface IBattle : IScriptSource, IDeepCloneable
/// </summary>
void ValidateBattleState();
bool HasForcedTurn(IPokemon pokemon, [NotNullWhen(true)] out ITurnChoice? choice);
/// <summary>
/// Checks whether a choice is actually possible.
/// </summary>
@@ -229,11 +232,31 @@ public class BattleImpl : ScriptSource, IBattle
HasEnded = true;
}
/// <inheritdoc />
public bool HasForcedTurn(IPokemon pokemon, [NotNullWhen(true)] out ITurnChoice? choice)
{
var battleData = pokemon.BattleData;
if (battleData == null)
{
choice = null;
return false;
}
ITurnChoice? forcedChoice = null;
pokemon.RunScriptHook(
script => script.ForceTurnSelection(battleData.SideIndex, battleData.Position, ref forcedChoice));
choice = forcedChoice;
return choice != null;
}
/// <inheritdoc />
public bool CanUse(ITurnChoice choice)
{
if (!choice.User.IsUsable)
return false;
if (HasForcedTurn(choice.User, out var forcedChoice) && choice != forcedChoice)
return false;
if (choice is IMoveChoice moveChoice)
{
// TODO: Hook to change number of PP needed.