From d1daf1623a169c150111d93a0ed7551f82f4d814 Mon Sep 17 00:00:00 2001 From: AeonLucid Date: Mon, 26 Oct 2020 00:53:04 +0100 Subject: [PATCH] Fixes #82 - Expose IClientPlayer in relevant events --- .../Events/Game/GameEndedEvent.cs | 2 +- .../{ => Game}/Meeting/MeetingEndedEvent.cs | 0 .../{ => Game}/Meeting/MeetingStartedEvent.cs | 2 +- .../Events/Game/Player/IPlayerEvent.cs | 19 ++++++++++++ .../Events/Game/Player/PlayerChatEvent.cs | 31 +++++++++++++++++++ .../Game/Player/PlayerDestroyedEvent.cs | 25 +++++++++++++++ .../Events/Game/Player/PlayerMovementEvent.cs | 22 +++++++++++++ .../Events/Game/Player/PlayerSpawnedEvent.cs | 25 +++++++++++++++ .../{Player => Game}/PlayerJoinedGameEvent.cs | 2 +- .../{Player => Game}/PlayerLeftGameEvent.cs | 2 +- .../Events/Player/PlayerChatEvent.cs | 21 ------------- .../Events/Player/PlayerDestroyedEvent.cs | 18 ----------- .../Events/Player/PlayerMovementEvent.cs | 14 --------- .../Events/Player/PlayerSpawnedEvent.cs | 18 ----------- .../Net/Inner/Objects/InnerPlayerControl.cs | 2 +- src/Impostor.Server/Net/State/Game.Data.cs | 13 +++++--- 16 files changed, 135 insertions(+), 81 deletions(-) rename src/Impostor.Api/Events/{ => Game}/Meeting/MeetingEndedEvent.cs (100%) rename src/Impostor.Api/Events/{ => Game}/Meeting/MeetingStartedEvent.cs (90%) create mode 100644 src/Impostor.Api/Events/Game/Player/IPlayerEvent.cs create mode 100644 src/Impostor.Api/Events/Game/Player/PlayerChatEvent.cs create mode 100644 src/Impostor.Api/Events/Game/Player/PlayerDestroyedEvent.cs create mode 100644 src/Impostor.Api/Events/Game/Player/PlayerMovementEvent.cs create mode 100644 src/Impostor.Api/Events/Game/Player/PlayerSpawnedEvent.cs rename src/Impostor.Api/Events/{Player => Game}/PlayerJoinedGameEvent.cs (90%) rename src/Impostor.Api/Events/{Player => Game}/PlayerLeftGameEvent.cs (91%) delete mode 100644 src/Impostor.Api/Events/Player/PlayerChatEvent.cs delete mode 100644 src/Impostor.Api/Events/Player/PlayerDestroyedEvent.cs delete mode 100644 src/Impostor.Api/Events/Player/PlayerMovementEvent.cs delete mode 100644 src/Impostor.Api/Events/Player/PlayerSpawnedEvent.cs diff --git a/src/Impostor.Api/Events/Game/GameEndedEvent.cs b/src/Impostor.Api/Events/Game/GameEndedEvent.cs index 0628fcf..1dc2f63 100644 --- a/src/Impostor.Api/Events/Game/GameEndedEvent.cs +++ b/src/Impostor.Api/Events/Game/GameEndedEvent.cs @@ -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/Meeting/MeetingEndedEvent.cs b/src/Impostor.Api/Events/Game/Meeting/MeetingEndedEvent.cs similarity index 100% rename from src/Impostor.Api/Events/Meeting/MeetingEndedEvent.cs rename to src/Impostor.Api/Events/Game/Meeting/MeetingEndedEvent.cs diff --git a/src/Impostor.Api/Events/Meeting/MeetingStartedEvent.cs b/src/Impostor.Api/Events/Game/Meeting/MeetingStartedEvent.cs similarity index 90% rename from src/Impostor.Api/Events/Meeting/MeetingStartedEvent.cs rename to src/Impostor.Api/Events/Game/Meeting/MeetingStartedEvent.cs index 1265b5b..8ad8964 100644 --- a/src/Impostor.Api/Events/Meeting/MeetingStartedEvent.cs +++ b/src/Impostor.Api/Events/Game/Meeting/MeetingStartedEvent.cs @@ -1,7 +1,7 @@ using Impostor.Api.Games; using Impostor.Api.Net.Inner.Objects; -namespace Impostor.Api.Events +namespace Impostor.Api.Events.Meeting { public class MeetingStartedEvent : IEvent { diff --git a/src/Impostor.Api/Events/Game/Player/IPlayerEvent.cs b/src/Impostor.Api/Events/Game/Player/IPlayerEvent.cs new file mode 100644 index 0000000..247fe64 --- /dev/null +++ b/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/src/Impostor.Api/Events/Game/Player/PlayerChatEvent.cs b/src/Impostor.Api/Events/Game/Player/PlayerChatEvent.cs new file mode 100644 index 0000000..5be360c --- /dev/null +++ b/src/Impostor.Api/Events/Game/Player/PlayerChatEvent.cs @@ -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; + } + + /// + public IGame Game { get; } + + /// + public IClientPlayer ClientPlayer { get; } + + /// + public IInnerPlayerControl PlayerControl { get; } + + /// + /// Gets the message sent by the player. + /// + 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 index 0000000..dc4b608 --- /dev/null +++ b/src/Impostor.Api/Events/Game/Player/PlayerDestroyedEvent.cs @@ -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; + } + + /// + 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/PlayerMovementEvent.cs b/src/Impostor.Api/Events/Game/Player/PlayerMovementEvent.cs new file mode 100644 index 0000000..7fa0085 --- /dev/null +++ b/src/Impostor.Api/Events/Game/Player/PlayerMovementEvent.cs @@ -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 index 0000000..2078f04 --- /dev/null +++ b/src/Impostor.Api/Events/Game/Player/PlayerSpawnedEvent.cs @@ -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; + } + + /// + 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/Player/PlayerJoinedGameEvent.cs b/src/Impostor.Api/Events/Game/PlayerJoinedGameEvent.cs similarity index 90% rename from src/Impostor.Api/Events/Player/PlayerJoinedGameEvent.cs rename to src/Impostor.Api/Events/Game/PlayerJoinedGameEvent.cs index 236580b..3c165aa 100644 --- a/src/Impostor.Api/Events/Player/PlayerJoinedGameEvent.cs +++ b/src/Impostor.Api/Events/Game/PlayerJoinedGameEvent.cs @@ -1,7 +1,7 @@ using Impostor.Api.Games; using Impostor.Api.Net; -namespace Impostor.Api.Events.Player +namespace Impostor.Api.Events { public class PlayerJoinedGameEvent : IGameEvent { diff --git a/src/Impostor.Api/Events/Player/PlayerLeftGameEvent.cs b/src/Impostor.Api/Events/Game/PlayerLeftGameEvent.cs similarity index 91% rename from src/Impostor.Api/Events/Player/PlayerLeftGameEvent.cs rename to src/Impostor.Api/Events/Game/PlayerLeftGameEvent.cs index 925cab3..5947ff2 100644 --- a/src/Impostor.Api/Events/Player/PlayerLeftGameEvent.cs +++ b/src/Impostor.Api/Events/Game/PlayerLeftGameEvent.cs @@ -1,7 +1,7 @@ using Impostor.Api.Games; using Impostor.Api.Net; -namespace Impostor.Api.Events.Player +namespace Impostor.Api.Events { public class PlayerLeftGameEvent : IGameEvent { diff --git a/src/Impostor.Api/Events/Player/PlayerChatEvent.cs b/src/Impostor.Api/Events/Player/PlayerChatEvent.cs deleted file mode 100644 index a5c62cd..0000000 --- a/src/Impostor.Api/Events/Player/PlayerChatEvent.cs +++ /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 index fcbb562..0000000 --- a/src/Impostor.Api/Events/Player/PlayerDestroyedEvent.cs +++ /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/PlayerMovementEvent.cs b/src/Impostor.Api/Events/Player/PlayerMovementEvent.cs deleted file mode 100644 index 735328f..0000000 --- a/src/Impostor.Api/Events/Player/PlayerMovementEvent.cs +++ /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 index 5dcedd2..0000000 --- a/src/Impostor.Api/Events/Player/PlayerSpawnedEvent.cs +++ /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 diff --git a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs index 458d4bd..c55f2ec 100644 --- a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs +++ b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs @@ -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; } diff --git a/src/Impostor.Server/Net/State/Game.Data.cs b/src/Impostor.Server/Net/State/Game.Data.cs index 32cff8b..3fd4b50 100644 --- a/src/Impostor.Server/Net/State/Game.Data.cs +++ b/src/Impostor.Server/Net/State/Game.Data.cs @@ -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; } -- 2.39.5