fix: ball sync issues caused by network lerp fixed
This commit is contained in:
		@@ -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;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user