feat: client & server packet listener interfaces added

This commit is contained in:
2025-05-19 22:24:06 +03:00
parent 214c37e63f
commit 57868ce178
9 changed files with 199 additions and 31 deletions

View File

@@ -8,7 +8,8 @@ using Syntriax.Engine.Systems.Input;
namespace Pong.Behaviours;
public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Speed) : Behaviour2D, INetworkEntity
public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Speed) : Behaviour2D,
IPacketListenerServer<PaddleBehaviour.EntityPaddlePositionPacket>, IPacketListenerClient<PaddleBehaviour.EntityPaddlePositionPacket>
{
private Keys Up { get; } = Up;
private Keys Down { get; } = Down;
@@ -42,10 +43,8 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp
protected override void OnFirstActiveFrame()
{
inputs = Universe.FindRequiredBehaviour<IButtonInputs<Keys>>();
networkClient = Universe.GetRequiredUniverseObject<INetworkCommunicatorClient>();
networkServer = Universe.GetUniverseObject<INetworkCommunicatorServer>();
networkClient.SubscribeToPackets<EntityPaddlePositionPacket>(ReceiveDataClient);
networkServer?.SubscribeToPackets<EntityPaddlePositionPacket>(ReceiveDataServer);
networkClient = Universe.FindRequiredBehaviour<INetworkCommunicatorClient>();
networkServer = Universe.FindBehaviour<INetworkCommunicatorServer>();
inputs.RegisterOnPress(Up, OnUpPressed);
inputs.RegisterOnRelease(Up, OnUpReleased);
@@ -68,9 +67,20 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp
private void OnDownPressed(IButtonInputs<Keys> inputs, Keys keys) { isDownPressed = true; networkClient.SendToServer(new EntityPaddlePositionPacket(this)); }
private void OnDownReleased(IButtonInputs<Keys> inputs, Keys keys) { isDownPressed = false; networkClient.SendToServer(new EntityPaddlePositionPacket(this)); }
public void ReceiveDataClient<T>(T data, string _)
public void OnServerPacketArrived(EntityPaddlePositionPacket packet, string from)
{
if (data is not EntityPaddlePositionPacket position)
if (packet is not EntityPaddlePositionPacket position)
return;
if (position.EntityId.CompareTo(Id) != 0)
return;
networkServer?.SendToClient("*", position);
}
public void OnClientPacketArrived(EntityPaddlePositionPacket packet)
{
if (packet is not EntityPaddlePositionPacket position)
return;
if (position.EntityId.CompareTo(Id) != 0)
@@ -80,17 +90,6 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp
isMovingDown = position.IsDownPressed;
}
public void ReceiveDataServer<T>(T data, string fromClientId)
{
if (data is not EntityPaddlePositionPacket position)
return;
if (position.EntityId.CompareTo(Id) != 0)
return;
networkServer?.SendToClient("*", position);
}
public class EntityPaddlePositionPacket : IEntityNetworkPacket
{
public string EntityId { get; set; } = default!;