feat: client & server packet listener interfaces added
This commit is contained in:
@@ -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!;
|
||||
|
Reference in New Issue
Block a user