--- /dev/null
+using Impostor.Api.Games;
+using Impostor.Api.Net.Inner.Objects;
+
+namespace Impostor.Api.Events
+{
+ 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
--- /dev/null
+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
--- /dev/null
+namespace Impostor.Api.Net.Inner.Objects
+{
+ public interface IInnerMeetingHud
+ {
+
+ }
+}
\ No newline at end of file
eventManager.RegisterListener(new GameEventListener());
eventManager.RegisterListener(new PlayerEventListener());
+ eventManager.RegisterListener(new MeetingEventListener());
}
public override ValueTask EnableAsync()
--- /dev/null
+using System;
+using Impostor.Api.Events;
+
+namespace Impostor.Plugins.Example.Handlers
+{
+ public class MeetingEventListener : IEventListener
+ {
+ [EventListener]
+ public void OnMeetingStarted(MeetingStartedEvent e)
+ {
+ Console.WriteLine("Meeting > started");
+ }
+
+ [EventListener]
+ public void OnMeetingEnded(MeetingEndedEvent e)
+ {
+ Console.WriteLine("Meeting > ended");
+ }
+ }
+}
\ No newline at end of file
</PropertyGroup>
<ItemGroup>
- <ProjectReference Include="..\Impostor.Api\Impostor.Api.csproj"/>
+ <ProjectReference Include="..\Impostor.Api\Impostor.Api.csproj" />
</ItemGroup>
</Project>
<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
<ApplicationIcon>icon.ico</ApplicationIcon>
<CodeAnalysisRuleSet>ProjectRules.ruleset</CodeAnalysisRuleSet>
+ <Nullable>enable</Nullable>
</PropertyGroup>
<PropertyGroup>
-using System;
-using System.Numerics;
+using System.Numerics;
using System.Threading.Tasks;
using Impostor.Api;
using Impostor.Api.Innersloth;
return new Vector2(XRange.Lerp(v1), YRange.Lerp(v2));
}
- public override async ValueTask HandleRpc(ClientPlayer sender, ClientPlayer? target, RpcCalls call, IMessageReader reader)
+ public override ValueTask HandleRpc(ClientPlayer sender, ClientPlayer? target, RpcCalls call, IMessageReader reader)
{
if (call == RpcCalls.SnapTo)
{
{
_logger.LogWarning("{0}: Unknown rpc call {1}", nameof(InnerCustomNetworkTransform), call);
}
+
+ return default;
}
public override bool Serialize(IMessageWriter writer, bool initialState)
--- /dev/null
+using Impostor.Api.Net.Inner.Objects;
+
+namespace Impostor.Server.Net.Inner.Objects
+{
+ internal partial class InnerMeetingHud : IInnerMeetingHud
+ {
+
+ }
+}
\ No newline at end of file
using System.Linq;
using System.Threading.Tasks;
using Impostor.Api;
+using Impostor.Api.Events;
+using Impostor.Api.Events.Managers;
using Impostor.Api.Net;
using Impostor.Api.Net.Messages;
using Impostor.Server.Net.State;
internal partial class InnerMeetingHud : InnerNetObject
{
private readonly ILogger<InnerMeetingHud> _logger;
+ private readonly IEventManager _eventManager;
private readonly Game _game;
private readonly GameNet _gameNet;
private PlayerVoteArea[] _playerStates;
- public InnerMeetingHud(ILogger<InnerMeetingHud> logger, Game game)
+ public InnerMeetingHud(ILogger<InnerMeetingHud> logger, IEventManager eventManager, Game game)
{
_logger = logger;
+ _eventManager = eventManager;
_game = game;
_gameNet = game.GameNet;
_playerStates = null;
.ToArray();
}
- 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)
{
switch (call)
{
case RpcCalls.Close:
{
+ Console.WriteLine("CLOSEEEE MEETING");
+
if (!sender.IsHost)
{
throw new ImpostorCheatException($"Client sent {nameof(RpcCalls.Close)} but was not a host");
var states = reader.ReadBytesAndSize();
var playerId = reader.ReadByte();
var tie = reader.ReadBoolean();
+
+ await _eventManager.CallAsync(new MeetingEndedEvent(_game, this));
+
break;
}
break;
}
}
-
- return default;
}
public override bool Serialize(IMessageWriter writer, bool initialState)
using System.Threading;
using System.Threading.Tasks;
using Impostor.Api;
+using Impostor.Api.Events;
using Impostor.Api.Events.Net;
using Impostor.Api.Innersloth;
using Impostor.Api.Net.Messages;
break;
}
+
+ case InnerMeetingHud meetingHud:
+ {
+ await _eventManager.CallAsync(new MeetingStartedEvent(this, meetingHud));
+ break;
+ }
}
}