Begin work on outlining dynamic side
This commit is contained in:
114
PkmnLib.Dynamic/Models/Battle.cs
Normal file
114
PkmnLib.Dynamic/Models/Battle.cs
Normal file
@@ -0,0 +1,114 @@
|
||||
using PkmnLib.Dynamic.Events;
|
||||
using PkmnLib.Dynamic.Libraries;
|
||||
using PkmnLib.Dynamic.Models.Choices;
|
||||
using PkmnLib.Dynamic.ScriptHandling;
|
||||
|
||||
namespace PkmnLib.Dynamic.Models;
|
||||
|
||||
/// <summary>
|
||||
/// A battle is a representation of a battle in the Pokemon games. It contains all the information needed
|
||||
/// to simulate a battle, and can be used to simulate a battle between two parties.
|
||||
/// </summary>
|
||||
public interface IBattle : IScriptSource
|
||||
{
|
||||
/// <summary>
|
||||
/// The library the battle uses for handling.
|
||||
/// </summary>
|
||||
IDynamicLibrary Library { get; }
|
||||
|
||||
/// <summary>
|
||||
/// A list of all different parties in the battle.
|
||||
/// </summary>
|
||||
IReadOnlyList<IBattleParty> Parties { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Whether or not Pokemon can flee from the battle.
|
||||
/// </summary>
|
||||
bool CanFlee { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The number of sides in the battle. Typically 2.
|
||||
/// </summary>
|
||||
byte NumberOfSides { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The number of Pokemon that can be on each side.
|
||||
/// </summary>
|
||||
byte PositionsPerSide { get; }
|
||||
|
||||
/// <summary>
|
||||
/// A list of all sides in the battle.
|
||||
/// </summary>
|
||||
IReadOnlyList<IBattleSide> Sides { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The RNG used for the battle.
|
||||
/// </summary>
|
||||
IBattleRandom Random { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Whether the battle has ended.
|
||||
/// </summary>
|
||||
bool HasEnded { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The result of the battle. If the battle has not ended, this is null.
|
||||
/// </summary>
|
||||
BattleResult? Result { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The handler to send all events to.
|
||||
/// </summary>
|
||||
EventHook EventHook { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The index of the current turn. Initially 0, until the first turn starts when all choices are made.
|
||||
/// </summary>
|
||||
uint CurrentTurnNumber { get; }
|
||||
|
||||
/// <summary>
|
||||
/// A queue of the yet to be executed choices in a turn.
|
||||
/// </summary>
|
||||
BattleChoiceQueue ChoiceQueue { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Get a Pokemon on the battlefield, on a specific side and an index on that side.
|
||||
/// </summary>
|
||||
IPokemon GetPokemon(byte side, byte position);
|
||||
|
||||
/// <summary>
|
||||
/// Returns whether a slot on the battlefield can still be filled. If no party is responsible
|
||||
/// for that slot, or a party is responsible, but has no remaining Pokemon to throw out anymore,
|
||||
/// this returns false.
|
||||
/// </summary>
|
||||
bool CanSlotBeFilled(byte side, byte position);
|
||||
|
||||
/// <summary>
|
||||
/// Validates whether the battle is still in a non-ended state. If the battle has ended, this
|
||||
/// properly sets who has won etc.
|
||||
/// </summary>
|
||||
void ValidateBattleState();
|
||||
|
||||
/// <summary>
|
||||
/// Checks whether a choice is actually possible.
|
||||
/// </summary>
|
||||
void CanUse(ITurnChoice choice);
|
||||
|
||||
/// <summary>
|
||||
/// Try and set the choice for the battle. If the choice is not valid, this returns false.
|
||||
/// </summary>
|
||||
bool TrySetChoice(ITurnChoice choice);
|
||||
|
||||
/// <summary>
|
||||
/// Sets the current weather for the battle. If null is passed, this clears the weather.
|
||||
/// </summary>
|
||||
void SetWeather(string? weatherName);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current weather of the battle. If no weather is present, this returns null.
|
||||
/// </summary>
|
||||
string? WeatherName { get; }
|
||||
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user