feat: added pong score update packets
This commit is contained in:
parent
9c90a804c3
commit
b238235c15
@ -3,23 +3,26 @@ using System;
|
|||||||
using Microsoft.Xna.Framework.Input;
|
using Microsoft.Xna.Framework.Input;
|
||||||
|
|
||||||
using Syntriax.Engine.Core;
|
using Syntriax.Engine.Core;
|
||||||
|
using Syntriax.Engine.Core.Debug;
|
||||||
using Syntriax.Engine.Network;
|
using Syntriax.Engine.Network;
|
||||||
using Syntriax.Engine.Systems.Input;
|
using Syntriax.Engine.Systems.Input;
|
||||||
|
|
||||||
namespace Pong.Behaviours;
|
namespace Pong.Behaviours;
|
||||||
|
|
||||||
public class PongManagerBehaviour : Behaviour, INetworkEntity, IFirstFrameUpdate,
|
public class PongManagerBehaviour : Behaviour, INetworkEntity, IFirstFrameUpdate,
|
||||||
IPacketListenerServer<PongManagerBehaviour.RequestStartPacket>
|
IPacketListenerServer<PongManagerBehaviour.RequestStartPacket>,
|
||||||
|
IPacketListenerClient<PongManagerBehaviour.ScorePacket>
|
||||||
{
|
{
|
||||||
public Action<PongManagerBehaviour>? OnReset { get; set; } = null;
|
public Action<PongManagerBehaviour>? OnReset { get; set; } = null;
|
||||||
public Action<PongManagerBehaviour>? OnFinished { get; set; } = null;
|
public Action<PongManagerBehaviour>? OnFinished { get; set; } = null;
|
||||||
public Action<PongManagerBehaviour>? OnScored { get; set; } = null;
|
public Action<PongManagerBehaviour>? OnScoreUpdated { get; set; } = null;
|
||||||
|
|
||||||
private Random random = new();
|
private Random random = new();
|
||||||
private BallBehaviour ball = null!;
|
private BallBehaviour ball = null!;
|
||||||
|
|
||||||
private INetworkCommunicatorClient? networkClient = null!;
|
private INetworkCommunicatorClient? networkClient = null!;
|
||||||
private INetworkCommunicatorServer? networkServer = null;
|
private INetworkCommunicatorServer? networkServer = null;
|
||||||
|
private ILogger? logger = null;
|
||||||
|
|
||||||
public int ScoreLeft { get; private set; } = 0;
|
public int ScoreLeft { get; private set; } = 0;
|
||||||
public int ScoreRight { get; private set; } = 0;
|
public int ScoreRight { get; private set; } = 0;
|
||||||
@ -38,22 +41,23 @@ public class PongManagerBehaviour : Behaviour, INetworkEntity, IFirstFrameUpdate
|
|||||||
ball = Universe.FindRequiredBehaviour<BallBehaviour>();
|
ball = Universe.FindRequiredBehaviour<BallBehaviour>();
|
||||||
networkClient = Universe.FindBehaviour<INetworkCommunicatorClient>();
|
networkClient = Universe.FindBehaviour<INetworkCommunicatorClient>();
|
||||||
networkServer = Universe.FindBehaviour<INetworkCommunicatorServer>();
|
networkServer = Universe.FindBehaviour<INetworkCommunicatorServer>();
|
||||||
|
logger = Universe.FindBehaviour<ILogger>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ScoreToLeft()
|
public void ScoreToLeft()
|
||||||
{
|
{
|
||||||
ScoreLeft++;
|
ScoreLeft++;
|
||||||
OnScored?.Invoke(this);
|
OnScoreUpdated?.Invoke(this);
|
||||||
|
|
||||||
CheckFinish();
|
PostScoreUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ScoreToRight()
|
public void ScoreToRight()
|
||||||
{
|
{
|
||||||
ScoreRight++;
|
ScoreRight++;
|
||||||
OnScored?.Invoke(this);
|
OnScoreUpdated?.Invoke(this);
|
||||||
|
|
||||||
CheckFinish();
|
PostScoreUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Reset()
|
public void Reset()
|
||||||
@ -66,18 +70,23 @@ public class PongManagerBehaviour : Behaviour, INetworkEntity, IFirstFrameUpdate
|
|||||||
OnReset?.Invoke(this);
|
OnReset?.Invoke(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CheckFinish()
|
private void PostScoreUpdate()
|
||||||
{
|
{
|
||||||
int halfwayScore = (int)(WinScore * .5f);
|
|
||||||
ball.ResetBall();
|
ball.ResetBall();
|
||||||
|
|
||||||
|
if (networkServer is not null)
|
||||||
|
{
|
||||||
|
networkServer.SendToAll(new ScorePacket(this));
|
||||||
|
logger?.Log(this, $"Sending score update packet to all: {ScoreLeft} - {ScoreRight}");
|
||||||
|
}
|
||||||
|
|
||||||
|
int halfwayScore = (int)(WinScore * .5f);
|
||||||
if (ScoreLeft > halfwayScore || ScoreRight > halfwayScore)
|
if (ScoreLeft > halfwayScore || ScoreRight > halfwayScore)
|
||||||
{
|
{
|
||||||
OnFinished?.Invoke(this);
|
OnFinished?.Invoke(this);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ball.ResetBall();
|
|
||||||
ball.LaunchBall(GetBallLaunchDirection());
|
ball.LaunchBall(GetBallLaunchDirection());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,6 +98,15 @@ public class PongManagerBehaviour : Behaviour, INetworkEntity, IFirstFrameUpdate
|
|||||||
return Vector2D.Right.Rotate(isBackwards ? rotation + Syntriax.Engine.Core.Math.Pi : rotation);
|
return Vector2D.Right.Rotate(isBackwards ? rotation + Syntriax.Engine.Core.Math.Pi : rotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void IPacketListenerClient<ScorePacket>.OnClientPacketArrived(IConnection sender, ScorePacket packet)
|
||||||
|
{
|
||||||
|
ScoreLeft = packet.Left;
|
||||||
|
ScoreRight = packet.Right;
|
||||||
|
|
||||||
|
OnScoreUpdated?.Invoke(this);
|
||||||
|
logger?.Log(this, $"Client score update packet arrived: {packet.Left} - {packet.Right}");
|
||||||
|
}
|
||||||
|
|
||||||
void IPacketListenerServer<RequestStartPacket>.OnServerPacketArrived(IConnection sender, RequestStartPacket packet)
|
void IPacketListenerServer<RequestStartPacket>.OnServerPacketArrived(IConnection sender, RequestStartPacket packet)
|
||||||
{
|
{
|
||||||
if (ball.RigidBody.Velocity.MagnitudeSquared > 0.01f)
|
if (ball.RigidBody.Velocity.MagnitudeSquared > 0.01f)
|
||||||
@ -98,4 +116,16 @@ public class PongManagerBehaviour : Behaviour, INetworkEntity, IFirstFrameUpdate
|
|||||||
}
|
}
|
||||||
|
|
||||||
private class RequestStartPacket : INetworkPacket;
|
private class RequestStartPacket : INetworkPacket;
|
||||||
|
private class ScorePacket : INetworkPacket
|
||||||
|
{
|
||||||
|
public int Left { get; set; }
|
||||||
|
public int Right { get; set; }
|
||||||
|
|
||||||
|
public ScorePacket() { }
|
||||||
|
public ScorePacket(PongManagerBehaviour pongManagerBehaviour)
|
||||||
|
{
|
||||||
|
Left = pongManagerBehaviour.ScoreLeft;
|
||||||
|
Right = pongManagerBehaviour.ScoreRight;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@ public class TextScoreBehaviour(bool IsLeft) : TextBehaviour, IFirstFrameUpdate
|
|||||||
|
|
||||||
pongManager = Universe.FindRequiredBehaviour<PongManagerBehaviour>();
|
pongManager = Universe.FindRequiredBehaviour<PongManagerBehaviour>();
|
||||||
|
|
||||||
pongManager.OnScored += UpdateScores;
|
pongManager.OnScoreUpdated += UpdateScores;
|
||||||
pongManager.OnReset += UpdateScores;
|
pongManager.OnReset += UpdateScores;
|
||||||
|
|
||||||
UpdateScores(pongManager);
|
UpdateScores(pongManager);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user