Begin work on outlining dynamic side
This commit is contained in:
120
PkmnLib.Dynamic/Models/BattleSide.cs
Normal file
120
PkmnLib.Dynamic/Models/BattleSide.cs
Normal file
@@ -0,0 +1,120 @@
|
||||
using PkmnLib.Dynamic.Models.Choices;
|
||||
using PkmnLib.Dynamic.ScriptHandling;
|
||||
|
||||
namespace PkmnLib.Dynamic.Models;
|
||||
|
||||
/// <summary>
|
||||
/// A side in a battle.
|
||||
/// </summary>
|
||||
public interface IBattleSide : IScriptSource
|
||||
{
|
||||
/// <summary>
|
||||
/// The index of the side on the battle.
|
||||
/// </summary>
|
||||
byte Index { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The number of Pokémon that can be on the side.
|
||||
/// </summary>
|
||||
byte NumberOfPositions { get; }
|
||||
|
||||
/// <summary>
|
||||
/// A list of Pokémon currently on the battlefield.
|
||||
/// </summary>
|
||||
IReadOnlyList<IPokemon?> Pokemon { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The currently set choices for all Pokémon on the battlefield. Cleared when the turn starts.
|
||||
/// </summary>
|
||||
IReadOnlyList<ITurnChoice?> SetChoices { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Whether every Pokémon on this side has its choices
|
||||
/// </summary>
|
||||
bool AllChoicesSet { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The slots on the side that can still be filled. Once all slots are set to false, this side
|
||||
/// has lost the battle.
|
||||
/// </summary>
|
||||
IReadOnlyList<bool> FillablePositions { get; }
|
||||
|
||||
/// <summary>
|
||||
/// A reference to the battle this side is in.
|
||||
/// </summary>
|
||||
IBattle Battle { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Whether this side has fled.
|
||||
/// </summary>
|
||||
bool HasFledBattle { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The volatile scripts that are attached to the side.
|
||||
/// </summary>
|
||||
IScriptSet VolatileScripts { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if there are slots that need to be filled with a new pokemon, that have parties
|
||||
/// responsible for them. Returns false if all slots are filled with usable pokemon, or slots are
|
||||
/// empty, but can't be filled by any party anymore.
|
||||
/// </summary>
|
||||
void AllPositionsFilled();
|
||||
|
||||
/// <summary>
|
||||
/// Sets a choice for a Pokémon on this side.
|
||||
/// </summary>
|
||||
void SetChoice(byte position, ITurnChoice choice);
|
||||
|
||||
/// <summary>
|
||||
/// Resets all choices on this side.
|
||||
/// </summary>
|
||||
void ResetChoices();
|
||||
|
||||
/// <summary>
|
||||
/// Forcibly removes a Pokémon from the field.
|
||||
/// </summary>
|
||||
void ForceClearPokemonFromField();
|
||||
|
||||
/// <summary>
|
||||
/// Switches out a spot on the field for a different Pokémon. If null is passed, the spot is
|
||||
/// cleared. Returns the Pokémon that was previously in the spot.
|
||||
/// </summary>
|
||||
IPokemon? SwapPokemon(byte position, IPokemon? pokemon);
|
||||
|
||||
/// <summary>
|
||||
/// Swaps two Pokémon on the side.
|
||||
/// </summary>
|
||||
void SwapPokemon(byte position1, byte position2);
|
||||
|
||||
/// <summary>
|
||||
/// Checks whether a Pokemon is on the field in this side.
|
||||
/// </summary>
|
||||
bool IsPokemonOnSide(IPokemon pokemon);
|
||||
|
||||
/// <summary>
|
||||
/// Marks a slot as unfillable. This happens when no parties are able to fill the slot anymore.
|
||||
/// If this happens, the slot can not be used again.
|
||||
/// </summary>
|
||||
void MarkPositionAsUnfillable(byte position);
|
||||
|
||||
/// <summary>
|
||||
/// Checks whether a slot is fillable. If it is not, the slot can not be used anymore.
|
||||
/// </summary>
|
||||
bool IsPositionFillable(byte position);
|
||||
|
||||
/// <summary>
|
||||
/// Checks whether the side has been defeated.
|
||||
/// </summary>
|
||||
bool IsDefeated();
|
||||
|
||||
/// <summary>
|
||||
/// Mark the side as fled.
|
||||
/// </summary>
|
||||
void MarkAsFled();
|
||||
|
||||
/// <summary>
|
||||
/// Gets a random Pokémon on the given side.
|
||||
/// </summary>
|
||||
byte GetRandomPosition();
|
||||
}
|
||||
Reference in New Issue
Block a user