]> git.deb.at Git - rhonda/impostor.git/commitdiff
Fixes #82 - Expose IClientPlayer in relevant events
authorAeonLucid <aeonlucid@outlook.com>
Sun, 25 Oct 2020 23:53:04 +0000 (00:53 +0100)
committerAeonLucid <aeonlucid@outlook.com>
Sun, 25 Oct 2020 23:53:20 +0000 (00:53 +0100)
20 files changed:
src/Impostor.Api/Events/Game/GameEndedEvent.cs
src/Impostor.Api/Events/Game/Meeting/MeetingEndedEvent.cs [new file with mode: 0644]
src/Impostor.Api/Events/Game/Meeting/MeetingStartedEvent.cs [new file with mode: 0644]
src/Impostor.Api/Events/Game/Player/IPlayerEvent.cs [new file with mode: 0644]
src/Impostor.Api/Events/Game/Player/PlayerChatEvent.cs [new file with mode: 0644]
src/Impostor.Api/Events/Game/Player/PlayerDestroyedEvent.cs [new file with mode: 0644]
src/Impostor.Api/Events/Game/Player/PlayerMovementEvent.cs [new file with mode: 0644]
src/Impostor.Api/Events/Game/Player/PlayerSpawnedEvent.cs [new file with mode: 0644]
src/Impostor.Api/Events/Game/PlayerJoinedGameEvent.cs [new file with mode: 0644]
src/Impostor.Api/Events/Game/PlayerLeftGameEvent.cs [new file with mode: 0644]
src/Impostor.Api/Events/Meeting/MeetingEndedEvent.cs [deleted file]
src/Impostor.Api/Events/Meeting/MeetingStartedEvent.cs [deleted file]
src/Impostor.Api/Events/Player/PlayerChatEvent.cs [deleted file]
src/Impostor.Api/Events/Player/PlayerDestroyedEvent.cs [deleted file]
src/Impostor.Api/Events/Player/PlayerJoinedGameEvent.cs [deleted file]
src/Impostor.Api/Events/Player/PlayerLeftGameEvent.cs [deleted file]
src/Impostor.Api/Events/Player/PlayerMovementEvent.cs [deleted file]
src/Impostor.Api/Events/Player/PlayerSpawnedEvent.cs [deleted file]
src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs
src/Impostor.Server/Net/State/Game.Data.cs

index 0628fcfe4c02315e9edc5005cf3e27738c6dc0fc..1dc2f63f51172a40ecdafe7abc7025a8967b253f 100644 (file)
@@ -8,7 +8,7 @@ namespace Impostor.Api.Events
         {
             Game = game;
         }
-        
+
         public IGame Game { get; }
     }
 }
\ No newline at end of file
diff --git a/src/Impostor.Api/Events/Game/Meeting/MeetingEndedEvent.cs b/src/Impostor.Api/Events/Game/Meeting/MeetingEndedEvent.cs
new file mode 100644 (file)
index 0000000..2586c0b
--- /dev/null
@@ -0,0 +1,18 @@
+using Impostor.Api.Games;
+using Impostor.Api.Net.Inner.Objects;
+
+namespace Impostor.Api.Events.Meeting
+{
+    public class MeetingEndedEvent : IEvent
+    {
+        public MeetingEndedEvent(IGame game, IInnerMeetingHud meetingHud)
+        {
+            Game = game;
+            MeetingHud = meetingHud;
+        }
+
+        public IGame Game { get; }
+
+        public IInnerMeetingHud MeetingHud { get; }
+    }
+}
\ No newline at end of file
diff --git a/src/Impostor.Api/Events/Game/Meeting/MeetingStartedEvent.cs b/src/Impostor.Api/Events/Game/Meeting/MeetingStartedEvent.cs
new file mode 100644 (file)
index 0000000..8ad8964
--- /dev/null
@@ -0,0 +1,18 @@
+using Impostor.Api.Games;
+using Impostor.Api.Net.Inner.Objects;
+
+namespace Impostor.Api.Events.Meeting
+{
+    public class MeetingStartedEvent : IEvent
+    {
+        public MeetingStartedEvent(IGame game, IInnerMeetingHud meetingHud)
+        {
+            Game = game;
+            MeetingHud = meetingHud;
+        }
+
+        public IGame Game { get; }
+
+        public IInnerMeetingHud MeetingHud { get; }
+    }
+}
\ No newline at end of file
diff --git a/src/Impostor.Api/Events/Game/Player/IPlayerEvent.cs b/src/Impostor.Api/Events/Game/Player/IPlayerEvent.cs
new file mode 100644 (file)
index 0000000..247fe64
--- /dev/null
@@ -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/src/Impostor.Api/Events/Game/Player/PlayerChatEvent.cs b/src/Impostor.Api/Events/Game/Player/PlayerChatEvent.cs
new file mode 100644 (file)
index 0000000..5be360c
--- /dev/null
@@ -0,0 +1,31 @@
+using Impostor.Api.Games;
+using Impostor.Api.Net;
+using Impostor.Api.Net.Inner.Objects;
+
+namespace Impostor.Api.Events.Player
+{
+    public class PlayerChatEvent : IPlayerEvent
+    {
+        public PlayerChatEvent(IGame game, IClientPlayer clientPlayer, IInnerPlayerControl playerControl, string message)
+        {
+            Game = game;
+            ClientPlayer = clientPlayer;
+            PlayerControl = playerControl;
+            Message = message;
+        }
+
+        /// <inheritdoc/>
+        public IGame Game { get; }
+
+        /// <inheritdoc/>
+        public IClientPlayer ClientPlayer { get; }
+
+        /// <inheritdoc/>
+        public IInnerPlayerControl PlayerControl { get; }
+
+        /// <summary>
+        ///     Gets the message sent by the player.
+        /// </summary>
+        public string Message { get; }
+    }
+}
\ No newline at end of file
diff --git a/src/Impostor.Api/Events/Game/Player/PlayerDestroyedEvent.cs b/src/Impostor.Api/Events/Game/Player/PlayerDestroyedEvent.cs
new file mode 100644 (file)
index 0000000..dc4b608
--- /dev/null
@@ -0,0 +1,25 @@
+using Impostor.Api.Games;
+using Impostor.Api.Net;
+using Impostor.Api.Net.Inner.Objects;
+
+namespace Impostor.Api.Events.Player
+{
+    public class PlayerDestroyedEvent : IPlayerEvent
+    {
+        public PlayerDestroyedEvent(IGame game, IClientPlayer clientPlayer, IInnerPlayerControl playerControl)
+        {
+            Game = game;
+            ClientPlayer = clientPlayer;
+            PlayerControl = playerControl;
+        }
+
+        /// <inheritdoc/>
+        public IGame Game { get; }
+
+        /// <inheritdoc/>
+        public IClientPlayer ClientPlayer { get; }
+
+        /// <inheritdoc/>
+        public IInnerPlayerControl PlayerControl { get; }
+    }
+}
\ No newline at end of file
diff --git a/src/Impostor.Api/Events/Game/Player/PlayerMovementEvent.cs b/src/Impostor.Api/Events/Game/Player/PlayerMovementEvent.cs
new file mode 100644 (file)
index 0000000..7fa0085
--- /dev/null
@@ -0,0 +1,22 @@
+// using Impostor.Api.Games;
+// using Impostor.Api.Net;
+// using Impostor.Api.Net.Inner.Objects;
+//
+// namespace Impostor.Api.Events.Player
+// {
+//     public class PlayerMovementEvent : IPlayerEvent
+//     {
+//         public PlayerMovementEvent(IGame game, IClientPlayer clientPlayer, IInnerPlayerControl playerControl)
+//         {
+//             Game = game;
+//             ClientPlayer = clientPlayer;
+//             PlayerControl = playerControl;
+//         }
+//
+//         public IGame Game { get; }
+//
+//         public IClientPlayer ClientPlayer { get; }
+//
+//         public IInnerPlayerControl PlayerControl { get; }
+//     }
+// }
\ No newline at end of file
diff --git a/src/Impostor.Api/Events/Game/Player/PlayerSpawnedEvent.cs b/src/Impostor.Api/Events/Game/Player/PlayerSpawnedEvent.cs
new file mode 100644 (file)
index 0000000..2078f04
--- /dev/null
@@ -0,0 +1,25 @@
+using Impostor.Api.Games;
+using Impostor.Api.Net;
+using Impostor.Api.Net.Inner.Objects;
+
+namespace Impostor.Api.Events.Player
+{
+    public class PlayerSpawnedEvent : IPlayerEvent
+    {
+        public PlayerSpawnedEvent(IGame game, IClientPlayer clientPlayer, IInnerPlayerControl playerControl)
+        {
+            Game = game;
+            ClientPlayer = clientPlayer;
+            PlayerControl = playerControl;
+        }
+
+        /// <inheritdoc/>
+        public IGame Game { get; }
+
+        /// <inheritdoc/>
+        public IClientPlayer ClientPlayer { get; }
+
+        /// <inheritdoc/>
+        public IInnerPlayerControl PlayerControl { get; }
+    }
+}
\ No newline at end of file
diff --git a/src/Impostor.Api/Events/Game/PlayerJoinedGameEvent.cs b/src/Impostor.Api/Events/Game/PlayerJoinedGameEvent.cs
new file mode 100644 (file)
index 0000000..3c165aa
--- /dev/null
@@ -0,0 +1,18 @@
+using Impostor.Api.Games;
+using Impostor.Api.Net;
+
+namespace Impostor.Api.Events
+{
+    public class PlayerJoinedGameEvent : IGameEvent
+    {
+        public PlayerJoinedGameEvent(IGame game, IClientPlayer player)
+        {
+            Game = game;
+            Player = player;
+        }
+
+        public IGame Game { get; }
+
+        public IClientPlayer Player { get; }
+    }
+}
\ No newline at end of file
diff --git a/src/Impostor.Api/Events/Game/PlayerLeftGameEvent.cs b/src/Impostor.Api/Events/Game/PlayerLeftGameEvent.cs
new file mode 100644 (file)
index 0000000..5947ff2
--- /dev/null
@@ -0,0 +1,21 @@
+using Impostor.Api.Games;
+using Impostor.Api.Net;
+
+namespace Impostor.Api.Events
+{
+    public class PlayerLeftGameEvent : IGameEvent
+    {
+        public PlayerLeftGameEvent(IGame game, IClientPlayer player, bool isBan)
+        {
+            Game = game;
+            Player = player;
+            IsBan = isBan;
+        }
+
+        public IGame Game { get; }
+
+        public IClientPlayer Player { get; }
+
+        public bool IsBan { get; }
+    }
+}
\ No newline at end of file
diff --git a/src/Impostor.Api/Events/Meeting/MeetingEndedEvent.cs b/src/Impostor.Api/Events/Meeting/MeetingEndedEvent.cs
deleted file mode 100644 (file)
index 2586c0b..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-using Impostor.Api.Games;
-using Impostor.Api.Net.Inner.Objects;
-
-namespace Impostor.Api.Events.Meeting
-{
-    public class MeetingEndedEvent : IEvent
-    {
-        public MeetingEndedEvent(IGame game, IInnerMeetingHud meetingHud)
-        {
-            Game = game;
-            MeetingHud = meetingHud;
-        }
-
-        public IGame Game { get; }
-
-        public IInnerMeetingHud MeetingHud { get; }
-    }
-}
\ No newline at end of file
diff --git a/src/Impostor.Api/Events/Meeting/MeetingStartedEvent.cs b/src/Impostor.Api/Events/Meeting/MeetingStartedEvent.cs
deleted file mode 100644 (file)
index 1265b5b..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-using Impostor.Api.Games;
-using Impostor.Api.Net.Inner.Objects;
-
-namespace Impostor.Api.Events
-{
-    public class MeetingStartedEvent : IEvent
-    {
-        public MeetingStartedEvent(IGame game, IInnerMeetingHud meetingHud)
-        {
-            Game = game;
-            MeetingHud = meetingHud;
-        }
-
-        public IGame Game { get; }
-
-        public IInnerMeetingHud MeetingHud { get; }
-    }
-}
\ No newline at end of file
diff --git a/src/Impostor.Api/Events/Player/PlayerChatEvent.cs b/src/Impostor.Api/Events/Player/PlayerChatEvent.cs
deleted file mode 100644 (file)
index a5c62cd..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-using Impostor.Api.Games;
-using Impostor.Api.Net.Inner.Objects;
-
-namespace Impostor.Api.Events.Player
-{
-    public class PlayerChatEvent : IGameEvent
-    {
-        public PlayerChatEvent(IGame game, IInnerPlayerControl playerControl, string message)
-        {
-            Game = game;
-            PlayerControl = playerControl;
-            Message = message;
-        }
-
-        public IGame Game { get; }
-
-        public IInnerPlayerControl PlayerControl { get; }
-
-        public string Message { get; }
-    }
-}
\ No newline at end of file
diff --git a/src/Impostor.Api/Events/Player/PlayerDestroyedEvent.cs b/src/Impostor.Api/Events/Player/PlayerDestroyedEvent.cs
deleted file mode 100644 (file)
index fcbb562..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-using Impostor.Api.Games;
-using Impostor.Api.Net.Inner.Objects;
-
-namespace Impostor.Api.Events.Player
-{
-    public class PlayerDestroyedEvent : IGameEvent
-    {
-        public PlayerDestroyedEvent(IGame game, IInnerPlayerControl playerControl)
-        {
-            Game = game;
-            PlayerControl = playerControl;
-        }
-
-        public IGame Game { get; }
-
-        public IInnerPlayerControl PlayerControl { get; }
-    }
-}
\ No newline at end of file
diff --git a/src/Impostor.Api/Events/Player/PlayerJoinedGameEvent.cs b/src/Impostor.Api/Events/Player/PlayerJoinedGameEvent.cs
deleted file mode 100644 (file)
index 236580b..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-using Impostor.Api.Games;
-using Impostor.Api.Net;
-
-namespace Impostor.Api.Events.Player
-{
-    public class PlayerJoinedGameEvent : IGameEvent
-    {
-        public PlayerJoinedGameEvent(IGame game, IClientPlayer player)
-        {
-            Game = game;
-            Player = player;
-        }
-
-        public IGame Game { get; }
-
-        public IClientPlayer Player { get; }
-    }
-}
\ No newline at end of file
diff --git a/src/Impostor.Api/Events/Player/PlayerLeftGameEvent.cs b/src/Impostor.Api/Events/Player/PlayerLeftGameEvent.cs
deleted file mode 100644 (file)
index 925cab3..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-using Impostor.Api.Games;
-using Impostor.Api.Net;
-
-namespace Impostor.Api.Events.Player
-{
-    public class PlayerLeftGameEvent : IGameEvent
-    {
-        public PlayerLeftGameEvent(IGame game, IClientPlayer player, bool isBan)
-        {
-            Game = game;
-            Player = player;
-            IsBan = isBan;
-        }
-
-        public IGame Game { get; }
-
-        public IClientPlayer Player { get; }
-
-        public bool IsBan { get; }
-    }
-}
\ No newline at end of file
diff --git a/src/Impostor.Api/Events/Player/PlayerMovementEvent.cs b/src/Impostor.Api/Events/Player/PlayerMovementEvent.cs
deleted file mode 100644 (file)
index 735328f..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-using Impostor.Api.Games;
-
-namespace Impostor.Api.Events.Player
-{
-    public class PlayerMovementEvent : IGameEvent
-    {
-        public PlayerMovementEvent(IGame game)
-        {
-            Game = game;
-        }
-
-        public IGame Game { get; }
-    }
-}
\ No newline at end of file
diff --git a/src/Impostor.Api/Events/Player/PlayerSpawnedEvent.cs b/src/Impostor.Api/Events/Player/PlayerSpawnedEvent.cs
deleted file mode 100644 (file)
index 5dcedd2..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-using Impostor.Api.Games;
-using Impostor.Api.Net.Inner.Objects;
-
-namespace Impostor.Api.Events.Player
-{
-    public class PlayerSpawnedEvent : IGameEvent
-    {
-        public PlayerSpawnedEvent(IGame game, IInnerPlayerControl playerControl)
-        {
-            Game = game;
-            PlayerControl = playerControl;
-        }
-
-        public IGame Game { get; }
-
-        public IInnerPlayerControl PlayerControl { get; }
-    }
-}
\ No newline at end of file
index 458d4bd2234c2f4c28549deaff91561210295263..c55f2ec4b8774ab7b75bcb303cc35b75d3314ac1 100644 (file)
@@ -292,7 +292,7 @@ namespace Impostor.Server.Net.Inner.Objects
 
                     var chat = reader.ReadString();
 
-                    await _eventManager.CallAsync(new PlayerChatEvent(_game, this, chat));
+                    await _eventManager.CallAsync(new PlayerChatEvent(_game, sender, this, chat));
                     break;
                 }
 
index 32cff8bf06dafb8bc6628f05c28bcf11b10a0f84..3fd4b509e293e657455f4d53e230e4207c5f9050 100644 (file)
@@ -4,6 +4,7 @@ using System.Threading;
 using System.Threading.Tasks;
 using Impostor.Api;
 using Impostor.Api.Events;
+using Impostor.Api.Events.Meeting;
 using Impostor.Api.Events.Player;
 using Impostor.Api.Innersloth;
 using Impostor.Api.Net.Messages;
@@ -81,12 +82,14 @@ namespace Impostor.Server.Net.State
                 case InnerPlayerControl control:
                 {
                     // Hook up InnerPlayerControl <-> IClientPlayer.
-                    if (TryGetPlayer(control.OwnerId, out var player))
+                    if (!TryGetPlayer(control.OwnerId, out var player))
                     {
-                        player.Character = control;
-                        player.DisableSpawnTimeout();
+                        throw new ImpostorException("Failed to find player that spawned the InnerPlayerControl");
                     }
 
+                    player.Character = control;
+                    player.DisableSpawnTimeout();
+
                     // Hook up InnerPlayerControl <-> InnerPlayerControl.PlayerInfo.
                     control.PlayerInfo = GameNet.GameData.GetPlayerById(control.PlayerId)!;
 
@@ -100,7 +103,7 @@ namespace Impostor.Server.Net.State
                         control.PlayerInfo!.Controller = control;
                     }
 
-                    await _eventManager.CallAsync(new PlayerSpawnedEvent(this, control));
+                    await _eventManager.CallAsync(new PlayerSpawnedEvent(this, player, control));
 
                     break;
                 }
@@ -149,7 +152,7 @@ namespace Impostor.Server.Net.State
                         player.Character = null;
                     }
 
-                    await _eventManager.CallAsync(new PlayerDestroyedEvent(this, control));
+                    await _eventManager.CallAsync(new PlayerDestroyedEvent(this, player, control));
 
                     break;
                 }