From e9ea621b93fbb58d9edfca8375918791637bbd52 Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 30 Dec 2020 20:59:04 +0800 Subject: +init --- .../Events/Attributes/EventListenerAttribute.cs | 34 +++++++++++++++++++++ .../src/Impostor.Api/Events/EventPriority.cs | 12 ++++++++ .../Impostor.Api/Events/Game/IGameAlterEvent.cs | 7 +++++ .../Impostor.Api/Events/Game/IGameCreatedEvent.cs | 11 +++++++ .../Events/Game/IGameDestroyedEvent.cs | 11 +++++++ .../Impostor.Api/Events/Game/IGameEndedEvent.cs | 9 ++++++ .../src/Impostor.Api/Events/Game/IGameEvent.cs | 12 ++++++++ .../Events/Game/IGamePlayerJoinedEvent.cs | 6 ++++ .../Events/Game/IGamePlayerLeftEvent.cs | 6 ++++ .../Impostor.Api/Events/Game/IGameStartedEvent.cs | 9 ++++++ .../Impostor.Api/Events/Game/IGameStartingEvent.cs | 11 +++++++ .../Events/Game/Meeting/IMeetingEndedEvent.cs | 6 ++++ .../Events/Game/Meeting/IMeetingEvent.cs | 9 ++++++ .../Events/Game/Meeting/IMeetingStartedEvent.cs | 6 ++++ .../Events/Game/Player/IPlayerChatEvent.cs | 10 +++++++ .../Game/Player/IPlayerCompletedTaskEvent.cs | 10 +++++++ .../Events/Game/Player/IPlayerDestroyedEvent.cs | 6 ++++ .../Events/Game/Player/IPlayerEvent.cs | 19 ++++++++++++ .../Events/Game/Player/IPlayerExileEvent.cs | 9 ++++++ .../Events/Game/Player/IPlayerMurderEvent.cs | 12 ++++++++ .../Game/Player/IPlayerSetStartCounterEvent.cs | 10 +++++++ .../Events/Game/Player/IPlayerSpawnedEvent.cs | 6 ++++ .../Events/Game/Player/IPlayerStartMeetingEvent.cs | 12 ++++++++ .../Events/Game/Player/IPlayerVentEvent.cs | 17 +++++++++++ Impostor-dev/src/Impostor.Api/Events/IEvent.cs | 6 ++++ .../src/Impostor.Api/Events/IEventCancelable.cs | 10 +++++++ .../src/Impostor.Api/Events/IEventListener.cs | 6 ++++ .../Impostor.Api/Events/IManualEventListener.cs | 13 ++++++++ .../Impostor.Api/Events/Managers/IEventManager.cs | 35 ++++++++++++++++++++++ 29 files changed, 330 insertions(+) create mode 100644 Impostor-dev/src/Impostor.Api/Events/Attributes/EventListenerAttribute.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/EventPriority.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/Game/IGameAlterEvent.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/Game/IGameCreatedEvent.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/Game/IGameDestroyedEvent.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/Game/IGameEndedEvent.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/Game/IGameEvent.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/Game/IGamePlayerJoinedEvent.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/Game/IGamePlayerLeftEvent.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/Game/IGameStartedEvent.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/Game/IGameStartingEvent.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/Game/Meeting/IMeetingEndedEvent.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/Game/Meeting/IMeetingEvent.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/Game/Meeting/IMeetingStartedEvent.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerChatEvent.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerCompletedTaskEvent.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerDestroyedEvent.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerEvent.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerExileEvent.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerMurderEvent.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerSetStartCounterEvent.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerSpawnedEvent.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerStartMeetingEvent.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/Game/Player/IPlayerVentEvent.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/IEvent.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/IEventCancelable.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/IEventListener.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/IManualEventListener.cs create mode 100644 Impostor-dev/src/Impostor.Api/Events/Managers/IEventManager.cs (limited to 'Impostor-dev/src/Impostor.Api/Events') 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; + } + + /// + /// The priority of the event listener. + /// + public EventPriority Priority { get; set; } + + /// + /// The events that the listener is listening to. + /// + public Type? Event { get; set; } + + /// + /// If set to true, the listener will be called regardless of the . + /// + 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 +{ + /// + /// Called whenever a new is created. + /// + 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 +{ + /// + /// Called whenever a new is destroyed. + /// + 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 + { + /// + /// Gets the this event belongs to. + /// + 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 +{ + /// + /// The game is started here and players have been initialized. + /// + 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 +{ + /// + /// 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 . + /// + 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 + { + /// + /// Gets the message sent by the player. + /// + 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 + { + /// + /// Gets the that triggered this . + /// + IClientPlayer ClientPlayer { get; } + + /// + /// Gets the networked that triggered this . + /// This belongs to the . + /// + 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 +{ + /// + /// Called whenever a player gets exiled (voted out). + /// + 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 + { + /// + /// Gets the player who got murdered. + /// + 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 + { + /// + /// Gets the current time of the start counter. + /// + 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 + { + /// + /// Gets the player who's body got reported. Is null when the meeting started by Emergency call button + /// + 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 + { + /// + /// Gets get the id of the used vent. + /// + public VentLocation VentId { get; } + + /// + /// Gets a value indicating whether the vent was entered or exited. + /// + 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 + { + /// + /// True if the event was cancelled. + /// + 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(); + + 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 + { + /// + /// Register a temporary event listener. + /// + /// Event listener. + /// Middleware between the events, which can be used to swap to the correct thread dispatcher. + /// Disposable that unregisters the callback from the event manager. + /// Type of the event listener. + IDisposable RegisterListener(TListener listener, Func, Task>? invoker = null) + where TListener : IEventListener; + + /// + /// Returns true if an event with the type is registered. + /// + /// True if the is registered. + /// Type of the event. + bool IsRegistered() + where TEvent : IEvent; + + /// + /// Call all the event listeners for the type . + /// + /// The event argument. + /// Type of the event. + /// A representing the asynchronous operation. + ValueTask CallAsync(TEvent @event) + where TEvent : IEvent; + } +} \ No newline at end of file -- cgit v1.1-26-g67d0