diff --git a/Engine b/Engine index c7f63dc..fbdea47 160000 --- a/Engine +++ b/Engine @@ -1 +1 @@ -Subproject commit c7f63dc63870015ce136100289f1ace246870c90 +Subproject commit fbdea47dc7768aea65fe6826020cc6dd79a0b711 diff --git a/Shared/Behaviours/PaddleBehaviour.cs b/Shared/Behaviours/PaddleBehaviour.cs index 3ed13f3..ab37dd3 100644 --- a/Shared/Behaviours/PaddleBehaviour.cs +++ b/Shared/Behaviours/PaddleBehaviour.cs @@ -9,7 +9,8 @@ using Syntriax.Engine.Systems.Input; namespace Pong.Behaviours; -public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Speed) : Behaviour2D, IFirstFrameUpdate, IPostPhysicsUpdate, +public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Speed) : Behaviour2D, + IFirstFrameUpdate, IPhysicsIteration, IPostPhysicsUpdate, IPacketListenerServer, IPacketListenerClient { private Keys Up { get; } = Up; @@ -27,6 +28,14 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp private IRigidBody2D rigidBody = null!; private IPhysicsEngine2D physicsEngine2D = null!; + public void PhysicsIterate(float delta) + { + if (isUpPressed) + rigidBody.Transform.Position += Vector2D.Up * Speed * delta; + else if (isDownPressed) + rigidBody.Transform.Position -= Vector2D.Up * Speed * delta; + } + public void PostPhysicsUpdate(float delta) { Transform.Position = new Vector2D(Transform.Position.X, MathF.Max(MathF.Min(Transform.Position.Y, High), Low)); @@ -56,26 +65,15 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp inputs.UnregisterOnRelease(Down, OnDownReleased); } - private void OnUpPressed(IButtonInputs sender, IButtonInputs.ButtonCallbackArguments args) { isUpPressed = true; UpdateVelocity(); networkClient?.SendToServer(new PaddleKeyStatePacket(this)); } - private void OnUpReleased(IButtonInputs sender, IButtonInputs.ButtonCallbackArguments args) { isUpPressed = false; UpdateVelocity(); networkClient?.SendToServer(new PaddleKeyStatePacket(this)); } - private void OnDownPressed(IButtonInputs sender, IButtonInputs.ButtonCallbackArguments args) { isDownPressed = true; UpdateVelocity(); networkClient?.SendToServer(new PaddleKeyStatePacket(this)); } - private void OnDownReleased(IButtonInputs sender, IButtonInputs.ButtonCallbackArguments args) { isDownPressed = false; UpdateVelocity(); networkClient?.SendToServer(new PaddleKeyStatePacket(this)); } - - private void UpdateVelocity() - { - if (isUpPressed) - rigidBody.Velocity = Vector2D.Up * Speed; - else if (isDownPressed) - rigidBody.Velocity = -Vector2D.Up * Speed; - else - rigidBody.Velocity = Vector2D.Zero; - } + private void OnUpPressed(IButtonInputs sender, IButtonInputs.ButtonCallbackArguments args) { isUpPressed = true; networkClient?.SendToServer(new PaddleKeyStatePacket(this)); } + private void OnUpReleased(IButtonInputs sender, IButtonInputs.ButtonCallbackArguments args) { isUpPressed = false; networkClient?.SendToServer(new PaddleKeyStatePacket(this)); } + private void OnDownPressed(IButtonInputs sender, IButtonInputs.ButtonCallbackArguments args) { isDownPressed = true; networkClient?.SendToServer(new PaddleKeyStatePacket(this)); } + private void OnDownReleased(IButtonInputs sender, IButtonInputs.ButtonCallbackArguments args) { isDownPressed = false; networkClient?.SendToServer(new PaddleKeyStatePacket(this)); } public void OnServerPacketArrived(string sender, PaddleKeyStatePacket packet) { isUpPressed = packet.IsUpPressed; isDownPressed = packet.IsDownPressed; - UpdateVelocity(); networkServer?.SendToClient("*", new PaddleKeyStatePacket(this)); } @@ -86,8 +84,6 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp isDownPressed = packet.IsDownPressed; Transform.Position = packet.Position; - UpdateVelocity(); - physicsEngine2D.StepIndividual(rigidBody, new DateTime(DateTime.UtcNow.Ticks - packet.Timestamp).Second); } diff --git a/Shared/GamePong.cs b/Shared/GamePong.cs index ef7447b..fe3103d 100644 --- a/Shared/GamePong.cs +++ b/Shared/GamePong.cs @@ -77,7 +77,7 @@ public class GamePong : MonoGameWindow IUniverseObject leftPaddle = UniverseObjectFactory.Instantiate().SetUniverseObject("Left Paddle"); leftPaddle.BehaviourController.AddBehaviour().SetTransform(position: new Vector2D(-468f, 0f), scale: new Vector2D(15f, 60f)) .BehaviourController.AddBehaviour(Shape2D.Square) - .BehaviourController.AddBehaviour(); + .BehaviourController.AddBehaviour().IsStatic = true; PaddleBehaviour leftPaddleBehaviour = BehaviourFactory.Instantiate(Keys.W, Keys.S, 228f, -228f, 400f); leftPaddleBehaviour.Id = "lp"; leftPaddle.BehaviourController.AddBehaviour(leftPaddleBehaviour); @@ -86,7 +86,7 @@ public class GamePong : MonoGameWindow IUniverseObject rightPaddle = UniverseObjectFactory.Instantiate().SetUniverseObject("Right Paddle"); rightPaddle.BehaviourController.AddBehaviour().SetTransform(position: new Vector2D(468f, 0f), scale: new Vector2D(15f, 60f)) .BehaviourController.AddBehaviour(Shape2D.Square) - .BehaviourController.AddBehaviour(); + .BehaviourController.AddBehaviour().IsStatic = true; PaddleBehaviour rightPaddleBehaviour = BehaviourFactory.Instantiate(Keys.Up, Keys.Down, 228f, -228f, 400f); rightPaddleBehaviour.Id = "rp"; rightPaddle.BehaviourController.AddBehaviour(rightPaddleBehaviour);