From: AeonLucid Date: Sat, 24 Oct 2020 04:45:51 +0000 (+0200) Subject: Add PlayerSpawned / PlayerDestroyed X-Git-Tag: v1.2.2~96^2~20 X-Git-Url: https://git.deb.at/?a=commitdiff_plain;h=e0481833d40c05d9525b99bcb5289c6639ff9d6d;p=rhonda%2Fimpostor.git Add PlayerSpawned / PlayerDestroyed --- diff --git a/src/Impostor.Api/Events/Game/Net/PlayerDestroyedEvent.cs b/src/Impostor.Api/Events/Game/Net/PlayerDestroyedEvent.cs new file mode 100644 index 0000000..a3b2289 --- /dev/null +++ b/src/Impostor.Api/Events/Game/Net/PlayerDestroyedEvent.cs @@ -0,0 +1,18 @@ +using Impostor.Api.Games; +using Impostor.Api.Innersloth.Net.Objects; + +namespace Impostor.Api.Events.Net +{ + public class PlayerDestroyedEvent : IGameEvent + { + public PlayerDestroyedEvent(IGame game, InnerPlayerControl playerControl) + { + Game = game; + PlayerControl = playerControl; + } + + public IGame Game { get; } + + public InnerPlayerControl PlayerControl { get; } + } +} \ No newline at end of file diff --git a/src/Impostor.Api/Events/Game/Net/PlayerSpawnedEvent.cs b/src/Impostor.Api/Events/Game/Net/PlayerSpawnedEvent.cs new file mode 100644 index 0000000..d91e0d1 --- /dev/null +++ b/src/Impostor.Api/Events/Game/Net/PlayerSpawnedEvent.cs @@ -0,0 +1,18 @@ +using Impostor.Api.Games; +using Impostor.Api.Innersloth.Net.Objects; + +namespace Impostor.Api.Events.Net +{ + public class PlayerSpawnedEvent : IGameEvent + { + public PlayerSpawnedEvent(IGame game, InnerPlayerControl playerControl) + { + Game = game; + PlayerControl = playerControl; + } + + public IGame Game { get; } + + public InnerPlayerControl PlayerControl { get; } + } +} \ No newline at end of file diff --git a/src/Impostor.Plugins.Example/ExamplePlugin.cs b/src/Impostor.Plugins.Example/ExamplePlugin.cs index c55039c..8f75cc9 100644 --- a/src/Impostor.Plugins.Example/ExamplePlugin.cs +++ b/src/Impostor.Plugins.Example/ExamplePlugin.cs @@ -1,5 +1,7 @@ using System.Threading.Tasks; +using Impostor.Api.Events.Managers; using Impostor.Api.Plugins; +using Impostor.Plugins.Example.Handlers; using Microsoft.Extensions.Logging; namespace Impostor.Plugins.Example @@ -13,20 +15,23 @@ namespace Impostor.Plugins.Example { private readonly ILogger _logger; - public ExamplePlugin(ILogger logger) + public ExamplePlugin(ILogger logger, IEventManager eventManager) { _logger = logger; + + eventManager.RegisterListener(new GameEventListener()); + eventManager.RegisterListener(new PlayerEventListener()); } public override ValueTask EnableAsync() { - _logger.LogInformation("Hooray."); + _logger.LogInformation("Example is being enabled."); return default; } public override ValueTask DisableAsync() { - _logger.LogInformation("Boooh."); + _logger.LogInformation("Example is being disabled."); return default; } } diff --git a/src/Impostor.Plugins.Example/Handlers/GameEventListener.cs b/src/Impostor.Plugins.Example/Handlers/GameEventListener.cs new file mode 100644 index 0000000..29c3c98 --- /dev/null +++ b/src/Impostor.Plugins.Example/Handlers/GameEventListener.cs @@ -0,0 +1,32 @@ +using System; +using Impostor.Api.Events; + +namespace Impostor.Plugins.Example.Handlers +{ + public class GameEventListener : IEventListener + { + [EventListener] + public void OnGameCreated(GameCreatedEvent e) + { + Console.WriteLine("Game was created."); + } + + [EventListener] + public void OnGameDestroyed(GameDestroyedEvent e) + { + Console.WriteLine("Game was destroyed."); + } + + [EventListener] + public void OnPlayerJoined(PlayerJoinedGameEvent e) + { + Console.WriteLine("Player joined a game."); + } + + [EventListener] + public void OnPlayerLeftGame(PlayerLeftGameEvent e) + { + Console.WriteLine("Player left a game."); + } + } +} \ No newline at end of file diff --git a/src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs b/src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs new file mode 100644 index 0000000..333dbf9 --- /dev/null +++ b/src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs @@ -0,0 +1,21 @@ +using System; +using Impostor.Api.Events; +using Impostor.Api.Events.Net; + +namespace Impostor.Plugins.Example.Handlers +{ + public class PlayerEventListener : IEventListener + { + [EventListener] + public void OnPlayerSpawned(PlayerSpawnedEvent e) + { + Console.WriteLine(e.PlayerControl.PlayerInfo.PlayerName + " spawned"); + } + + [EventListener] + public void OnPlayerDestroyed(PlayerDestroyedEvent e) + { + Console.WriteLine(e.PlayerControl.PlayerInfo.PlayerName + " destroyed"); + } + } +} \ No newline at end of file diff --git a/src/Impostor.Server/Net/State/Game.Data.cs b/src/Impostor.Server/Net/State/Game.Data.cs index d58466f..b327edc 100644 --- a/src/Impostor.Server/Net/State/Game.Data.cs +++ b/src/Impostor.Server/Net/State/Game.Data.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Impostor.Api; +using Impostor.Api.Events.Net; using Impostor.Api.Innersloth.Data; using Impostor.Api.Innersloth.Net; using Impostor.Api.Innersloth.Net.Objects; @@ -48,7 +49,7 @@ namespace Impostor.Server.Net.State private int _gamedataInitialized; private bool _gamedataFakeReceived; - private void OnSpawn(InnerNetObject netObj) + private async ValueTask OnSpawnAsync(InnerNetObject netObj) { switch (netObj) { @@ -98,12 +99,14 @@ namespace Impostor.Server.Net.State control.PlayerInfo!.Controller = control; } + await _eventManager.CallAsync(new PlayerSpawnedEvent(this, control)); + break; } } } - private void OnDestroy(InnerNetObject netObj) + private async ValueTask OnDestroyAsync(InnerNetObject netObj) { switch (netObj) { @@ -139,6 +142,8 @@ namespace Impostor.Server.Net.State player.Character = null; } + await _eventManager.CallAsync(new PlayerDestroyedEvent(this, control)); + break; } } @@ -304,7 +309,7 @@ namespace Impostor.Server.Net.State obj.Deserialize(sender, target, readerSub, true); } - OnSpawn(obj); + await OnSpawnAsync(obj); } continue; @@ -331,7 +336,7 @@ namespace Impostor.Server.Net.State } RemoveNetObject(obj); - OnDestroy(obj); + await OnDestroyAsync(obj); _logger.LogDebug("Destroyed InnerNetObject {0} ({1}), OwnerId {2}", obj.GetType().Name, netId, obj.OwnerId); } else