]> git.deb.at Git - rhonda/impostor.git/commitdiff
Clean up unused serialization and expose two HideAndSeek floats in api
authorAeonLucid <aeonlucid@gmail.com>
Mon, 19 Dec 2022 14:34:55 +0000 (15:34 +0100)
committerAeonLucid <aeonlucid@gmail.com>
Mon, 19 Dec 2022 14:34:55 +0000 (15:34 +0100)
26 files changed:
src/Impostor.Api/Net/Inner/IGameNet.cs
src/Impostor.Api/Net/Inner/Objects/GameManager/IInnerHideAndSeekManager.cs
src/Impostor.Api/Net/Inner/Objects/GameManager/Logic/HideAndSeek/ILogicGameFlowHnS.cs [new file with mode: 0644]
src/Impostor.Server/Net/Inner/Objects/GameManager/InnerGameManager.cs
src/Impostor.Server/Net/Inner/Objects/GameManager/InnerHideAndSeekManager.Api.cs [new file with mode: 0644]
src/Impostor.Server/Net/Inner/Objects/GameManager/InnerHideAndSeekManager.cs
src/Impostor.Server/Net/Inner/Objects/GameManager/InnerNormalGameManager.cs
src/Impostor.Server/Net/Inner/Objects/GameManager/Logic/GameLogicComponent.cs
src/Impostor.Server/Net/Inner/Objects/GameManager/Logic/HideAndSeek/LogicGameFlowHnS.cs
src/Impostor.Server/Net/Inner/Objects/GameManager/Logic/HideAndSeek/LogicHnSDangerLevel.cs
src/Impostor.Server/Net/Inner/Objects/GameManager/Logic/HideAndSeek/LogicHnSDeathPopup.cs
src/Impostor.Server/Net/Inner/Objects/GameManager/Logic/HideAndSeek/LogicHnSMusic.cs
src/Impostor.Server/Net/Inner/Objects/GameManager/Logic/HideAndSeek/LogicMinigameHnS.cs
src/Impostor.Server/Net/Inner/Objects/GameManager/Logic/HideAndSeek/LogicOptionsHnS.cs
src/Impostor.Server/Net/Inner/Objects/GameManager/Logic/HideAndSeek/LogicPingsHnS.cs
src/Impostor.Server/Net/Inner/Objects/GameManager/Logic/HideAndSeek/LogicRoleSelectionHnS.cs
src/Impostor.Server/Net/Inner/Objects/GameManager/Logic/HideAndSeek/LogicUsablesHnS.cs
src/Impostor.Server/Net/Inner/Objects/GameManager/Logic/LogicMinigame.cs
src/Impostor.Server/Net/Inner/Objects/GameManager/Logic/Normal/LogicGameFlowNormal.cs
src/Impostor.Server/Net/Inner/Objects/GameManager/Logic/Normal/LogicOptionsNormal.cs
src/Impostor.Server/Net/Inner/Objects/GameManager/Logic/Normal/LogicRoleSelectionNormal.cs
src/Impostor.Server/Net/Inner/Objects/GameManager/Logic/Normal/LogicUsablesBasic.cs
src/Impostor.Server/Net/State/Game.Api.cs
src/Impostor.Server/Net/State/Game.Data.cs
src/Impostor.Server/Net/State/GameNet.Api.cs
src/Impostor.Server/Net/State/GameNet.cs

index 7b068d108cb359c90f869121101261837bcc96eb..0167b5c765e250373865d722b5dc6687b60ea829 100644 (file)
@@ -1,4 +1,5 @@
 using Impostor.Api.Net.Inner.Objects;
+using Impostor.Api.Net.Inner.Objects.GameManager;
 using Impostor.Api.Net.Inner.Objects.ShipStatus;
 
 namespace Impostor.Api.Net.Inner
@@ -8,6 +9,8 @@ namespace Impostor.Api.Net.Inner
     /// </summary>
     public interface IGameNet
     {
+        IInnerGameManager? GameManager { get; }
+
         IInnerLobbyBehaviour? LobbyBehaviour { get; }
 
         IInnerGameData? GameData { get; }
index b8267f60892664257879e8c4c9de708d7c390607..24a84b2663bd62bf78607d1ac27f22300af86703 100644 (file)
@@ -1,6 +1,8 @@
-namespace Impostor.Api.Net.Inner.Objects.GameManager;
+using Impostor.Api.Net.Inner.Objects.GameManager.Logic.HideAndSeek;
 
-internal interface IInnerHideAndSeekManager
+namespace Impostor.Api.Net.Inner.Objects.GameManager;
+
+public interface IInnerHideAndSeekManager
 {
-    
+    ILogicGameFlowHnS LogicFlowHnS { get; }
 }
diff --git a/src/Impostor.Api/Net/Inner/Objects/GameManager/Logic/HideAndSeek/ILogicGameFlowHnS.cs b/src/Impostor.Api/Net/Inner/Objects/GameManager/Logic/HideAndSeek/ILogicGameFlowHnS.cs
new file mode 100644 (file)
index 0000000..98a2f41
--- /dev/null
@@ -0,0 +1,8 @@
+namespace Impostor.Api.Net.Inner.Objects.GameManager.Logic.HideAndSeek;
+
+public interface ILogicGameFlowHnS
+{
+    float CurrentFinalHideTime { get; }
+
+    float CurrentHideTime { get; }
+}
index 08891ae362a067cb186ef5bf47ad99a6f5155b5a..8ed3a00410d7e64d492923e48088576d48e90576 100644 (file)
@@ -2,6 +2,7 @@
 using System.Threading.Tasks;
 using Impostor.Api.Net;
 using Impostor.Api.Net.Custom;
+using Impostor.Api.Net.Inner;
 using Impostor.Api.Net.Inner.Objects.GameManager;
 using Impostor.Server.Net.Inner.Objects.GameManager.Logic;
 using Impostor.Server.Net.State;
@@ -12,6 +13,7 @@ namespace Impostor.Server.Net.Inner.Objects.GameManager;
 internal abstract class InnerGameManager : InnerNetObject, IInnerGameManager
 {
     private readonly ILogger<InnerGameManager> _logger;
+    private readonly List<GameLogicComponent> _logicComponents = new();
 
     public InnerGameManager(ICustomMessageManager<ICustomRpc> customMessageManager, Game game, ILogger<InnerGameManager> logger) : base(customMessageManager, game)
     {
@@ -20,8 +22,6 @@ internal abstract class InnerGameManager : InnerNetObject, IInnerGameManager
         Components.Add(this);
     }
 
-    protected readonly List<GameLogicComponent> LogicComponents = new();
-
     public LogicGameFlow LogicFlow { get; protected init; } = null!;
 
     public LogicMinigame LogicMinigame { get; protected init; } = null!;
@@ -35,23 +35,30 @@ internal abstract class InnerGameManager : InnerNetObject, IInnerGameManager
     protected T AddGameLogic<T>(T logic)
         where T : GameLogicComponent
     {
-        LogicComponents.Add(logic);
+        _logicComponents.Add(logic);
         return logic;
     }
 
-    internal int? GetGameLogicTag<T>(T logic)
+    /// <summary>
+    ///     Finds the tag of the registered <see cref="GameLogicComponent"/>.
+    /// </summary>
+    /// <param name="logic">Instance to search for.</param>
+    /// <typeparam name="T">Intance type to search for.</typeparam>
+    /// <returns>Tag of the registered <see cref="GameLogicComponent"/>, or -1 if not found.</returns>
+    internal int GetGameLogicTag<T>(T logic)
         where T : GameLogicComponent
     {
-        for (var i = 0; i < LogicComponents.Count; i++)
+        return _logicComponents.IndexOf(logic);
+    }
+
+    public override ValueTask<bool> HandleRpcAsync(ClientPlayer sender, ClientPlayer? target, RpcCalls call, IMessageReader reader)
+    {
+        foreach (var logicComponent in _logicComponents)
         {
-            var component = LogicComponents[i];
-            if (component == logic)
-            {
-                return i;
-            }
+            logicComponent.HandleRPC(call, reader);
         }
 
-        return null;
+        return ValueTask.FromResult(true);
     }
 
     public override ValueTask<bool> SerializeAsync(IMessageWriter writer, bool initialState)
@@ -65,13 +72,13 @@ internal abstract class InnerGameManager : InnerNetObject, IInnerGameManager
         {
             var innerReader = reader.ReadMessage();
             var tag = (int)innerReader.Tag;
-            if (tag < 0 || tag > this.LogicComponents.Count)
+            if (tag < 0 || tag > this._logicComponents.Count)
             {
                 _logger.LogError("Out of bounds in DeserializeAsync of InnerGameManager");
                 continue;
             }
 
-            this.LogicComponents[tag].Deserialize(innerReader, initialState);
+            this._logicComponents[tag].Deserialize(innerReader, initialState);
         }
 
         return ValueTask.CompletedTask;
diff --git a/src/Impostor.Server/Net/Inner/Objects/GameManager/InnerHideAndSeekManager.Api.cs b/src/Impostor.Server/Net/Inner/Objects/GameManager/InnerHideAndSeekManager.Api.cs
new file mode 100644 (file)
index 0000000..308588e
--- /dev/null
@@ -0,0 +1,9 @@
+using Impostor.Api.Net.Inner.Objects.GameManager;
+using Impostor.Api.Net.Inner.Objects.GameManager.Logic.HideAndSeek;
+
+namespace Impostor.Server.Net.Inner.Objects.GameManager;
+
+internal partial class InnerHideAndSeekManager
+{
+    ILogicGameFlowHnS IInnerHideAndSeekManager.LogicFlowHnS => LogicFlowHnS;
+}
index 306f9b0fb6a98f45d2ec2c44393ec260c724bb6a..b8468fe10ece4c8600f790f664e7432702d1b210 100644 (file)
@@ -6,21 +6,21 @@ using Microsoft.Extensions.Logging;
 
 namespace Impostor.Server.Net.Inner.Objects.GameManager;
 
-internal class InnerHideAndSeekManager : InnerGameManager, IInnerHideAndSeekManager
+internal partial class InnerHideAndSeekManager : InnerGameManager, IInnerHideAndSeekManager
 {
     public InnerHideAndSeekManager(ICustomMessageManager<ICustomRpc> customMessageManager, Game game, ILogger<InnerGameManager> logger) : base(customMessageManager, game, logger)
     {
-        LogicMusic = AddGameLogic(new LogicHnSMusic(this));
-        LogicMinigame = AddGameLogic(new LogicMinigameHnS(this));
-        LogicFlowHnS = new LogicGameFlowHnS(this);
+        LogicMusic = AddGameLogic(new LogicHnSMusic());
+        LogicMinigame = AddGameLogic(new LogicMinigameHnS());
+        LogicFlowHnS = new LogicGameFlowHnS();
         LogicFlow = AddGameLogic(LogicFlowHnS);
         LogicUsables = AddGameLogic(new LogicUsablesHnS());
-        LogicRoleSelection = AddGameLogic(new LogicRoleSelectionHnS(this));
-        LogicOptionsHnS = new LogicOptionsHnS(this, game);
+        LogicRoleSelection = AddGameLogic(new LogicRoleSelectionHnS());
+        LogicOptionsHnS = new LogicOptionsHnS(game);
         LogicOptions = AddGameLogic(this.LogicOptionsHnS);
-        LogicDangerLevel = AddGameLogic(new LogicHnSDangerLevel(this));
-        LogicPing = AddGameLogic(new LogicPingsHnS(this));
-        LogicDeathPopup = AddGameLogic(new LogicHnSDeathPopup(this));
+        LogicDangerLevel = AddGameLogic(new LogicHnSDangerLevel());
+        LogicPing = AddGameLogic(new LogicPingsHnS());
+        LogicDeathPopup = AddGameLogic(new LogicHnSDeathPopup());
     }
 
     public LogicHnSMusic LogicMusic { get; private set; }
index 9b8e3b7916f183f90445d4946689238543fb084a..a3e715ad5c48751063b35d568e9d927ddfb7d9ec 100644 (file)
@@ -11,10 +11,10 @@ internal class InnerNormalGameManager : InnerGameManager, IInnerNormalGameManage
 {
     public InnerNormalGameManager(ICustomMessageManager<ICustomRpc> customMessageManager, Game game, ILogger<InnerGameManager> logger) : base(customMessageManager, game, logger)
     {
-        LogicFlow = AddGameLogic(new LogicGameFlowNormal(this));
-        LogicMinigame = AddGameLogic(new LogicMinigame(this));
-        LogicRoleSelection = AddGameLogic(new LogicRoleSelectionNormal(this));
-        LogicUsables = AddGameLogic(new LogicUsablesBasic(this));
-        LogicOptions = AddGameLogic(new LogicOptionsNormal(this, game));
+        LogicFlow = AddGameLogic(new LogicGameFlowNormal());
+        LogicMinigame = AddGameLogic(new LogicMinigame());
+        LogicRoleSelection = AddGameLogic(new LogicRoleSelectionNormal());
+        LogicUsables = AddGameLogic(new LogicUsablesBasic());
+        LogicOptions = AddGameLogic(new LogicOptionsNormal(game));
     }
 }
index 9241a19c311847a9a3c96dccaf3e297ae0e84cdc..5e2b4d55a8af84abadf030d762d8a285addcd707 100644 (file)
@@ -1,19 +1,22 @@
-using Impostor.Api.Net.Inner;
-using Impostor.Api.Net.Inner.Objects;
+using System;
+using Impostor.Api.Net.Inner;
 
 namespace Impostor.Server.Net.Inner.Objects.GameManager.Logic;
 
 internal abstract class GameLogicComponent
 {
-    public virtual void OnPlayerDisconnect(IInnerPlayerControl pc)
+    public virtual void HandleRPC(RpcCalls callId, IMessageReader reader)
     {
+        throw new NotImplementedException($"Unhandled RpcCall {callId}");
     }
 
-    public virtual void HandleRPC(RpcCalls callId, IMessageReader reader)
+    public virtual bool Serialize(IMessageWriter writer, bool initialState)
     {
+        throw new NotImplementedException();
     }
 
-    public abstract bool Serialize(IMessageWriter writer, bool initialState);
-
-    public abstract void Deserialize(IMessageReader reader, bool initialState);
+    public virtual void Deserialize(IMessageReader reader, bool initialState)
+    {
+        throw new NotImplementedException();
+    }
 }
index 47e3c7cef95d36c89fccf2df1939082296d6ff88..1033b5f9e89427b9ee67097acd47493b16bd9a0a 100644 (file)
@@ -1,24 +1,18 @@
-namespace Impostor.Server.Net.Inner.Objects.GameManager.Logic.HideAndSeek;
+using Impostor.Api.Net.Inner.Objects.GameManager.Logic.HideAndSeek;
 
-internal class LogicGameFlowHnS : LogicGameFlow
-{
-    private float currentFinalHideTime;
-    private float currentHideTime;
-
-    public LogicGameFlowHnS(InnerHideAndSeekManager gameManager)
-    {
-    }
-
-    public override bool Serialize(IMessageWriter writer, bool initialState)
-    {
-        throw new System.NotImplementedException();
-    }
+namespace Impostor.Server.Net.Inner.Objects.GameManager.Logic.HideAndSeek;
 
+internal class LogicGameFlowHnS : LogicGameFlow, ILogicGameFlowHnS
+{
     public override void Deserialize(IMessageReader reader, bool initialState)
     {
         var num = reader.ReadSingle();
 
-        currentFinalHideTime = reader.ReadSingle();
-        currentHideTime = num;
+        CurrentFinalHideTime = reader.ReadSingle();
+        CurrentHideTime = num;
     }
+
+    public float CurrentFinalHideTime { get; private set; }
+
+    public float CurrentHideTime { get; private set; }
 }
index eae6ee2ce1d50c7b3cfb6992a146991fdf7ede07..ba4fc85c62502ae7a15538ff3b9cecfbe4d8c89c 100644 (file)
@@ -2,16 +2,4 @@
 
 internal class LogicHnSDangerLevel : GameLogicComponent
 {
-    public LogicHnSDangerLevel(InnerHideAndSeekManager gameManager)
-    {
-    }
-
-    public override bool Serialize(IMessageWriter writer, bool initialState)
-    {
-        return false;
-    }
-
-    public override void Deserialize(IMessageReader reader, bool initialState)
-    {
-    }
 }
index f2ef71261a65ff3e285ab46697499bef7f3b1fd1..b624c967dd9a275682cce19d34de4d9c0b3612e9 100644 (file)
@@ -2,16 +2,4 @@
 
 internal class LogicHnSDeathPopup : GameLogicComponent
 {
-    public LogicHnSDeathPopup(InnerHideAndSeekManager gameManager)
-    {
-    }
-
-    public override bool Serialize(IMessageWriter writer, bool initialState)
-    {
-        return false;
-    }
-
-    public override void Deserialize(IMessageReader reader, bool initialState)
-    {
-    }
 }
index b775b295867e168c0e39a589ba2f3f64f445e832..e0f0a33e5291018832fba86ce8d4930b4e878c68 100644 (file)
@@ -2,16 +2,4 @@
 
 internal class LogicHnSMusic : GameLogicComponent
 {
-    public LogicHnSMusic(InnerHideAndSeekManager gameManager)
-    {
-    }
-
-    public override bool Serialize(IMessageWriter writer, bool initialState)
-    {
-        return false;
-    }
-
-    public override void Deserialize(IMessageReader reader, bool initialState)
-    {
-    }
 }
index aa5438b879b0d84a7206cacc6ac26e87749e00c1..1e44fad4f32278dc41a5fa93cf2a6ef6d9b6e7d5 100644 (file)
@@ -2,7 +2,4 @@
 
 internal class LogicMinigameHnS : LogicMinigame
 {
-    public LogicMinigameHnS(InnerHideAndSeekManager gameManager) : base(gameManager)
-    {
-    }
 }
index 3b2f313e2417db19af968a24bbe727b42b590407..9a4e89a61103866ca00369afb50536c78795ee23 100644 (file)
@@ -4,7 +4,7 @@ namespace Impostor.Server.Net.Inner.Objects.GameManager.Logic.HideAndSeek;
 
 internal class LogicOptionsHnS : LogicOptions
 {
-    public LogicOptionsHnS(InnerHideAndSeekManager gameManager, Game game) : base(game)
+    public LogicOptionsHnS(Game game) : base(game)
     {
     }
 }
index 62682ea0913c244d57585ad23092c1fac658a641..ff60e30826124d681dfc45f2fff72abf53b34434 100644 (file)
@@ -2,16 +2,4 @@
 
 internal class LogicPingsHnS : GameLogicComponent
 {
-    public LogicPingsHnS(InnerHideAndSeekManager gameManager)
-    {
-    }
-
-    public override bool Serialize(IMessageWriter writer, bool initialState)
-    {
-        return false;
-    }
-
-    public override void Deserialize(IMessageReader reader, bool initialState)
-    {
-    }
 }
index d65f74e1c32c79b183f1e49a9fae3a5de1b4ed70..2acd488b688e9f0732727b85b83656806b7f515b 100644 (file)
@@ -2,16 +2,4 @@
 
 internal class LogicRoleSelectionHnS : LogicRoleSelection
 {
-    public LogicRoleSelectionHnS(InnerHideAndSeekManager gameManager)
-    {
-    }
-
-    public override bool Serialize(IMessageWriter writer, bool initialState)
-    {
-        return false;
-    }
-
-    public override void Deserialize(IMessageReader reader, bool initialState)
-    {
-    }
 }
index 61df1293b68c183525b3f80bb8d256a849ea630e..3022cdc09972d114b5261a1e5024ecd4739acaf4 100644 (file)
@@ -2,12 +2,4 @@
 
 internal class LogicUsablesHnS : LogicUsables
 {
-    public override bool Serialize(IMessageWriter writer, bool initialState)
-    {
-        return false;
-    }
-
-    public override void Deserialize(IMessageReader reader, bool initialState)
-    {
-    }
 }
index 13c938bc2ed88fa70fac54b32bae43f5e3d62747..7fd1e3bb6ba141935a93fb841f3c4541a44d2d99 100644 (file)
@@ -2,16 +2,4 @@
 
 internal class LogicMinigame : GameLogicComponent
 {
-    public LogicMinigame(InnerGameManager gameManager)
-    {
-    }
-
-    public override bool Serialize(IMessageWriter writer, bool initialState)
-    {
-        return false;
-    }
-
-    public override void Deserialize(IMessageReader reader, bool initialState)
-    {
-    }
 }
index 30febf1e15393d664d5f6a7addd87355064a5dec..2be3c7fbe6eaaf0c90dd63a4270a13009051114d 100644 (file)
@@ -2,16 +2,4 @@
 
 internal class LogicGameFlowNormal : LogicGameFlow
 {
-    public LogicGameFlowNormal(InnerNormalGameManager gameManager)
-    {
-    }
-
-    public override bool Serialize(IMessageWriter writer, bool initialState)
-    {
-        return false;
-    }
-
-    public override void Deserialize(IMessageReader reader, bool initialState)
-    {
-    }
 }
index b94649b07646ee30c3d3e9fce65bb7e29fe6dfa8..944fc56e4ada405ddd166a1aa8caed9c6cfed17b 100644 (file)
@@ -4,7 +4,7 @@ namespace Impostor.Server.Net.Inner.Objects.GameManager.Logic.Normal;
 
 internal class LogicOptionsNormal : LogicOptions
 {
-    public LogicOptionsNormal(InnerNormalGameManager gameManager, Game game) : base(game)
+    public LogicOptionsNormal(Game game) : base(game)
     {
     }
 }
index 4e32da876e3b05becabcc98f8d9eb91e9e8829e6..855f7570b1804982e5a3f7566480daf87f580b99 100644 (file)
@@ -2,16 +2,4 @@
 
 internal class LogicRoleSelectionNormal : LogicRoleSelection
 {
-    public LogicRoleSelectionNormal(InnerNormalGameManager gameManager)
-    {
-    }
-
-    public override bool Serialize(IMessageWriter writer, bool initialState)
-    {
-        return false;
-    }
-
-    public override void Deserialize(IMessageReader reader, bool initialState)
-    {
-    }
 }
index a16b5fac9390f3a40d1efc292f1f433e58450f2c..2d159a70ec70932869fe8b07eaa9ad01232fd7fd 100644 (file)
@@ -2,16 +2,4 @@
 
 internal class LogicUsablesBasic : LogicUsables
 {
-    public LogicUsablesBasic(InnerNormalGameManager gameManager)
-    {
-    }
-
-    public override bool Serialize(IMessageWriter writer, bool initialState)
-    {
-        return false;
-    }
-
-    public override void Deserialize(IMessageReader reader, bool initialState)
-    {
-    }
 }
index ad6c793219ba44b6517a0f811fc0d8677773647a..b8a081ec00d6370a73733e8ddf6747eeb0cb4e5a 100644 (file)
@@ -2,13 +2,11 @@
 using System.Threading.Tasks;
 using Impostor.Api;
 using Impostor.Api.Games;
-using Impostor.Api.Innersloth.GameOptions;
 using Impostor.Api.Net;
 using Impostor.Api.Net.Inner;
 using Impostor.Api.Net.Messages;
 using Impostor.Hazel;
 using Impostor.Server.Net.Inner;
-using Impostor.Server.Net.Inner.Objects.GameManager;
 
 namespace Impostor.Server.Net.State
 {
@@ -30,14 +28,13 @@ namespace Impostor.Server.Net.State
                 throw new ImpostorException("Attempted to change settings when the host was not spawned.");
             }
 
-            var gameManager = FindObjectByType<InnerGameManager>();
-            if (gameManager == null)
+            if (GameNet.GameManager == null)
             {
                 throw new ImpostorException("Attempted to change options when the game manager was not spawned.");
             }
 
-            var gameOptionsTag = gameManager.GetGameLogicTag(gameManager.LogicOptions);
-            if (gameOptionsTag == null)
+            var gameOptionsTag = GameNet.GameManager.GetGameLogicTag(GameNet.GameManager.LogicOptions);
+            if (gameOptionsTag == -1)
             {
                 throw new ImpostorException("Attempted to change options when the LogicOptions was not spawned.");
             }
@@ -52,10 +49,10 @@ namespace Impostor.Server.Net.State
             Code.Serialize(writer);
 
             writer.StartMessage(GameDataTag.DataFlag);
-            writer.WritePacked(gameManager.NetId);
+            writer.WritePacked(GameNet.GameManager.NetId);
 
             writer.StartMessage((byte)gameOptionsTag);
-            GameOptionsFactory.Serialize(writer, Options);
+            GameNet.GameManager.LogicOptions.Serialize(writer, false);
 
             writer.EndMessage();
             writer.EndMessage();
index e0a37129c1c4c46c7e90a10aa144428d176fb865..02a743894e6e73e53db0d8067ef63faefb018dd7 100644 (file)
@@ -60,20 +60,6 @@ namespace Impostor.Server.Net.State
             return default;
         }
 
-        public T? FindObjectByType<T>()
-            where T : IInnerNetObject
-        {
-            foreach (var netObject in _allObjects)
-            {
-                if (netObject is T result)
-                {
-                    return result;
-                }
-            }
-
-            return default;
-        }
-
         public async ValueTask<bool> HandleGameDataAsync(IMessageReader parent, ClientPlayer sender, bool toPlayer)
         {
             // Find target player.
@@ -304,6 +290,12 @@ namespace Impostor.Server.Net.State
         {
             switch (netObj)
             {
+                case InnerGameManager innerGameManager:
+                {
+                    GameNet.GameManager = innerGameManager;
+                    break;
+                }
+
                 case InnerLobbyBehaviour lobby:
                 {
                     GameNet.LobbyBehaviour = lobby;
index 3af856ce4637cecd24f80704bdb0da4e217522ff..68d4c2617c540ed9fe1568a55ce2711de6b2d842 100644 (file)
@@ -1,5 +1,6 @@
 using Impostor.Api.Net.Inner;
 using Impostor.Api.Net.Inner.Objects;
+using Impostor.Api.Net.Inner.Objects.GameManager;
 using Impostor.Api.Net.Inner.Objects.ShipStatus;
 
 namespace Impostor.Server.Net.State
@@ -7,6 +8,8 @@ namespace Impostor.Server.Net.State
     /// <inheritdoc />
     internal partial class GameNet : IGameNet
     {
+        IInnerGameManager? IGameNet.GameManager => GameManager;
+
         IInnerLobbyBehaviour? IGameNet.LobbyBehaviour => LobbyBehaviour;
 
         IInnerGameData? IGameNet.GameData => GameData;
index bb7a8e253414a3b06b2fd7202aa8b938c48c5959..66f69f0fffe1aea528fe97a4592189257488c60a 100644 (file)
@@ -1,11 +1,14 @@
 using Impostor.Server.Net.Inner.Objects;
 using Impostor.Server.Net.Inner.Objects.Components;
+using Impostor.Server.Net.Inner.Objects.GameManager;
 using Impostor.Server.Net.Inner.Objects.ShipStatus;
 
 namespace Impostor.Server.Net.State
 {
     internal partial class GameNet
     {
+        public InnerGameManager? GameManager { get; internal set; }
+
         public InnerLobbyBehaviour? LobbyBehaviour { get; internal set; }
 
         public InnerGameData? GameData { get; internal set; }