]> git.deb.at Git - rhonda/impostor.git/commitdiff
Add PlayerSpawned / PlayerDestroyed
authorAeonLucid <aeonlucid@outlook.com>
Sat, 24 Oct 2020 04:45:51 +0000 (06:45 +0200)
committerAeonLucid <aeonlucid@outlook.com>
Sat, 24 Oct 2020 04:45:51 +0000 (06:45 +0200)
src/Impostor.Api/Events/Game/Net/PlayerDestroyedEvent.cs [new file with mode: 0644]
src/Impostor.Api/Events/Game/Net/PlayerSpawnedEvent.cs [new file with mode: 0644]
src/Impostor.Plugins.Example/ExamplePlugin.cs
src/Impostor.Plugins.Example/Handlers/GameEventListener.cs [new file with mode: 0644]
src/Impostor.Plugins.Example/Handlers/PlayerEventListener.cs [new file with mode: 0644]
src/Impostor.Server/Net/State/Game.Data.cs

diff --git a/src/Impostor.Api/Events/Game/Net/PlayerDestroyedEvent.cs b/src/Impostor.Api/Events/Game/Net/PlayerDestroyedEvent.cs
new file mode 100644 (file)
index 0000000..a3b2289
--- /dev/null
@@ -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 (file)
index 0000000..d91e0d1
--- /dev/null
@@ -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
index c55039c7ac2383cfb97e97393915d93712d2e683..8f75cc98d2a703d72e341978fe050213c488d3e9 100644 (file)
@@ -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<ExamplePlugin> _logger;
 
-        public ExamplePlugin(ILogger<ExamplePlugin> logger)
+        public ExamplePlugin(ILogger<ExamplePlugin> 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 (file)
index 0000000..29c3c98
--- /dev/null
@@ -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 (file)
index 0000000..333dbf9
--- /dev/null
@@ -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
index d58466f836f4170032c0a6b56a1df87a64240455..b327edccad6ff3886f27e34aac81d8efb43dcdea 100644 (file)
@@ -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