diff options
Diffstat (limited to 'Impostor-dev/src/Impostor.Api/Events')
29 files changed, 330 insertions, 0 deletions
diff --git a/Impostor-dev/src/Impostor.Api/Events/Attributes/EventListenerAttribute.cs b/Impostor-dev/src/Impostor.Api/Events/Attributes/EventListenerAttribute.cs new file mode 100644 index 0000000..b31d2d1 --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Attributes/EventListenerAttribute.cs @@ -0,0 +1,34 @@ +using System; + +namespace Impostor.Api.Events +{ + [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)] + public class EventListenerAttribute : Attribute + { + public EventListenerAttribute(EventPriority priority = EventPriority.Normal) + { + Priority = priority; + } + + public EventListenerAttribute(Type @event, EventPriority priority = EventPriority.Normal) + { + Priority = priority; + Event = @event; + } + + /// <summary> + /// The priority of the event listener. + /// </summary> + public EventPriority Priority { get; set; } + + /// <summary> + /// The events that the listener is listening to. + /// </summary> + public Type? Event { get; set; } + + /// <summary> + /// If set to true, the listener will be called regardless of the <see cref="IEventCancelable.IsCancelled"/>. + /// </summary> + public bool IgnoreCancelled { get; set; } + } +}
\ No newline at end of file diff --git a/Impostor-dev/src/Impostor.Api/Events/EventPriority.cs b/Impostor-dev/src/Impostor.Api/Events/EventPriority.cs new file mode 100644 index 0000000..7acdbeb --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/EventPriority.cs @@ -0,0 +1,12 @@ +namespace Impostor.Api.Events +{ + public enum EventPriority + { + Lowest = 0, + Low = 1, + Normal = 2, + High = 3, + Highest = 4, + Monitor = 5, + } +} diff --git a/Impostor-dev/src/Impostor.Api/Events/Game/IGameAlterEvent.cs b/Impostor-dev/src/Impostor.Api/Events/Game/IGameAlterEvent.cs new file mode 100644 index 0000000..18956ea --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Game/IGameAlterEvent.cs @@ -0,0 +1,7 @@ +namespace Impostor.Api.Events +{ + public interface IGameAlterEvent : IGameEvent + { + bool IsPublic { get; } + } +} diff --git a/Impostor-dev/src/Impostor.Api/Events/Game/IGameCreatedEvent.cs b/Impostor-dev/src/Impostor.Api/Events/Game/IGameCreatedEvent.cs new file mode 100644 index 0000000..ef45f1d --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Game/IGameCreatedEvent.cs @@ -0,0 +1,11 @@ +using Impostor.Api.Games; + +namespace Impostor.Api.Events +{ + /// <summary> + /// Called whenever a new <see cref="IGame"/> is created. + /// </summary> + public interface IGameCreatedEvent : IGameEvent + { + } +} diff --git a/Impostor-dev/src/Impostor.Api/Events/Game/IGameDestroyedEvent.cs b/Impostor-dev/src/Impostor.Api/Events/Game/IGameDestroyedEvent.cs new file mode 100644 index 0000000..7ff7b46 --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Game/IGameDestroyedEvent.cs @@ -0,0 +1,11 @@ +using Impostor.Api.Games; + +namespace Impostor.Api.Events +{ + /// <summary> + /// Called whenever a new <see cref="IGame"/> is destroyed. + /// </summary> + public interface IGameDestroyedEvent : IGameEvent + { + } +} diff --git a/Impostor-dev/src/Impostor.Api/Events/Game/IGameEndedEvent.cs b/Impostor-dev/src/Impostor.Api/Events/Game/IGameEndedEvent.cs new file mode 100644 index 0000000..d8ae159 --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Game/IGameEndedEvent.cs @@ -0,0 +1,9 @@ +using Impostor.Api.Innersloth; + +namespace Impostor.Api.Events +{ + public interface IGameEndedEvent : IGameEvent + { + public GameOverReason GameOverReason { get; } + } +} diff --git a/Impostor-dev/src/Impostor.Api/Events/Game/IGameEvent.cs b/Impostor-dev/src/Impostor.Api/Events/Game/IGameEvent.cs new file mode 100644 index 0000000..c9ae579 --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Game/IGameEvent.cs @@ -0,0 +1,12 @@ +using Impostor.Api.Games; + +namespace Impostor.Api.Events +{ + public interface IGameEvent : IEvent + { + /// <summary> + /// Gets the <see cref="IGame"/> this event belongs to. + /// </summary> + IGame Game { get; } + } +} diff --git a/Impostor-dev/src/Impostor.Api/Events/Game/IGamePlayerJoinedEvent.cs b/Impostor-dev/src/Impostor.Api/Events/Game/IGamePlayerJoinedEvent.cs new file mode 100644 index 0000000..921568e --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Game/IGamePlayerJoinedEvent.cs @@ -0,0 +1,6 @@ +namespace Impostor.Api.Events +{ + public interface IGamePlayerJoinedEvent : IGameEvent + { + } +} diff --git a/Impostor-dev/src/Impostor.Api/Events/Game/IGamePlayerLeftEvent.cs b/Impostor-dev/src/Impostor.Api/Events/Game/IGamePlayerLeftEvent.cs new file mode 100644 index 0000000..21d8b7c --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Game/IGamePlayerLeftEvent.cs @@ -0,0 +1,6 @@ +namespace Impostor.Api.Events +{ + public interface IGamePlayerLeftEvent : IGameEvent + { + } +} diff --git a/Impostor-dev/src/Impostor.Api/Events/Game/IGameStartedEvent.cs b/Impostor-dev/src/Impostor.Api/Events/Game/IGameStartedEvent.cs new file mode 100644 index 0000000..b6e5111 --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Game/IGameStartedEvent.cs @@ -0,0 +1,9 @@ +namespace Impostor.Api.Events +{ + /// <summary> + /// The game is started here and players have been initialized. + /// </summary> + public interface IGameStartedEvent : IGameEvent + { + } +} diff --git a/Impostor-dev/src/Impostor.Api/Events/Game/IGameStartingEvent.cs b/Impostor-dev/src/Impostor.Api/Events/Game/IGameStartingEvent.cs new file mode 100644 index 0000000..5998bf2 --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Game/IGameStartingEvent.cs @@ -0,0 +1,11 @@ +namespace Impostor.Api.Events +{ + /// <summary> + /// Called when the game is going to start. + /// When this is called, not all players are initialized properly yet. + /// If you want to get correct player states, use <see cref="IGameStartedEvent"/>. + /// </summary> + public interface IGameStartingEvent : IGameEvent + { + } +} diff --git a/Impostor-dev/src/Impostor.Api/Events/Game/Meeting/IMeetingEndedEvent.cs b/Impostor-dev/src/Impostor.Api/Events/Game/Meeting/IMeetingEndedEvent.cs new file mode 100644 index 0000000..a217580 --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Game/Meeting/IMeetingEndedEvent.cs @@ -0,0 +1,6 @@ +namespace Impostor.Api.Events.Meeting +{ + public interface IMeetingEndedEvent : IMeetingEvent + { + } +} diff --git a/Impostor-dev/src/Impostor.Api/Events/Game/Meeting/IMeetingEvent.cs b/Impostor-dev/src/Impostor.Api/Events/Game/Meeting/IMeetingEvent.cs new file mode 100644 index 0000000..4461318 --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Game/Meeting/IMeetingEvent.cs @@ -0,0 +1,9 @@ +using Impostor.Api.Net.Inner.Objects; + +namespace Impostor.Api.Events.Meeting +{ + public interface IMeetingEvent : IGameEvent + { + IInnerMeetingHud MeetingHud { get; } + } +} diff --git a/Impostor-dev/src/Impostor.Api/Events/Game/Meeting/IMeetingStartedEvent.cs b/Impostor-dev/src/Impostor.Api/Events/Game/Meeting/IMeetingStartedEvent.cs new file mode 100644 index 0000000..a237fff --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Game/Meeting/IMeetingStartedEvent.cs @@ -0,0 +1,6 @@ +namespace Impostor.Api.Events.Meeting +{ + public interface IMeetingStartedEvent : IMeetingEvent + { + } +} diff --git a/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerChatEvent.cs b/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerChatEvent.cs new file mode 100644 index 0000000..52efe96 --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerChatEvent.cs @@ -0,0 +1,10 @@ +namespace Impostor.Api.Events.Player +{ + public interface IPlayerChatEvent : IPlayerEvent + { + /// <summary> + /// Gets the message sent by the player. + /// </summary> + string Message { get; } + } +} diff --git a/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerCompletedTaskEvent.cs b/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerCompletedTaskEvent.cs new file mode 100644 index 0000000..78ccd2d --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerCompletedTaskEvent.cs @@ -0,0 +1,10 @@ +using Impostor.Api.Innersloth; +using Impostor.Api.Net.Inner.Objects; + +namespace Impostor.Api.Events.Player +{ + public interface IPlayerCompletedTaskEvent : IPlayerEvent + { + ITaskInfo Task { get; } + } +} diff --git a/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerDestroyedEvent.cs b/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerDestroyedEvent.cs new file mode 100644 index 0000000..ac80d64 --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerDestroyedEvent.cs @@ -0,0 +1,6 @@ +namespace Impostor.Api.Events.Player +{ + public interface IPlayerDestroyedEvent : IPlayerEvent + { + } +} diff --git a/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerEvent.cs b/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerEvent.cs new file mode 100644 index 0000000..247fe64 --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerEvent.cs @@ -0,0 +1,19 @@ +using Impostor.Api.Net; +using Impostor.Api.Net.Inner.Objects; + +namespace Impostor.Api.Events.Player +{ + public interface IPlayerEvent : IGameEvent + { + /// <summary> + /// Gets the <see cref="IClientPlayer"/> that triggered this <see cref="IPlayerEvent"/>. + /// </summary> + IClientPlayer ClientPlayer { get; } + + /// <summary> + /// Gets the networked <see cref="IInnerPlayerControl"/> that triggered this <see cref="IPlayerEvent"/>. + /// This <see cref="IInnerPlayerControl"/> belongs to the <see cref="IClientPlayer"/>. + /// </summary> + IInnerPlayerControl PlayerControl { get; } + } +}
\ No newline at end of file diff --git a/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerExileEvent.cs b/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerExileEvent.cs new file mode 100644 index 0000000..65ade4e --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerExileEvent.cs @@ -0,0 +1,9 @@ +namespace Impostor.Api.Events.Player +{ + /// <summary> + /// Called whenever a player gets exiled (voted out). + /// </summary> + public interface IPlayerExileEvent : IPlayerEvent + { + } +} diff --git a/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerMurderEvent.cs b/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerMurderEvent.cs new file mode 100644 index 0000000..c47c00b --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerMurderEvent.cs @@ -0,0 +1,12 @@ +using Impostor.Api.Net.Inner.Objects; + +namespace Impostor.Api.Events.Player +{ + public interface IPlayerMurderEvent : IPlayerEvent + { + /// <summary> + /// Gets the player who got murdered. + /// </summary> + IInnerPlayerControl Victim { get; } + } +} diff --git a/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerSetStartCounterEvent.cs b/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerSetStartCounterEvent.cs new file mode 100644 index 0000000..c03d782 --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerSetStartCounterEvent.cs @@ -0,0 +1,10 @@ +namespace Impostor.Api.Events.Player +{ + public interface IPlayerSetStartCounterEvent : IPlayerEvent + { + /// <summary> + /// Gets the current time of the start counter. + /// </summary> + byte SecondsLeft { get; } + } +} diff --git a/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerSpawnedEvent.cs b/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerSpawnedEvent.cs new file mode 100644 index 0000000..a3be654 --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerSpawnedEvent.cs @@ -0,0 +1,6 @@ +namespace Impostor.Api.Events.Player +{ + public interface IPlayerSpawnedEvent : IPlayerEvent + { + } +} diff --git a/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerStartMeetingEvent.cs b/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerStartMeetingEvent.cs new file mode 100644 index 0000000..1a28115 --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerStartMeetingEvent.cs @@ -0,0 +1,12 @@ +using Impostor.Api.Net.Inner.Objects; + +namespace Impostor.Api.Events.Player +{ + public interface IPlayerStartMeetingEvent : IPlayerEvent + { + /// <summary> + /// Gets the player who's body got reported. Is null when the meeting started by Emergency call button + /// </summary> + IInnerPlayerControl? Body { get; } + } +} diff --git a/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerVentEvent.cs b/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerVentEvent.cs new file mode 100644 index 0000000..81f178b --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerVentEvent.cs @@ -0,0 +1,17 @@ +using Impostor.Api.Innersloth; + +namespace Impostor.Api.Events.Player +{ + public interface IPlayerVentEvent : IPlayerEvent + { + /// <summary> + /// Gets get the id of the used vent. + /// </summary> + public VentLocation VentId { get; } + + /// <summary> + /// Gets a value indicating whether the vent was entered or exited. + /// </summary> + public bool VentEnter { get; } + } +} diff --git a/Impostor-dev/src/Impostor.Api/Events/IEvent.cs b/Impostor-dev/src/Impostor.Api/Events/IEvent.cs new file mode 100644 index 0000000..796898e --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/IEvent.cs @@ -0,0 +1,6 @@ +namespace Impostor.Api.Events +{ + public interface IEvent + { + } +}
\ No newline at end of file diff --git a/Impostor-dev/src/Impostor.Api/Events/IEventCancelable.cs b/Impostor-dev/src/Impostor.Api/Events/IEventCancelable.cs new file mode 100644 index 0000000..319f02a --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/IEventCancelable.cs @@ -0,0 +1,10 @@ +namespace Impostor.Api.Events +{ + public interface IEventCancelable : IEvent + { + /// <summary> + /// True if the event was cancelled. + /// </summary> + bool IsCancelled { get; set; } + } +}
\ No newline at end of file diff --git a/Impostor-dev/src/Impostor.Api/Events/IEventListener.cs b/Impostor-dev/src/Impostor.Api/Events/IEventListener.cs new file mode 100644 index 0000000..76392fc --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/IEventListener.cs @@ -0,0 +1,6 @@ +namespace Impostor.Api.Events +{ + public interface IEventListener + { + } +}
\ No newline at end of file diff --git a/Impostor-dev/src/Impostor.Api/Events/IManualEventListener.cs b/Impostor-dev/src/Impostor.Api/Events/IManualEventListener.cs new file mode 100644 index 0000000..b5c140e --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/IManualEventListener.cs @@ -0,0 +1,13 @@ +using System.Threading.Tasks; + +namespace Impostor.Api.Events +{ + public interface IManualEventListener : IEventListener + { + public bool CanExecute<T>(); + + public ValueTask Execute(IEvent @event); + + EventPriority Priority { get; set; } + } +}
\ No newline at end of file diff --git a/Impostor-dev/src/Impostor.Api/Events/Managers/IEventManager.cs b/Impostor-dev/src/Impostor.Api/Events/Managers/IEventManager.cs new file mode 100644 index 0000000..07a7f7c --- /dev/null +++ b/Impostor-dev/src/Impostor.Api/Events/Managers/IEventManager.cs @@ -0,0 +1,35 @@ +using System; +using System.Threading.Tasks; + +namespace Impostor.Api.Events.Managers +{ + public interface IEventManager + { + /// <summary> + /// Register a temporary event listener. + /// </summary> + /// <param name="listener">Event listener.</param> + /// <param name="invoker">Middleware between the events, which can be used to swap to the correct thread dispatcher.</param> + /// <returns>Disposable that unregisters the callback from the event manager.</returns> + /// <typeparam name="TListener">Type of the event listener.</typeparam> + IDisposable RegisterListener<TListener>(TListener listener, Func<Func<Task>, Task>? invoker = null) + where TListener : IEventListener; + + /// <summary> + /// Returns true if an event with the type <see cref="TEvent"/> is registered. + /// </summary> + /// <returns>True if the <see cref="TEvent"/> is registered.</returns> + /// <typeparam name="TEvent">Type of the event.</typeparam> + bool IsRegistered<TEvent>() + where TEvent : IEvent; + + /// <summary> + /// Call all the event listeners for the type <see cref="TEvent"/>. + /// </summary> + /// <param name="event">The event argument.</param> + /// <typeparam name="TEvent">Type of the event.</typeparam> + /// <returns>A <see cref="ValueTask"/> representing the asynchronous operation.</returns> + ValueTask CallAsync<TEvent>(TEvent @event) + where TEvent : IEvent; + } +}
\ No newline at end of file |