From: Hiumee <42638867+Hiumee@users.noreply.github.com>
Date: Wed, 16 Dec 2020 18:32:52 +0000 (+0200)
Subject: Feature/add player vent event (#237)
X-Git-Tag: v1.2.2~1
X-Git-Url: https://git.deb.at/?a=commitdiff_plain;h=72c923f266142de151f031684befd567a4e5203f;p=rhonda%2Fimpostor.git
Feature/add player vent event (#237)
* Added VentLocation enum
* Added PlayerVentEvent
---
diff --git a/src/Impostor.Api/Events/Game/Player/IPlayerVentEvent.cs b/src/Impostor.Api/Events/Game/Player/IPlayerVentEvent.cs
new file mode 100644
index 0000000..81f178b
--- /dev/null
+++ b/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/src/Impostor.Api/Innersloth/VentLocation.cs b/src/Impostor.Api/Innersloth/VentLocation.cs
new file mode 100644
index 0000000..f9b8567
--- /dev/null
+++ b/src/Impostor.Api/Innersloth/VentLocation.cs
@@ -0,0 +1,48 @@
+namespace Impostor.Api.Innersloth
+{
+ public enum VentLocation : uint
+ {
+ // Skeld
+ SkeldAdmin = 0,
+ SkeldRightHallway = 1,
+ SkeldCafeteria = 2,
+ SkeldElectrical = 3,
+ SkeldUpperEngine = 4,
+ SkeldSecurity = 5,
+ SkeldMedbay = 6,
+ SkeldWeapons = 7,
+ SkeldLowerReactor = 8,
+ SkeldLowerEngine = 9,
+ SkeldShields = 10,
+ SkeldUpperReactor = 11,
+ SkeldUpperNavigation = 12,
+ SkeldLowerNavigation = 13,
+
+ // Mira HQ
+ MiraBalcony = 1,
+ MiraCafeteria = 2,
+ MiraReactor = 3,
+ MiraLaboratory = 4,
+ MiraOffice = 5,
+ MiraAdmin = 6,
+ MiraGreenhouse = 7,
+ MiraMedbay = 8,
+ MiraDecontamination = 9,
+ MiraLockerRoom = 10,
+ MiraLaunchpad = 11,
+
+ // Polus
+ PolusSecurity = 0,
+ PolusElectrical = 1,
+ PolusO2 = 2,
+ PolusCommunications = 3,
+ PolusOffice = 4,
+ PolusAdmin = 5,
+ PolusLaboratory = 6,
+ PolusLava = 7,
+ PolusStorage = 8,
+ PolusRightStabilizer = 9,
+ PolusLeftStabilizer = 10,
+ PolusOutsideAdmin = 11,
+ }
+}
diff --git a/src/Impostor.Server/Events/Game/Player/PlayerVentEvent.cs b/src/Impostor.Server/Events/Game/Player/PlayerVentEvent.cs
new file mode 100644
index 0000000..0798d40
--- /dev/null
+++ b/src/Impostor.Server/Events/Game/Player/PlayerVentEvent.cs
@@ -0,0 +1,30 @@
+using Impostor.Api.Events.Player;
+using Impostor.Api.Games;
+using Impostor.Api.Innersloth;
+using Impostor.Api.Net;
+using Impostor.Api.Net.Inner.Objects;
+
+namespace Impostor.Server.Events.Player
+{
+ public class PlayerVentEvent : IPlayerVentEvent
+ {
+ public PlayerVentEvent(IGame game, IClientPlayer sender, IInnerPlayerControl innerPlayerPhysics, VentLocation ventId, bool ventEnter)
+ {
+ Game = game;
+ ClientPlayer = sender;
+ PlayerControl = innerPlayerPhysics;
+ VentId = ventId;
+ VentEnter = ventEnter;
+ }
+
+ public IGame Game { get; }
+
+ public IClientPlayer ClientPlayer { get; }
+
+ public IInnerPlayerControl PlayerControl { get; }
+
+ public VentLocation VentId { get; }
+
+ public bool VentEnter { get; }
+ }
+}
diff --git a/src/Impostor.Server/Net/Inner/Objects/Components/InnerPlayerPhysics.cs b/src/Impostor.Server/Net/Inner/Objects/Components/InnerPlayerPhysics.cs
index ece39a4..29bc996 100644
--- a/src/Impostor.Server/Net/Inner/Objects/Components/InnerPlayerPhysics.cs
+++ b/src/Impostor.Server/Net/Inner/Objects/Components/InnerPlayerPhysics.cs
@@ -1,8 +1,11 @@
-using System;
+using System;
using System.Threading.Tasks;
using Impostor.Api;
+using Impostor.Api.Events.Managers;
+using Impostor.Api.Innersloth;
using Impostor.Api.Net;
using Impostor.Api.Net.Messages;
+using Impostor.Server.Events.Player;
using Impostor.Server.Net.State;
using Microsoft.Extensions.Logging;
@@ -12,19 +15,23 @@ namespace Impostor.Server.Net.Inner.Objects.Components
{
private readonly ILogger _logger;
private readonly InnerPlayerControl _playerControl;
+ private readonly IEventManager _eventManager;
+ private readonly Game _game;
- public InnerPlayerPhysics(ILogger logger, InnerPlayerControl playerControl)
+ public InnerPlayerPhysics(ILogger logger, InnerPlayerControl playerControl, IEventManager eventManager, Game game)
{
_logger = logger;
_playerControl = playerControl;
+ _eventManager = eventManager;
+ _game = game;
}
- public override ValueTask HandleRpc(ClientPlayer sender, ClientPlayer? target, RpcCalls call, IMessageReader reader)
+ public override async ValueTask HandleRpc(ClientPlayer sender, ClientPlayer? target, RpcCalls call, IMessageReader reader)
{
if (call != RpcCalls.EnterVent && call != RpcCalls.ExitVent)
{
_logger.LogWarning("{0}: Unknown rpc call {1}", nameof(InnerPlayerPhysics), call);
- return default;
+ return;
}
if (!sender.IsOwner(this))
@@ -45,9 +52,9 @@ namespace Impostor.Server.Net.Inner.Objects.Components
var ventId = reader.ReadPackedUInt32();
var ventEnter = call == RpcCalls.EnterVent;
- // TODO: Do stuff.
+ await _eventManager.CallAsync(new PlayerVentEvent(_game, sender, _playerControl, (VentLocation)ventId, ventEnter));
- return default;
+ return;
}
public override bool Serialize(IMessageWriter writer, bool initialState)
diff --git a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs
index a2c6396..c71fcf7 100644
--- a/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs
+++ b/src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs
@@ -26,7 +26,7 @@ namespace Impostor.Server.Net.Inner.Objects
_eventManager = eventManager;
_game = game;
- Physics = ActivatorUtilities.CreateInstance(serviceProvider, this);
+ Physics = ActivatorUtilities.CreateInstance(serviceProvider, this, _eventManager, _game);
NetworkTransform = ActivatorUtilities.CreateInstance(serviceProvider, this, _game);
Components.Add(this);