fix: games not working when hosting a game
This commit is contained in:
2
Engine
2
Engine
Submodule Engine updated: fe0173b091...c11aced8d2
@@ -9,7 +9,7 @@ using Engine.Systems.Tween;
|
|||||||
|
|
||||||
namespace Pong.Behaviours;
|
namespace Pong.Behaviours;
|
||||||
|
|
||||||
public class Ball : Behaviour2D, IFirstFrameUpdate, ILoadContent, IPhysicsUpdate, INetworkEntity,
|
public class Ball : CommonNetworkBehaviour, IFirstFrameUpdate, ILoadContent, IPhysicsUpdate, INetworkEntity,
|
||||||
IPacketListenerClient<Ball.BallUpdatePacket>,
|
IPacketListenerClient<Ball.BallUpdatePacket>,
|
||||||
IPacketListenerClient<Ball.BallResetPacket>
|
IPacketListenerClient<Ball.BallResetPacket>
|
||||||
{
|
{
|
||||||
@@ -17,21 +17,23 @@ public class Ball : Behaviour2D, IFirstFrameUpdate, ILoadContent, IPhysicsUpdate
|
|||||||
public float SpeedUpMultiplier { get; set; } = .025f;
|
public float SpeedUpMultiplier { get; set; } = .025f;
|
||||||
|
|
||||||
public IRigidBody2D RigidBody { get; private set; } = null!;
|
public IRigidBody2D RigidBody { get; private set; } = null!;
|
||||||
|
public ITransform2D Transform { get; private set; } = null!;
|
||||||
|
|
||||||
private IPhysicsEngine2D physicsEngine2D = null!;
|
private IPhysicsEngine2D physicsEngine2D = null!;
|
||||||
private ITweenManager tweenManager = null!;
|
private ITweenManager tweenManager = null!;
|
||||||
private INetworkCommunicatorServer? networkServer = null;
|
|
||||||
private ITween? networkTween = null;
|
private ITween? networkTween = null;
|
||||||
|
|
||||||
private SoundEffect? bounceSoundEffect = null;
|
private SoundEffect? bounceSoundEffect = null;
|
||||||
|
|
||||||
public void FirstActiveFrame()
|
public override void FirstActiveFrame()
|
||||||
{
|
{
|
||||||
|
base.FirstActiveFrame();
|
||||||
|
|
||||||
|
Transform = BehaviourController.GetRequiredBehaviour<ITransform2D>();
|
||||||
BehaviourController.GetRequiredBehaviour<ICollider2D>().OnCollisionDetected.AddListener(OnCollisionDetected);
|
BehaviourController.GetRequiredBehaviour<ICollider2D>().OnCollisionDetected.AddListener(OnCollisionDetected);
|
||||||
physicsEngine2D = Universe.FindRequiredBehaviour<IPhysicsEngine2D>();
|
physicsEngine2D = Universe.FindRequiredBehaviour<IPhysicsEngine2D>();
|
||||||
tweenManager = Universe.FindRequiredBehaviour<ITweenManager>();
|
tweenManager = Universe.FindRequiredBehaviour<ITweenManager>();
|
||||||
RigidBody = BehaviourController.GetRequiredBehaviour<IRigidBody2D>();
|
RigidBody = BehaviourController.GetRequiredBehaviour<IRigidBody2D>();
|
||||||
networkServer = Universe.FindBehaviour<INetworkCommunicatorServer>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadContent(ContentManager content)
|
public void LoadContent(ContentManager content)
|
||||||
@@ -43,7 +45,7 @@ public class Ball : Behaviour2D, IFirstFrameUpdate, ILoadContent, IPhysicsUpdate
|
|||||||
{
|
{
|
||||||
ResetBall();
|
ResetBall();
|
||||||
RigidBody.Velocity = launchDirection * Speed;
|
RigidBody.Velocity = launchDirection * Speed;
|
||||||
networkServer?.SendToAll(new BallUpdatePacket(this));
|
server?.SendToAll(new BallUpdatePacket(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ResetBall()
|
public void ResetBall()
|
||||||
@@ -52,7 +54,7 @@ public class Ball : Behaviour2D, IFirstFrameUpdate, ILoadContent, IPhysicsUpdate
|
|||||||
tweenManager.CancelTween(networkTween);
|
tweenManager.CancelTween(networkTween);
|
||||||
Transform.Position = Vector2D.Zero;
|
Transform.Position = Vector2D.Zero;
|
||||||
RigidBody.Velocity = Vector2D.Zero;
|
RigidBody.Velocity = Vector2D.Zero;
|
||||||
networkServer?.SendToAll(new BallResetPacket());
|
server?.SendToAll(new BallResetPacket());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PhysicsUpdate(float delta)
|
public void PhysicsUpdate(float delta)
|
||||||
@@ -72,24 +74,34 @@ public class Ball : Behaviour2D, IFirstFrameUpdate, ILoadContent, IPhysicsUpdate
|
|||||||
RigidBody.Velocity = RigidBody.Velocity.Reflect(information.Normal);
|
RigidBody.Velocity = RigidBody.Velocity.Reflect(information.Normal);
|
||||||
|
|
||||||
if (information.Detected.Transform.BehaviourController.GetBehaviour<ScoreWall>() is null)
|
if (information.Detected.Transform.BehaviourController.GetBehaviour<ScoreWall>() is null)
|
||||||
networkServer?.SendToAll(new BallUpdatePacket(this));
|
server?.SendToAll(new BallUpdatePacket(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Ball() { }
|
public Ball() { }
|
||||||
public Ball(float speed) => Speed = speed;
|
public Ball(float speed) => Speed = speed;
|
||||||
|
|
||||||
void IPacketListenerClient<BallResetPacket>.OnClientPacketArrived(IConnection sender, BallResetPacket packet) => ResetBall();
|
void IPacketListenerClient<BallResetPacket>.OnClientPacketArrived(IConnection sender, BallResetPacket packet)
|
||||||
|
{
|
||||||
|
if (IsServer)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ResetBall();
|
||||||
|
}
|
||||||
|
|
||||||
void IPacketListenerClient<BallUpdatePacket>.OnClientPacketArrived(IConnection sender, BallUpdatePacket packet)
|
void IPacketListenerClient<BallUpdatePacket>.OnClientPacketArrived(IConnection sender, BallUpdatePacket packet)
|
||||||
{
|
{
|
||||||
|
if (RigidBody.Velocity.MagnitudeSquared >= .01f)
|
||||||
|
bounceSoundEffect?.Play();
|
||||||
|
|
||||||
|
if (IsServer)
|
||||||
|
return;
|
||||||
|
|
||||||
Vector2D localToServerPosition = Transform.Position.FromTo(packet.Position);
|
Vector2D localToServerPosition = Transform.Position.FromTo(packet.Position);
|
||||||
if (localToServerPosition.MagnitudeSquared < 4f)
|
if (localToServerPosition.MagnitudeSquared < 4f)
|
||||||
networkTween = Transform.TweenPositionAdditive(tweenManager, .25f, localToServerPosition);
|
networkTween = Transform.TweenPositionAdditive(tweenManager, .25f, localToServerPosition);
|
||||||
else
|
else
|
||||||
Transform.Position = packet.Position;
|
Transform.Position = packet.Position;
|
||||||
|
|
||||||
if (RigidBody.Velocity.MagnitudeSquared >= .01f)
|
|
||||||
bounceSoundEffect?.Play();
|
|
||||||
|
|
||||||
RigidBody.Velocity = packet.Velocity;
|
RigidBody.Velocity = packet.Velocity;
|
||||||
physicsEngine2D.StepIndividual(RigidBody, sender.Ping);
|
physicsEngine2D.StepIndividual(RigidBody, sender.Ping);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ using Engine.Systems.Network;
|
|||||||
|
|
||||||
namespace Pong.Behaviours;
|
namespace Pong.Behaviours;
|
||||||
|
|
||||||
public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadContent,
|
public class PongManager : CommonNetworkBehaviour, INetworkEntity, IFirstFrameUpdate, ILoadContent,
|
||||||
IPacketListenerClient<PongManager.StartPacket>,
|
IPacketListenerClient<PongManager.StartPacket>,
|
||||||
IPacketListenerClient<PongManager.ScorePacket>
|
IPacketListenerClient<PongManager.ScorePacket>
|
||||||
{
|
{
|
||||||
@@ -20,7 +20,6 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadCo
|
|||||||
|
|
||||||
private Random random = new();
|
private Random random = new();
|
||||||
|
|
||||||
private INetworkCommunicatorServer? networkServer = null;
|
|
||||||
private ILogger? logger = null;
|
private ILogger? logger = null;
|
||||||
private SoundEffectInstance? scoreSoundEffect = null;
|
private SoundEffectInstance? scoreSoundEffect = null;
|
||||||
private SoundEffectInstance? gameEndSoundEffect = null;
|
private SoundEffectInstance? gameEndSoundEffect = null;
|
||||||
@@ -36,10 +35,11 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadCo
|
|||||||
public PongManager() => WinScore = 5;
|
public PongManager() => WinScore = 5;
|
||||||
public PongManager(int winScore) => WinScore = winScore;
|
public PongManager(int winScore) => WinScore = winScore;
|
||||||
|
|
||||||
public void FirstActiveFrame()
|
public override void FirstActiveFrame()
|
||||||
{
|
{
|
||||||
|
base.FirstActiveFrame();
|
||||||
|
|
||||||
Ball = Universe.FindRequiredBehaviour<Ball>();
|
Ball = Universe.FindRequiredBehaviour<Ball>();
|
||||||
networkServer = Universe.FindBehaviour<INetworkCommunicatorServer>();
|
|
||||||
logger = Universe.FindBehaviour<ILogger>();
|
logger = Universe.FindBehaviour<ILogger>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,7 +63,7 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadCo
|
|||||||
|
|
||||||
public bool Start()
|
public bool Start()
|
||||||
{
|
{
|
||||||
if (networkServer is null)
|
if (!IsServer)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (Ball.RigidBody.Velocity.MagnitudeSquared > 0.01f)
|
if (Ball.RigidBody.Velocity.MagnitudeSquared > 0.01f)
|
||||||
@@ -72,7 +72,7 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadCo
|
|||||||
Reset();
|
Reset();
|
||||||
IsGameInProgress = true;
|
IsGameInProgress = true;
|
||||||
PostScoreUpdate();
|
PostScoreUpdate();
|
||||||
networkServer.SendToAll(new StartPacket());
|
Server.SendToAll(new StartPacket());
|
||||||
logger?.Log(this, $"Game started");
|
logger?.Log(this, $"Game started");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -92,9 +92,9 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadCo
|
|||||||
OnScoreUpdated?.Invoke(this);
|
OnScoreUpdated?.Invoke(this);
|
||||||
Ball.ResetBall();
|
Ball.ResetBall();
|
||||||
|
|
||||||
if (networkServer is not null)
|
if (IsServer)
|
||||||
{
|
{
|
||||||
networkServer.SendToAll(new ScorePacket(this));
|
Server.SendToAll(new ScorePacket(this));
|
||||||
logger?.Log(this, $"Sending score update packet to all: {ScoreLeft} - {ScoreRight}");
|
logger?.Log(this, $"Sending score update packet to all: {ScoreLeft} - {ScoreRight}");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -121,6 +121,9 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadCo
|
|||||||
|
|
||||||
void IPacketListenerClient<ScorePacket>.OnClientPacketArrived(IConnection sender, ScorePacket packet)
|
void IPacketListenerClient<ScorePacket>.OnClientPacketArrived(IConnection sender, ScorePacket packet)
|
||||||
{
|
{
|
||||||
|
if (IsServer)
|
||||||
|
return;
|
||||||
|
|
||||||
ScoreLeft = packet.Left;
|
ScoreLeft = packet.Left;
|
||||||
ScoreRight = packet.Right;
|
ScoreRight = packet.Right;
|
||||||
|
|
||||||
@@ -134,6 +137,9 @@ public class PongManager : Behaviour, INetworkEntity, IFirstFrameUpdate, ILoadCo
|
|||||||
|
|
||||||
void IPacketListenerClient<StartPacket>.OnClientPacketArrived(IConnection sender, StartPacket packet)
|
void IPacketListenerClient<StartPacket>.OnClientPacketArrived(IConnection sender, StartPacket packet)
|
||||||
{
|
{
|
||||||
|
if (IsServer)
|
||||||
|
return;
|
||||||
|
|
||||||
IsGameInProgress = true;
|
IsGameInProgress = true;
|
||||||
logger?.Log(this, $"Game started");
|
logger?.Log(this, $"Game started");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user