+using System;
using System.Linq;
using System.Numerics;
using System.Threading.Tasks;
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);
}
writer.Write(_lastSequenceId);
writer.Write(Position);
- writer.Write(Velocity);
return new ValueTask<bool>(true);
}
if (initialState)
{
_lastSequenceId = sequenceId;
- await SetPositionAsync(sender, reader.ReadVector2(), reader.ReadVector2());
+ await SetPositionAsync(sender, reader.ReadVector2());
}
else
{
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);
+ }
+ }
}
}
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);
}
_lastSequenceId = minSid;
- return SetPositionAsync(sender, position, Velocity);
+ return SetPositionAsync(sender, position);
}
}
}