fix: ball sync issues caused by network lerp fixed
This commit is contained in:
parent
43875a6069
commit
648be2738f
@ -6,7 +6,8 @@ using Syntriax.Engine.Systems.Tween;
|
||||
namespace Pong.Behaviours;
|
||||
|
||||
public class BallBehaviour : Behaviour2D, IFirstFrameUpdate, IPhysicsUpdate, INetworkEntity,
|
||||
IPacketListenerClient<BallBehaviour.BallUpdatePacket>
|
||||
IPacketListenerClient<BallBehaviour.BallUpdatePacket>,
|
||||
IPacketListenerClient<BallBehaviour.BallResetPacket>
|
||||
{
|
||||
public float Speed { get; set; } = 500f;
|
||||
public float SpeedUpMultiplier { get; set; } = .025f;
|
||||
@ -16,6 +17,7 @@ public class BallBehaviour : Behaviour2D, IFirstFrameUpdate, IPhysicsUpdate, INe
|
||||
private IPhysicsEngine2D physicsEngine2D = null!;
|
||||
private ITweenManager tweenManager = null!;
|
||||
private INetworkCommunicatorServer? networkServer = null;
|
||||
private ITween? networkTween = null;
|
||||
|
||||
public void FirstActiveFrame()
|
||||
{
|
||||
@ -35,8 +37,11 @@ public class BallBehaviour : Behaviour2D, IFirstFrameUpdate, IPhysicsUpdate, INe
|
||||
|
||||
public void ResetBall()
|
||||
{
|
||||
if (networkTween is not null)
|
||||
tweenManager.CancelTween(networkTween);
|
||||
Transform.Position = Vector2D.Zero;
|
||||
RigidBody.Velocity = Vector2D.Zero;
|
||||
networkServer?.SendToClient("*", new BallResetPacket());
|
||||
}
|
||||
|
||||
public void PhysicsUpdate(float delta)
|
||||
@ -60,13 +65,15 @@ public class BallBehaviour : Behaviour2D, IFirstFrameUpdate, IPhysicsUpdate, INe
|
||||
public BallBehaviour() { }
|
||||
public BallBehaviour(float speed) => Speed = speed;
|
||||
|
||||
void IPacketListenerClient<BallResetPacket>.OnClientPacketArrived(BallResetPacket packet) => ResetBall();
|
||||
void IPacketListenerClient<BallUpdatePacket>.OnClientPacketArrived(BallUpdatePacket packet)
|
||||
{
|
||||
Transform.TweenPositionAdditive(tweenManager, .25f, Transform.Position.FromTo(packet.Position));
|
||||
networkTween = Transform.TweenPositionAdditive(tweenManager, .25f, Transform.Position.FromTo(packet.Position));
|
||||
RigidBody.Velocity = packet.Velocity;
|
||||
physicsEngine2D.StepIndividual(RigidBody, new System.DateTime(System.DateTime.UtcNow.Ticks - packet.Timestamp).Second);
|
||||
}
|
||||
|
||||
private class BallResetPacket : INetworkPacket;
|
||||
private class BallUpdatePacket : INetworkPacket
|
||||
{
|
||||
public Vector2D Position { get; set; } = Vector2D.Zero;
|
||||
|
Loading…
x
Reference in New Issue
Block a user