Make PlayerVentEvent an actual PlayerVentEvent

This commit is contained in:
js6pak committed 2021-04-06 21:10:53 +02:00
1 parent f03e72206e
commit bfba4385fd
9 files changed
+122 -12

No files matched your search

@@ -0,0 +1,12 @@
using Impostor.Api.Innersloth;
namespace Impostor.Api.Events.Player
{
public interface IPlayerEnterVentEvent : IPlayerEvent
{
/// <summary>
/// Gets get the id of the used vent.
/// </summary>
public Vent Vent { get; }
}
}
@@ -0,0 +1,12 @@
using Impostor.Api.Innersloth;
namespace Impostor.Api.Events.Player
{
public interface IPlayerExitVentEvent : IPlayerEvent
{
/// <summary>
/// Gets get the id of the used vent.
/// </summary>
public Vent Vent { get; }
}
}
@@ -8,10 +8,5 @@ namespace Impostor.Api.Events.Player
/// Gets get the id of the used vent.
/// </summary>
public Vent Vent { get; }
/// <summary>
/// Gets a value indicating whether the vent was entered or exited.
/// </summary>
public bool VentEnter { get; }
}
}
@@ -94,10 +94,22 @@ namespace Impostor.Plugins.Example.Handlers
_logger.LogInformation("Player {player} > started meeting, reason: {reason}", e.PlayerControl.PlayerInfo.PlayerName, e.Body == null ? "Emergency call button" : "Found the body of the player " + e.Body.PlayerInfo.PlayerName);
}
[EventListener]
public void OnPlayerEnterVentEvent(IPlayerEnterVentEvent e)
{
_logger.LogInformation("Player {player} entered the vent in {vent}", e.PlayerControl.PlayerInfo.PlayerName, e.Vent.Name);
}
[EventListener]
public void OnPlayerExitVentEvent(IPlayerExitVentEvent e)
{
_logger.LogInformation("Player {player} exit the vent in {vent}", e.PlayerControl.PlayerInfo.PlayerName, e.Vent.Name);
}
[EventListener]
public void OnPlayerVentEvent(IPlayerVentEvent e)
{
_logger.LogInformation("Player {player} " + (e.VentEnter ? "entered" : "exit") + " the vent in {vent}", e.PlayerControl.PlayerInfo.PlayerName, e.Vent.Name);
_logger.LogInformation("Player {player} vented to {vent}", e.PlayerControl.PlayerInfo.PlayerName, e.Vent.Name);
}
}
}
@@ -0,0 +1,27 @@
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 PlayerEnterVentEvent : IPlayerEnterVentEvent
{
public PlayerEnterVentEvent(IGame game, IClientPlayer sender, IInnerPlayerControl innerPlayerPhysics, Vent vent)
{
Game = game;
ClientPlayer = sender;
PlayerControl = innerPlayerPhysics;
Vent = vent;
}
public IGame Game { get; }
public IClientPlayer ClientPlayer { get; }
public IInnerPlayerControl PlayerControl { get; }
public Vent Vent { get; }
}
}
@@ -0,0 +1,27 @@
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 PlayerExitVentEvent : IPlayerExitVentEvent
{
public PlayerExitVentEvent(IGame game, IClientPlayer sender, IInnerPlayerControl innerPlayerPhysics, Vent vent)
{
Game = game;
ClientPlayer = sender;
PlayerControl = innerPlayerPhysics;
Vent = vent;
}
public IGame Game { get; }
public IClientPlayer ClientPlayer { get; }
public IInnerPlayerControl PlayerControl { get; }
public Vent Vent { get; }
}
}
@@ -8,13 +8,12 @@ namespace Impostor.Server.Events.Player
{
public class PlayerVentEvent : IPlayerVentEvent
{
public PlayerVentEvent(IGame game, IClientPlayer sender, IInnerPlayerControl innerPlayerPhysics, Vent vent, bool ventEnter)
public PlayerVentEvent(IGame game, IClientPlayer sender, IInnerPlayerControl innerPlayerPhysics, Vent vent)
{
Game = game;
ClientPlayer = sender;
PlayerControl = innerPlayerPhysics;
Vent = vent;
VentEnter = ventEnter;
}
public IGame Game { get; }
@@ -24,7 +23,5 @@ namespace Impostor.Server.Events.Player
public IInnerPlayerControl PlayerControl { get; }
public Vent Vent { get; }
public bool VentEnter { get; }
}
}
@@ -17,6 +17,8 @@ namespace Impostor.Server.Net.Inner.Objects.Components
{
internal partial class InnerCustomNetworkTransform : InnerNetObject
{
private static readonly Vector2 ColliderOffset = new Vector2(0f, -0.4f);
private readonly ILogger<InnerCustomNetworkTransform> _logger;
private readonly InnerPlayerControl _playerControl;
private readonly IEventManager _eventManager;
@@ -113,7 +115,22 @@ namespace Impostor.Server.Net.Inner.Objects.Components
return false;
}
// TODO validate vent location
var vents = Game.GameNet.ShipStatus!.Data.Vents.Values;
var vent = vents.SingleOrDefault(x => Approximately(x.Position, position + ColliderOffset));
if (vent == null)
{
if (await sender.Client.ReportCheatAsync(call, "Failed vent position check"))
{
return false;
}
}
else
{
await _eventManager.CallAsync(new PlayerVentEvent(Game, sender, _playerControl, vent));
}
await SnapToAsync(sender, position, minSid);
return true;
}
@@ -66,7 +66,18 @@ namespace Impostor.Server.Net.Inner.Objects.Components
throw new ArgumentOutOfRangeException(nameof(call), call, null);
}
await _eventManager.CallAsync(new PlayerVentEvent(Game, sender, _playerControl, Game.GameNet.ShipStatus!.Data.Vents[ventId], call == RpcCalls.EnterVent));
var vent = Game.GameNet.ShipStatus!.Data.Vents[ventId];
switch (call)
{
case RpcCalls.EnterVent:
await _eventManager.CallAsync(new PlayerEnterVentEvent(Game, sender, _playerControl, vent));
break;
case RpcCalls.ExitVent:
await _eventManager.CallAsync(new PlayerExitVentEvent(Game, sender, _playerControl, vent));
break;
}
break;
case RpcCalls.ClimbLadder: