chore: paddle and ball tweens updated for smoother gameplay

This commit is contained in:
Syntriax 2025-06-29 22:50:09 +03:00
parent ceea23c5ae
commit 5d8f5d39be
2 changed files with 17 additions and 2 deletions

View File

@ -68,7 +68,12 @@ public class BallBehaviour : Behaviour2D, IFirstFrameUpdate, IPhysicsUpdate, INe
void IPacketListenerClient<BallResetPacket>.OnClientPacketArrived(IConnection sender, BallResetPacket packet) => ResetBall(); void IPacketListenerClient<BallResetPacket>.OnClientPacketArrived(IConnection sender, BallResetPacket packet) => ResetBall();
void IPacketListenerClient<BallUpdatePacket>.OnClientPacketArrived(IConnection sender, BallUpdatePacket packet) void IPacketListenerClient<BallUpdatePacket>.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; RigidBody.Velocity = packet.Velocity;
physicsEngine2D.StepIndividual(RigidBody, sender.Ping); physicsEngine2D.StepIndividual(RigidBody, sender.Ping);
} }

View File

@ -6,6 +6,7 @@ using Syntriax.Engine.Core;
using Syntriax.Engine.Network; using Syntriax.Engine.Network;
using Syntriax.Engine.Physics2D; using Syntriax.Engine.Physics2D;
using Syntriax.Engine.Systems.Input; using Syntriax.Engine.Systems.Input;
using Syntriax.Engine.Systems.Tween;
namespace Pong.Behaviours; 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 IRigidBody2D rigidBody = null!;
private IPhysicsEngine2D physicsEngine2D = null!; private IPhysicsEngine2D physicsEngine2D = null!;
private ITween? networkTween = null;
private ITweenManager tweenManager = null!;
public void PhysicsIterate(float delta) public void PhysicsIterate(float delta)
{ {
if (isUpPressed) if (isUpPressed)
@ -48,6 +52,7 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp
networkClient = Universe.FindBehaviour<INetworkCommunicatorClient>(); networkClient = Universe.FindBehaviour<INetworkCommunicatorClient>();
networkServer = Universe.FindBehaviour<INetworkCommunicatorServer>(); networkServer = Universe.FindBehaviour<INetworkCommunicatorServer>();
rigidBody = BehaviourController.GetRequiredBehaviour<IRigidBody2D>(); rigidBody = BehaviourController.GetRequiredBehaviour<IRigidBody2D>();
tweenManager = Universe.FindRequiredBehaviour<ITweenManager>();
inputs?.RegisterOnPress(Up, OnUpPressed); inputs?.RegisterOnPress(Up, OnUpPressed);
inputs?.RegisterOnRelease(Up, OnUpReleased); inputs?.RegisterOnRelease(Up, OnUpReleased);
@ -83,6 +88,11 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp
{ {
isUpPressed = packet.IsUpPressed; isUpPressed = packet.IsUpPressed;
isDownPressed = packet.IsDownPressed; isDownPressed = packet.IsDownPressed;
Vector2D localToServerPosition = Transform.Position.FromTo(packet.Position);
if (localToServerPosition.MagnitudeSquared < 1f)
networkTween = Transform.TweenPositionAdditive(tweenManager, .25f, localToServerPosition);
else
Transform.Position = packet.Position; Transform.Position = packet.Position;
physicsEngine2D.StepIndividual(rigidBody, sender.Ping); physicsEngine2D.StepIndividual(rigidBody, sender.Ping);