]> git.deb.at Git - rhonda/impostor.git/commitdiff
Rework CustomNetworkTransform
authorminiduikboot <mini@duikbo.at>
Wed, 25 Oct 2023 19:28:03 +0000 (21:28 +0200)
committerminiduikboot <mini@duikbo.at>
Wed, 25 Oct 2023 19:28:03 +0000 (21:28 +0200)
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

src/Impostor.Api/Net/Inner/Objects/Components/IInnerCustomNetworkTransform.cs
src/Impostor.Server/Net/Inner/Objects/Components/InnerCustomNetworkTransform.cs
src/Impostor.Server/Net/State/Game.cs

index 5ad4763c775ba8d0a4f402e59d276efb772a1696..d8e802c5678c43808c843a915bdb221ea89b3dec 100644 (file)
@@ -10,11 +10,6 @@ namespace Impostor.Api.Net.Inner.Objects.Components
         /// </summary>
         Vector2 Position { get; }
 
-        /// <summary>
-        ///     Gets current object's velocity.
-        /// </summary>
-        Vector2 Velocity { get; }
-
         /// <summary>
         ///     Snaps the current to the given position <see cref="IInnerPlayerControl" />.
         /// </summary>
index 880d874224c61ab148259f75929f81945a652e2a..6115a5cc13c05e5fcc791e1413a962d1f07acc14 100644 (file)
@@ -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<bool> SerializeAsync(IMessageWriter writer, bool initialState)
         {
+            throw new NotImplementedException();
             if (initialState)
             {
                 writer.Write(_lastSequenceId);
                 writer.Write(Position);
-                writer.Write(Velocity);
                 return new ValueTask<bool>(true);
             }
 
@@ -61,7 +60,6 @@ namespace Impostor.Server.Net.Inner.Objects.Components
 
             writer.Write(_lastSequenceId);
             writer.Write(Position);
-            writer.Write(Velocity);
             return new ValueTask<bool>(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);
         }
     }
 }
index a83920cd4e0593e700a95823891c11c4abf46d35..3bb136314ee7d5e1d48cb02eb8c2b34d4b10c6fb 100644 (file)
@@ -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));
                     }
                 }