wip: Network

This commit is contained in:
2024-02-12 16:35:24 +03:00
parent 6f3e7b4ae5
commit 3c1528d879
11 changed files with 159 additions and 80 deletions

View File

@@ -13,7 +13,7 @@ using Syntriax.Engine.Physics2D.Abstract;
namespace Pong.Behaviours;
public class BallBehaviour : BehaviourOverride, IMonoGameContentLoader
public class BallBehaviour : NetworkBehaviour, IMonoGameContentLoader
{
public Vector2D StartDirection { get; private set; } = Vector2D.Zero;
public float Speed { get; set; } = 500f;
@@ -42,7 +42,7 @@ public class BallBehaviour : BehaviourOverride, IMonoGameContentLoader
rigidBody = foundRigidBody;
communicator = foundCommunicator;
communicator.RegisterEntityListener(this, OnDataReceived);
communicator.Listener.PeerConnectedEvent += PeerConnected;
if (GameObject.GameManager.TryFindBehaviour(out PongManagerBehaviour? pongManager))
{
pongManager.OnReset += ResetBall;
@@ -51,10 +51,11 @@ public class BallBehaviour : BehaviourOverride, IMonoGameContentLoader
}
}
private void OnDataReceived(NetPacketReader reader)
private void PeerConnected(NetPeer peer)
{
rigidBody.Transform.Position = reader.GetVector2D();
rigidBody.Velocity = reader.GetVector2D();
if (!IsServer)
return;
if (communicator.Manager.ConnectedPeersCount == 1)
}
private void DisableBall(PongManagerBehaviour pongManager)
@@ -106,12 +107,18 @@ public class BallBehaviour : BehaviourOverride, IMonoGameContentLoader
if (communicator is not INetworkServer server)
return;
LiteNetLib.Utils.NetDataWriter dataWriter = communicator.GetEntityWriter(this);
LiteNetLib.Utils.NetDataWriter dataWriter = communicator.GetMessageWriter(this);
dataWriter.Put(rigidBody.Transform.Position);
dataWriter.Put(rigidBody.Velocity);
server.Manager.SendToAll(dataWriter, LiteNetLib.DeliveryMethod.ReliableOrdered);
}
protected override void OnMessageReceived(NetPacketReader reader, NetPeer peer)
{
rigidBody.Transform.Position = reader.GetVector2D();
rigidBody.Velocity = reader.GetVector2D();
}
public BallBehaviour() { }
public BallBehaviour(Vector2D startDirection, float speed)
{

View File

@@ -12,7 +12,7 @@ using Syntriax.Engine.Network.Abstract;
namespace Pong.Behaviours;
public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Speed) : BehaviourOverride
public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Speed) : NetworkBehaviour
{
private Keys Up { get; } = Up;
private Keys Down { get; } = Down;
@@ -41,9 +41,12 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp
private void MovePaddle(Vector2D vectorToAdd)
{
if (!LocalAssigned && !IsServer)
return;
GameObject.Transform.Position += vectorToAdd;
NetDataWriter dataWriter = communicator.GetEntityWriter(this);
NetDataWriter dataWriter = communicator.GetMessageWriter(this);
dataWriter.Put(Transform.Position);
communicator.Manager.SendToAll(dataWriter, LiteNetLib.DeliveryMethod.Unreliable);
}
@@ -63,12 +66,6 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp
inputs.RegisterOnRelease(Down, OnDownReleased);
communicator = foundCommunicator;
communicator.RegisterEntityListener(this, OnDataReceived);
}
private void OnDataReceived(NetPacketReader reader)
{
Transform.Position = reader.GetVector2D();
}
protected override void OnFinalize()
@@ -84,4 +81,9 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp
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;
protected override void OnMessageReceived(NetPacketReader reader, NetPeer peer)
{
Transform.Position = reader.GetVector2D();
}
}

View File

@@ -10,7 +10,7 @@ using Syntriax.Engine.Network.Abstract;
namespace Pong.Behaviours;
public class PongManagerBehaviour : BehaviourOverride
public class PongManagerBehaviour : NetworkBehaviour
{
public Action<PongManagerBehaviour>? OnReset { get; set; } = null;
public Action<PongManagerBehaviour>? OnFinished { get; set; } = null;
@@ -41,16 +41,6 @@ public class PongManagerBehaviour : BehaviourOverride
buttonInputs.RegisterOnRelease(Keys.Space, (_, _1) => Reset());
communicator = foundCommunicator;
communicator.RegisterEntityListener(this, OnMessageReceived);
}
private void OnMessageReceived(NetPacketReader reader)
{
ScoreLeft = reader.GetInt();
ScoreRight = reader.GetInt();
OnScoresUpdated?.Invoke(this);
CheckFinish();
}
public void ScoreToLeft()
@@ -97,9 +87,18 @@ public class PongManagerBehaviour : BehaviourOverride
if (communicator is not INetworkServer server)
return;
LiteNetLib.Utils.NetDataWriter dataWriter = communicator.GetEntityWriter(this);
LiteNetLib.Utils.NetDataWriter dataWriter = communicator.GetMessageWriter(this);
dataWriter.Put(ScoreLeft);
dataWriter.Put(ScoreRight);
server.Manager.SendToAll(dataWriter, LiteNetLib.DeliveryMethod.ReliableOrdered);
}
protected override void OnMessageReceived(NetPacketReader reader, NetPeer peer)
{
ScoreLeft = reader.GetInt();
ScoreRight = reader.GetInt();
OnScoresUpdated?.Invoke(this);
CheckFinish();
}
}