Move all battle state from IPokemon to an ephemeral IBattlePokemon wrapper
This commit is contained in:
@@ -6,25 +6,25 @@ public class WhirlpoolEffect : Script, IScriptOnEndTurn, IScriptPreventOpponentR
|
||||
{
|
||||
public record PokemonTurn
|
||||
{
|
||||
public PokemonTurn(IPokemon pokemon, int turns, float damagePercent)
|
||||
public PokemonTurn(IBattlePokemon pokemon, int turns, float damagePercent)
|
||||
{
|
||||
Pokemon = pokemon;
|
||||
Turns = turns;
|
||||
DamagePercent = damagePercent;
|
||||
}
|
||||
|
||||
public IPokemon Pokemon { get; }
|
||||
public IBattlePokemon Pokemon { get; }
|
||||
public int Turns { get; set; }
|
||||
public float DamagePercent { get; }
|
||||
}
|
||||
|
||||
private IPokemon? _user;
|
||||
private IBattlePokemon? _user;
|
||||
private readonly IList<PokemonTurn> _targetedPokemon = [];
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void OnAddedToParent(IScriptSource source)
|
||||
{
|
||||
if (source is IPokemon pokemon)
|
||||
if (source is IBattlePokemon pokemon)
|
||||
{
|
||||
_user = pokemon;
|
||||
}
|
||||
@@ -34,7 +34,7 @@ public class WhirlpoolEffect : Script, IScriptOnEndTurn, IScriptPreventOpponentR
|
||||
}
|
||||
}
|
||||
|
||||
public void AddTargetedPokemon(IPokemon pokemon, int turns, float damagePercent)
|
||||
public void AddTargetedPokemon(IBattlePokemon pokemon, int turns, float damagePercent)
|
||||
{
|
||||
if (_targetedPokemon.All(x => x.Pokemon != pokemon))
|
||||
{
|
||||
@@ -63,7 +63,7 @@ public class WhirlpoolEffect : Script, IScriptOnEndTurn, IScriptPreventOpponentR
|
||||
return;
|
||||
|
||||
List<PokemonTurn>? pokemonToRemove = null;
|
||||
foreach (var pokemonTurn in _targetedPokemon.Where(x => x.Pokemon.BattleData?.IsOnBattlefield == true))
|
||||
foreach (var pokemonTurn in _targetedPokemon.Where(x => x.Pokemon.IsOnBattlefield == true))
|
||||
{
|
||||
var pokemon = pokemonTurn.Pokemon;
|
||||
pokemon.Damage((uint)(pokemon.MaxHealth * pokemonTurn.DamagePercent), DamageSource.Misc);
|
||||
@@ -83,7 +83,7 @@ public class WhirlpoolEffect : Script, IScriptOnEndTurn, IScriptPreventOpponentR
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public void ExpectedEndOfTurnDamage(IPokemon pokemon, ref int damage)
|
||||
public void ExpectedEndOfTurnDamage(IBattlePokemon pokemon, ref int damage)
|
||||
{
|
||||
var turn = _targetedPokemon.FirstOrDefault(x => x.Pokemon == pokemon);
|
||||
if (turn != null)
|
||||
|
||||
Reference in New Issue
Block a user