Move all battle state from IPokemon to an ephemeral IBattlePokemon wrapper
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user