From b0901507f77c295393abc676f68b9258d9139e41 Mon Sep 17 00:00:00 2001 From: miniduikboot Date: Wed, 25 Oct 2023 21:28:03 +0200 Subject: [PATCH] Rework CustomNetworkTransform Innersloth has changed CNT from position/velocity to a queue of positions. As a result, drop the velocity as well. We're currently not tracking the current position of the player, so we're just storing the last one --- .../IInnerCustomNetworkTransform.cs | 5 ---- .../Components/InnerCustomNetworkTransform.cs | 29 ++++++++++--------- src/Impostor.Server/Net/State/Game.cs | 2 +- 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/Impostor.Api/Net/Inner/Objects/Components/IInnerCustomNetworkTransform.cs b/src/Impostor.Api/Net/Inner/Objects/Components/IInnerCustomNetworkTransform.cs index 5ad4763..d8e802c 100644 --- a/src/Impostor.Api/Net/Inner/Objects/Components/IInnerCustomNetworkTransform.cs +++ b/src/Impostor.Api/Net/Inner/Objects/Components/IInnerCustomNetworkTransform.cs @@ -10,11 +10,6 @@ namespace Impostor.Api.Net.Inner.Objects.Components /// Vector2 Position { get; } - /// - /// Gets current object's velocity. - /// - Vector2 Velocity { get; } - /// /// Snaps the current to the given position . /// diff --git a/src/Impostor.Server/Net/Inner/Objects/Components/InnerCustomNetworkTransform.cs b/src/Impostor.Server/Net/Inner/Objects/Components/InnerCustomNetworkTransform.cs index 880d874..6115a5c 100644 --- a/src/Impostor.Server/Net/Inner/Objects/Components/InnerCustomNetworkTransform.cs +++ b/src/Impostor.Server/Net/Inner/Objects/Components/InnerCustomNetworkTransform.cs @@ -1,3 +1,4 @@ +using System; using System.Linq; using System.Numerics; using System.Threading.Tasks; @@ -44,15 +45,13 @@ namespace Impostor.Server.Net.Inner.Objects.Components public Vector2 Position { get; private set; } - public Vector2 Velocity { get; private set; } - public override ValueTask SerializeAsync(IMessageWriter writer, bool initialState) { + throw new NotImplementedException(); if (initialState) { writer.Write(_lastSequenceId); writer.Write(Position); - writer.Write(Velocity); return new ValueTask(true); } @@ -61,7 +60,6 @@ namespace Impostor.Server.Net.Inner.Objects.Components writer.Write(_lastSequenceId); writer.Write(Position); - writer.Write(Velocity); return new ValueTask(true); } @@ -72,7 +70,7 @@ namespace Impostor.Server.Net.Inner.Objects.Components if (initialState) { _lastSequenceId = sequenceId; - await SetPositionAsync(sender, reader.ReadVector2(), reader.ReadVector2()); + await SetPositionAsync(sender, reader.ReadVector2()); } else { @@ -81,13 +79,17 @@ namespace Impostor.Server.Net.Inner.Objects.Components return; } - if (!SidGreaterThan(sequenceId, _lastSequenceId)) - { - return; - } + var positions = reader.ReadPackedInt32(); - _lastSequenceId = sequenceId; - await SetPositionAsync(sender, reader.ReadVector2(), reader.ReadVector2()); + for (var i=0; i < positions; i++) { + var position = reader.ReadVector2(); + var newSid = (ushort)(sequenceId + i); + if (SidGreaterThan(newSid, _lastSequenceId)) + { + _lastSequenceId = newSid; + await SetPositionAsync(sender, position); + } + } } } @@ -158,10 +160,9 @@ namespace Impostor.Server.Net.Inner.Objects.Components return await base.HandleRpcAsync(sender, target, call, reader); } - internal async ValueTask SetPositionAsync(IClientPlayer sender, Vector2 position, Vector2 velocity) + internal async ValueTask SetPositionAsync(IClientPlayer sender, Vector2 position) { Position = position; - Velocity = velocity; var playerMovementEvent = _pool.Get(); playerMovementEvent.Reset(Game, sender, _playerControl); @@ -197,7 +198,7 @@ namespace Impostor.Server.Net.Inner.Objects.Components } _lastSequenceId = minSid; - return SetPositionAsync(sender, position, Velocity); + return SetPositionAsync(sender, position); } } } diff --git a/src/Impostor.Server/Net/State/Game.cs b/src/Impostor.Server/Net/State/Game.cs index a83920c..3bb1363 100644 --- a/src/Impostor.Server/Net/State/Game.cs +++ b/src/Impostor.Server/Net/State/Game.cs @@ -122,7 +122,7 @@ namespace Impostor.Server.Net.State if (GameNet.ShipStatus != null) { - await player.Character!.NetworkTransform.SetPositionAsync(player, GameNet.ShipStatus.GetSpawnLocation(player.Character, PlayerCount, true), Vector2.Zero); + await player.Character!.NetworkTransform.SetPositionAsync(player, GameNet.ShipStatus.GetSpawnLocation(player.Character, PlayerCount, true)); } } -- 2.39.5