Move all battle state from IPokemon to an ephemeral IBattlePokemon wrapper

This commit is contained in:
2026-08-28 15:20:26 +02:00
parent 942be8eaeb
commit 8a2733a0a9
859 changed files with 4408 additions and 5331 deletions

View File

@@ -85,7 +85,7 @@ public static class TurnRunner
return;
if (!choice.User.IsUsable)
return;
if (choice.User.BattleData?.IsOnBattlefield != true)
if (!choice.User.IsOnBattlefield)
return;
switch (choice)
{
@@ -108,9 +108,6 @@ public static class TurnRunner
private static void ExecuteSwitchChoice(IBattle battle, ISwitchChoice fleeChoice)
{
var user = fleeChoice.User;
var battleData = user.BattleData;
if (battleData == null)
return;
var preventSwitch = false;
fleeChoice.RunScriptHook<IScriptPreventSelfSwitch>(script =>
script.PreventSelfSwitch(fleeChoice, ref preventSwitch));
@@ -118,7 +115,7 @@ public static class TurnRunner
return;
foreach (var side in battle.Sides)
{
if (side.Index == battleData.SideIndex)
if (side.Index == user.SideIndex)
continue;
foreach (var pokemon in side.Pokemon.WhereNotNull())
{
@@ -129,16 +126,12 @@ public static class TurnRunner
}
}
user.Volatile.Clear();
var userSide = battle.Sides[battleData.SideIndex];
userSide.SwapPokemon(battleData.Position, fleeChoice.SwitchTo);
user.BattleSide.SwapPokemon(user.Position, fleeChoice.SwitchTo);
}
private static void ExecuteFleeChoice(IBattle battle, IFleeChoice fleeChoice)
{
var user = fleeChoice.User;
var battleData = user.BattleData;
if (battleData == null)
return;
if (!battle.CanFlee)
return;
@@ -150,7 +143,7 @@ public static class TurnRunner
foreach (var side in battle.Sides)
{
if (side.Index == battleData.SideIndex)
if (side.Index == user.SideIndex)
continue;
foreach (var pokemon in side.Pokemon.WhereNotNull())
{
@@ -167,8 +160,7 @@ public static class TurnRunner
return;
}
var userSide = battle.Sides[battleData.SideIndex];
userSide.MarkAsFled();
user.BattleSide.MarkAsFled();
battle.EventHook.Invoke(new FleeEvent(user, true));
battle.ValidateBattleState();
}
@@ -176,9 +168,6 @@ public static class TurnRunner
private static void ExecuteItemChoice(IBattle battle, IItemChoice itemChoice)
{
var user = itemChoice.User;
var battleData = user.BattleData;
if (battleData == null)
return;
var target = itemChoice.GetTargetPokemon(battle);
battle.EventHook.Invoke(new ItemUseEvent(user, itemChoice.Item));
itemChoice.Item.RunItemScript(battle.Library.ScriptResolver, target ?? user, user, battle, battle.EventHook);