/// </summary>
/// <param name="position">The target position.</param>
/// <returns>Task that must be awaited.</returns>
- ValueTask SnapTo(Vector2 position);
+ ValueTask SnapToAsync(Vector2 position);
}
}
using System;
+using System.Numerics;
using System.Threading.Tasks;
using Impostor.Api.Events;
using Impostor.Api.Events.Player;
await e.PlayerControl.SetPetAsync(PetType.Ufo);
}
+ if (e.Message == "snap")
+ {
+ await e.PlayerControl.NetworkTransform.SnapToAsync(new Vector2(1, 1));
+ }
+
await e.PlayerControl.SetNameAsync(e.Message);
await e.PlayerControl.SendChatAsync(e.Message);
}
{
internal partial class InnerCustomNetworkTransform : IInnerCustomNetworkTransform
{
- public async ValueTask SnapTo(Vector2 position)
+ public async ValueTask SnapToAsync(Vector2 position)
{
+ var minSid = (ushort)(_lastSequenceId + 5U);
+
+ // Snap in the server.
+ SnapTo(position, minSid);
+
+ // Broadcast to all clients.
var writer = _game.StartRpc(NetId, RpcCalls.SnapTo);
WriteVector2(writer, position);
- writer.Write(_lastSequenceId + 5U);
+ writer.Write(_lastSequenceId);
await _game.FinishRpcAsync(writer);
}
}
private void SnapTo(Vector2 position, ushort minSid)
{
- if (SidGreaterThan(minSid, _lastSequenceId))
+ if (!SidGreaterThan(minSid, _lastSequenceId))
{
return;
}