feat: working networked paddles
This commit is contained in:
@@ -19,25 +19,22 @@ 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<Keys> inputs = null!;
|
||||
private INetworkCommunicatorClient networkClient = null!;
|
||||
private INetworkCommunicatorServer? networkServer = null;
|
||||
|
||||
protected override void OnUpdate()
|
||||
{
|
||||
if (isUpPressed && isDownPressed)
|
||||
if (isMovingUp && isMovingDown)
|
||||
return;
|
||||
|
||||
if (isUpPressed)
|
||||
{
|
||||
if (isMovingUp)
|
||||
Transform.Position = Transform.Position + Vector2D.Up * Universe.Time.DeltaTime * Speed;
|
||||
networkClient.SendToServer(new EntityPaddlePositionPacket(this));
|
||||
}
|
||||
else if (isDownPressed)
|
||||
{
|
||||
else if (isMovingDown)
|
||||
Transform.Position = Transform.Position + -Vector2D.Up * Universe.Time.DeltaTime * Speed;
|
||||
networkClient.SendToServer(new EntityPaddlePositionPacket(this));
|
||||
}
|
||||
|
||||
Transform.Position = new Vector2D(Transform.Position.X, MathF.Max(MathF.Min(Transform.Position.Y, High), Low));
|
||||
}
|
||||
@@ -46,9 +43,10 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp
|
||||
{
|
||||
inputs = Universe.FindRequiredBehaviour<IButtonInputs<Keys>>();
|
||||
networkClient = Universe.GetRequiredUniverseObject<INetworkCommunicatorClient>();
|
||||
networkServer = Universe.GetRequiredUniverseObject<INetworkCommunicatorServer>();
|
||||
networkServer = Universe.GetUniverseObject<INetworkCommunicatorServer>();
|
||||
networkClient.SubscribeToPackets<EntityPaddlePositionPacket>(ReceiveDataClient);
|
||||
networkServer.SubscribeToPackets<EntityPaddlePositionPacket>(ReceiveDataServer);
|
||||
networkServer?.SubscribeToPackets<EntityPaddlePositionPacket>(ReceiveDataServer);
|
||||
|
||||
inputs.RegisterOnPress(Up, OnUpPressed);
|
||||
inputs.RegisterOnRelease(Up, OnUpReleased);
|
||||
|
||||
@@ -65,17 +63,21 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp
|
||||
inputs.UnregisterOnRelease(Down, OnDownReleased);
|
||||
}
|
||||
|
||||
private void OnUpPressed(IButtonInputs<Keys> inputs, Keys keys) => isUpPressed = true;
|
||||
private void OnUpReleased(IButtonInputs<Keys> inputs, Keys keys) => isUpPressed = false;
|
||||
private void OnDownPressed(IButtonInputs<Keys> inputs, Keys keys) => isDownPressed = true;
|
||||
private void OnDownReleased(IButtonInputs<Keys> inputs, Keys keys) => isDownPressed = false;
|
||||
private void OnUpPressed(IButtonInputs<Keys> inputs, Keys keys) { isUpPressed = true; networkClient.SendToServer(new EntityPaddlePositionPacket(this)); }
|
||||
private void OnUpReleased(IButtonInputs<Keys> inputs, Keys keys) { isUpPressed = false; networkClient.SendToServer(new EntityPaddlePositionPacket(this)); }
|
||||
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 _)
|
||||
{
|
||||
if (data is not EntityPaddlePositionPacket position)
|
||||
return;
|
||||
|
||||
Transform.Position = position.Position;
|
||||
if (position.EntityId.CompareTo(Id) != 0)
|
||||
return;
|
||||
|
||||
isMovingUp = position.IsUpPressed;
|
||||
isMovingDown = position.IsDownPressed;
|
||||
}
|
||||
|
||||
public void ReceiveDataServer<T>(T data, string fromClientId)
|
||||
@@ -83,22 +85,17 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp
|
||||
if (data is not EntityPaddlePositionPacket position)
|
||||
return;
|
||||
|
||||
Transform.Position = position.Position;
|
||||
networkServer?.SendToClient("*", position);
|
||||
}
|
||||
|
||||
public void ReceiveDataClient<T>(T data)
|
||||
{
|
||||
if (data is not EntityPaddlePositionPacket position)
|
||||
if (position.EntityId.CompareTo(Id) != 0)
|
||||
return;
|
||||
|
||||
Transform.Position = position.Position;
|
||||
networkServer?.SendToClient("*", position);
|
||||
}
|
||||
|
||||
public class EntityPaddlePositionPacket : IEntityNetworkPacket
|
||||
{
|
||||
public string EntityId = default!;
|
||||
public Vector2D Position = default!;
|
||||
public string EntityId { get; set; } = default!;
|
||||
public bool IsUpPressed { get; set; } = default!;
|
||||
public bool IsDownPressed { get; set; } = default!;
|
||||
|
||||
string IEntityNetworkPacket.EntityId => EntityId;
|
||||
|
||||
@@ -106,7 +103,8 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp
|
||||
public EntityPaddlePositionPacket(PaddleBehaviour paddleBehaviour)
|
||||
{
|
||||
EntityId = paddleBehaviour.Id;
|
||||
Position = paddleBehaviour.Transform.Position;
|
||||
IsUpPressed = paddleBehaviour.isUpPressed;
|
||||
IsDownPressed = paddleBehaviour.isDownPressed;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user