Initial work on implementing Pokemon

This commit is contained in:
2024-07-28 14:00:26 +02:00
parent 3d5fb1a818
commit 554e1cf2cd
15 changed files with 603 additions and 30 deletions

View File

@@ -0,0 +1,17 @@
namespace PkmnLib.Dynamic.Events;
/// <summary>
/// Allows for the batching of multiple events that should be shown at the same time.
/// </summary>
/// <remarks>
/// This is useful for when we send multiple events to the client in sequence, but we want to show them in one go.
/// For example, when a Pokemon gets hurt by poison, we want to show the purple poison animation and the damage at the
/// same time. This is done by batching the events together.
/// </remarks>
public record struct EventBatchId()
{
/// <summary>
/// The unique identifier for this batch of events.
/// </summary>
public Guid Id { get; init; } = Guid.NewGuid();
}

View File

@@ -0,0 +1,11 @@
namespace PkmnLib.Dynamic.Events;
/// <summary>
/// An event is something that happens during a battle. This can be used by front-end code to
/// display information about the battle to the user. This is the only way for the front-end to
/// know what is happening in the battle.
/// </summary>
public interface IEventData
{
public EventBatchId BatchId { get; init; }
}

View File

@@ -0,0 +1,21 @@
namespace PkmnLib.Dynamic.Events;
/// <summary>
/// The event hook of a battle. This is used to hook into the battle and get notified when something
/// happens that a front-end might want to know about.
/// </summary>
public class EventHook
{
/// <summary>
/// The event handler that is called when the event is triggered.
/// </summary>
public event EventHandler<IEventData>? Handler;
/// <summary>
/// Triggers the event, calling the handler with the given data.
/// </summary>
public void Invoke(IEventData data)
{
Handler?.Invoke(this, data);
}
}