diff --git a/Shared/Behaviours/BallBehaviour.cs b/Shared/Behaviours/BallBehaviour.cs index 969ed16..623f80c 100644 --- a/Shared/Behaviours/BallBehaviour.cs +++ b/Shared/Behaviours/BallBehaviour.cs @@ -68,7 +68,12 @@ public class BallBehaviour : Behaviour2D, IFirstFrameUpdate, IPhysicsUpdate, INe void IPacketListenerClient.OnClientPacketArrived(IConnection sender, BallResetPacket packet) => ResetBall(); void IPacketListenerClient.OnClientPacketArrived(IConnection sender, BallUpdatePacket packet) { - networkTween = Transform.TweenPositionAdditive(tweenManager, .25f, Transform.Position.FromTo(packet.Position)); + Vector2D localToServerPosition = Transform.Position.FromTo(packet.Position); + if (localToServerPosition.MagnitudeSquared < 4f) + networkTween = Transform.TweenPositionAdditive(tweenManager, .25f, localToServerPosition); + else + Transform.Position = packet.Position; + RigidBody.Velocity = packet.Velocity; physicsEngine2D.StepIndividual(RigidBody, sender.Ping); } diff --git a/Shared/Behaviours/PaddleBehaviour.cs b/Shared/Behaviours/PaddleBehaviour.cs index 26df23b..eb47a8f 100644 --- a/Shared/Behaviours/PaddleBehaviour.cs +++ b/Shared/Behaviours/PaddleBehaviour.cs @@ -6,6 +6,7 @@ using Syntriax.Engine.Core; using Syntriax.Engine.Network; using Syntriax.Engine.Physics2D; using Syntriax.Engine.Systems.Input; +using Syntriax.Engine.Systems.Tween; namespace Pong.Behaviours; @@ -28,6 +29,9 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp private IRigidBody2D rigidBody = null!; private IPhysicsEngine2D physicsEngine2D = null!; + private ITween? networkTween = null; + private ITweenManager tweenManager = null!; + public void PhysicsIterate(float delta) { if (isUpPressed) @@ -48,6 +52,7 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp networkClient = Universe.FindBehaviour(); networkServer = Universe.FindBehaviour(); rigidBody = BehaviourController.GetRequiredBehaviour(); + tweenManager = Universe.FindRequiredBehaviour(); inputs?.RegisterOnPress(Up, OnUpPressed); inputs?.RegisterOnRelease(Up, OnUpReleased); @@ -83,7 +88,12 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp { isUpPressed = packet.IsUpPressed; isDownPressed = packet.IsDownPressed; - Transform.Position = packet.Position; + + Vector2D localToServerPosition = Transform.Position.FromTo(packet.Position); + if (localToServerPosition.MagnitudeSquared < 1f) + networkTween = Transform.TweenPositionAdditive(tweenManager, .25f, localToServerPosition); + else + Transform.Position = packet.Position; physicsEngine2D.StepIndividual(rigidBody, sender.Ping); }