diff --git a/Shared/Behaviours/PaddleBehaviour.cs b/Shared/Behaviours/PaddleBehaviour.cs index 4b46b05..c930abd 100644 --- a/Shared/Behaviours/PaddleBehaviour.cs +++ b/Shared/Behaviours/PaddleBehaviour.cs @@ -5,6 +5,7 @@ using Microsoft.Xna.Framework.Input; using Syntriax.Engine.Core; using Syntriax.Engine.Network; using Syntriax.Engine.Systems.Input; +using Syntriax.Engine.Systems.Tween; namespace Pong.Behaviours; @@ -20,22 +21,20 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp private bool isUpPressed = false; private bool isDownPressed = false; - private bool isMovingUp = false; - private bool isMovingDown = false; - private IButtonInputs inputs = null!; private INetworkCommunicatorClient networkClient = null!; private INetworkCommunicatorServer? networkServer = null; + private TweenManager tweenManager = null!; protected override void OnUpdate() { - if (isMovingUp && isMovingDown) + if (isUpPressed && isDownPressed) return; - if (isMovingUp) - Transform.Position = Transform.Position + Vector2D.Up * Universe.Time.DeltaTime * Speed; - else if (isMovingDown) - Transform.Position = Transform.Position + -Vector2D.Up * Universe.Time.DeltaTime * Speed; + if (isUpPressed) + Transform.Position += Vector2D.Up * Universe.Time.DeltaTime * Speed; + else if (isDownPressed) + Transform.Position += -Vector2D.Up * Universe.Time.DeltaTime * Speed; Transform.Position = new Vector2D(Transform.Position.X, MathF.Max(MathF.Min(Transform.Position.Y, High), Low)); } @@ -45,6 +44,7 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp inputs = Universe.FindRequiredBehaviour>(); networkClient = Universe.FindRequiredBehaviour(); networkServer = Universe.FindBehaviour(); + tweenManager = Universe.GetRequiredUniverseObject(); inputs.RegisterOnPress(Up, OnUpPressed); inputs.RegisterOnRelease(Up, OnUpReleased); @@ -72,6 +72,7 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp if (packet.EntityId.CompareTo(Id) != 0) return; + packet.Position = Transform.Position; networkServer?.SendToClient("*", packet); } @@ -80,8 +81,12 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp if (packet.EntityId.CompareTo(Id) != 0) return; - isMovingUp = packet.IsUpPressed; - isMovingDown = packet.IsDownPressed; + isUpPressed = packet.IsUpPressed; + isDownPressed = packet.IsDownPressed; + if (!isUpPressed && !isDownPressed) + Transform.Position.TweenVector2D(tweenManager, .05f, packet.Position, x => Transform.Position = x); + else + Transform.Position = packet.Position; } public class PaddleKeyStatePacket : IEntityNetworkPacket @@ -89,8 +94,8 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp public string EntityId { get; set; } = default!; public bool IsUpPressed { get; set; } = default!; public bool IsDownPressed { get; set; } = default!; - - string IEntityNetworkPacket.EntityId => EntityId; + public Vector2D Position { get; set; } = default!; + public long TimeTicker { get; set; } = default!; public PaddleKeyStatePacket() { } public PaddleKeyStatePacket(PaddleBehaviour paddleBehaviour) @@ -98,6 +103,8 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp EntityId = paddleBehaviour.Id; IsUpPressed = paddleBehaviour.isUpPressed; IsDownPressed = paddleBehaviour.isDownPressed; + Position = paddleBehaviour.Transform.Position; + TimeTicker = DateTime.UtcNow.Ticks; } } } diff --git a/Shared/GamePong.cs b/Shared/GamePong.cs index b5a91f8..a306793 100644 --- a/Shared/GamePong.cs +++ b/Shared/GamePong.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using Microsoft.Xna.Framework; @@ -13,6 +13,7 @@ using Syntriax.Engine.Core; using Syntriax.Engine.Core.Factory; using Syntriax.Engine.Network; using Syntriax.Engine.Physics2D; +using Syntriax.Engine.Systems.Tween; namespace Pong; @@ -66,19 +67,10 @@ public class GamePong : Game universe.Register(platformSpecificUniverseObject); - if (Environment.GetCommandLineArgs().FirstOrDefault(x => x.CompareTo("-server") == 0) is not null) - { - LiteNetLibServer server = universe.InstantiateUniverseObject().SetUniverseObject("Server").BehaviourController.AddBehaviour(); - UniverseObjectFactory.Instantiate().SetUniverseObject("NetworkManager", server.BehaviourController.UniverseObject); - server.Start(8888, 2); - Window.Title = $"{Window.Title} - Server"; - } - LiteNetLibClient client = universe.InstantiateUniverseObject().SetUniverseObject("Client").BehaviourController.AddBehaviour(); - UniverseObjectFactory.Instantiate().SetUniverseObject("NetworkManager", client.BehaviourController.UniverseObject); - client.Connect("localhost", 8888); - universe.InstantiateUniverseObject().SetUniverseObject("Update Manager"); universe.InstantiateUniverseObject().SetUniverseObject("Draw Manager"); + universe.InstantiateUniverseObject().SetUniverseObject("Coroutine Manager"); + universe.InstantiateUniverseObject().SetUniverseObject("Tween Manager"); universe.InstantiateUniverseObject().SetUniverseObject("Physics Engine 2D"); //////////////////////////////////////////////////////////////////////////////////// @@ -154,6 +146,17 @@ public class GamePong : Game rightText = universe.InstantiateUniverseObject().SetUniverseObject("Score Right") .BehaviourController.AddBehaviour().SetTransform(position: new Vector2D(250f, 250f), scale: Vector2D.One * .25f) .BehaviourController.AddBehaviour(false, spriteFont); + + if (Environment.GetCommandLineArgs().FirstOrDefault(x => x.CompareTo("-server") == 0) is not null) + { + LiteNetLibServer server = universe.InstantiateUniverseObject().SetUniverseObject("Server").BehaviourController.AddBehaviour(); + UniverseObjectFactory.Instantiate().SetUniverseObject("NetworkManager", server.BehaviourController.UniverseObject); + server.Start(8888, 2); + Window.Title = $"{Window.Title} - Server"; + } + LiteNetLibClient client = universe.InstantiateUniverseObject().SetUniverseObject("Client").BehaviourController.AddBehaviour(); + UniverseObjectFactory.Instantiate().SetUniverseObject("NetworkManager", client.BehaviourController.UniverseObject); + client.Connect("localhost", 8888); } protected override void Update(GameTime gameTime)