refactor: added server project

This commit is contained in:
2025-06-06 23:54:03 +03:00
parent b835fb1582
commit 2294c06bf9
9 changed files with 142 additions and 66 deletions

View File

@@ -22,7 +22,7 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp
private bool isUpPressed = false;
private bool isDownPressed = false;
private IButtonInputs<Keys> inputs = null!;
private IButtonInputs<Keys>? inputs = null;
private INetworkCommunicatorClient? networkClient = null!;
private INetworkCommunicatorServer? networkServer = null;
private IRigidBody2D rigidBody = null!;
@@ -44,25 +44,25 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp
public void FirstActiveFrame()
{
physicsEngine2D = Universe.FindRequiredBehaviour<IPhysicsEngine2D>();
inputs = Universe.FindRequiredBehaviour<IButtonInputs<Keys>>();
inputs = Universe.FindBehaviour<IButtonInputs<Keys>>();
networkClient = Universe.FindBehaviour<INetworkCommunicatorClient>();
networkServer = Universe.FindBehaviour<INetworkCommunicatorServer>();
rigidBody = BehaviourController.GetRequiredBehaviour<IRigidBody2D>();
inputs.RegisterOnPress(Up, OnUpPressed);
inputs.RegisterOnRelease(Up, OnUpReleased);
inputs?.RegisterOnPress(Up, OnUpPressed);
inputs?.RegisterOnRelease(Up, OnUpReleased);
inputs.RegisterOnPress(Down, OnDownPressed);
inputs.RegisterOnRelease(Down, OnDownReleased);
inputs?.RegisterOnPress(Down, OnDownPressed);
inputs?.RegisterOnRelease(Down, OnDownReleased);
}
protected override void OnFinalize()
{
inputs.UnregisterOnPress(Up, OnUpPressed);
inputs.UnregisterOnRelease(Up, OnUpReleased);
inputs?.UnregisterOnPress(Up, OnUpPressed);
inputs?.UnregisterOnRelease(Up, OnUpReleased);
inputs.UnregisterOnPress(Down, OnDownPressed);
inputs.UnregisterOnRelease(Down, OnDownReleased);
inputs?.UnregisterOnPress(Down, OnDownPressed);
inputs?.UnregisterOnRelease(Down, OnDownReleased);
}
private void OnUpPressed(IButtonInputs<Keys> sender, IButtonInputs<Keys>.ButtonCallbackArguments args) { isUpPressed = true; networkClient?.SendToServer(new PaddleKeyStatePacket(this)); }

View File

@@ -32,8 +32,8 @@ public class PongManagerBehaviour : Behaviour, INetworkEntity, IFirstFrameUpdate
public void FirstActiveFrame()
{
IButtonInputs<Keys> buttonInputs = Universe.FindRequired<IButtonInputs<Keys>>();
buttonInputs.RegisterOnRelease(Keys.Space, (_, _1) => networkClient?.SendToServer(new RequestStartPacket()));
IButtonInputs<Keys>? buttonInputs = Universe.FindBehaviour<IButtonInputs<Keys>>();
buttonInputs?.RegisterOnRelease(Keys.Space, (_, _1) => networkClient?.SendToServer(new RequestStartPacket()));
ball = Universe.FindRequiredBehaviour<BallBehaviour>();
networkClient = Universe.FindBehaviour<INetworkCommunicatorClient>();

View File

@@ -1,5 +1,4 @@
using System;
using System.Linq;
using Microsoft.Xna.Framework.Input;
@@ -14,106 +13,109 @@ using Syntriax.Engine.Systems.Tween;
namespace Pong;
public class GamePong : MonoGameWindow
public static class PongUniverse
{
protected override void Initialize()
public static IUniverse GetPongUniverse(bool isServerEnabled, bool isClientEnabled)
{
base.Initialize();
Universe universe = new();
if (Environment.GetCommandLineArgs().FirstOrDefault(x => x.CompareTo("-server") == 0) is not null)
if (isServerEnabled)
{
LiteNetLibServer server = Universe.InstantiateUniverseObject().SetUniverseObject("Server").BehaviourController.AddBehaviour<LiteNetLibServer>();
LiteNetLibServer server = universe.InstantiateUniverseObject().SetUniverseObject("Server").BehaviourController.AddBehaviour<LiteNetLibServer>();
server.BehaviourController.AddBehaviour<NetworkManager>();
server.Start(8888, 2);
Window.Title = $"Server";
}
else
if (isClientEnabled)
{
LiteNetLibClient client = Universe.InstantiateUniverseObject().SetUniverseObject("Client").BehaviourController.AddBehaviour<LiteNetLibClient>();
LiteNetLibClient client = universe.InstantiateUniverseObject().SetUniverseObject("Client").BehaviourController.AddBehaviour<LiteNetLibClient>();
client.BehaviourController.AddBehaviour<NetworkManager>();
client.Connect("localhost", 8888);
Window.Title = $"Client";
DrawManager drawManager = Universe.InstantiateUniverseObject().SetUniverseObject("Draw Manager").BehaviourController.AddBehaviour<DrawManager>();
Universe.InstantiateUniverseObject().SetUniverseObject("Shape Batcher", drawManager.UniverseObject).BehaviourController.AddBehaviour<ShapeBatcher>();
Universe.InstantiateUniverseObject().SetUniverseObject("Sprite Batcher", drawManager.UniverseObject).BehaviourController.AddBehaviour<SpriteBatcher>();
DrawManager drawManager = universe.InstantiateUniverseObject().SetUniverseObject("Draw Manager").BehaviourController.AddBehaviour<DrawManager>();
universe.InstantiateUniverseObject().SetUniverseObject("Shape Batcher", drawManager.UniverseObject).BehaviourController.AddBehaviour<ShapeBatcher>();
universe.InstantiateUniverseObject().SetUniverseObject("Sprite Batcher", drawManager.UniverseObject).BehaviourController.AddBehaviour<SpriteBatcher>();
Universe.InstantiateUniverseObject().SetUniverseObject("Score Left")
////////////////////////////////////////////////////////////////////////////////////
universe.InstantiateUniverseObject().SetUniverseObject("Camera")
.BehaviourController.AddBehaviour<Transform2D>()
.BehaviourController.AddBehaviour<CameraController>()
.BehaviourController.AddBehaviour<MonoGameCamera2DBehaviour>();
////////////////////////////////////////////////////////////////////////////////////
universe.InstantiateUniverseObject().SetUniverseObject("Score Left")
.BehaviourController.AddBehaviour<Transform2D>().SetTransform(position: new Vector2D(-250f, 250f), scale: Vector2D.One * .25f)
.BehaviourController.AddBehaviour<TextScoreBehaviour>(true);
Universe.InstantiateUniverseObject().SetUniverseObject("Score Right")
universe.InstantiateUniverseObject().SetUniverseObject("Score Right")
.BehaviourController.AddBehaviour<Transform2D>().SetTransform(position: new Vector2D(250f, 250f), scale: Vector2D.One * .25f)
.BehaviourController.AddBehaviour<TextScoreBehaviour>(false);
}
Universe.InstantiateUniverseObject().SetUniverseObject("Update Manager").BehaviourController.AddBehaviour<UpdateManager>();
Universe.InstantiateUniverseObject().SetUniverseObject("Coroutine Manager").BehaviourController.AddBehaviour<CoroutineManager>();
Universe.InstantiateUniverseObject().SetUniverseObject("Tween Manager").BehaviourController.AddBehaviour<TweenManager>();
Universe.InstantiateUniverseObject().SetUniverseObject("Physics Engine 2D").BehaviourController.AddBehaviour<PhysicsEngine2D>();
universe.InstantiateUniverseObject().SetUniverseObject("Update Manager").BehaviourController.AddBehaviour<UpdateManager>();
universe.InstantiateUniverseObject().SetUniverseObject("Coroutine Manager").BehaviourController.AddBehaviour<CoroutineManager>();
universe.InstantiateUniverseObject().SetUniverseObject("Tween Manager").BehaviourController.AddBehaviour<TweenManager>();
universe.InstantiateUniverseObject().SetUniverseObject("Physics Engine 2D").BehaviourController.AddBehaviour<PhysicsEngine2D>();
////////////////////////////////////////////////////////////////////////////////////
Universe.InstantiateUniverseObject().SetUniverseObject("Camera")
.BehaviourController.AddBehaviour<Transform2D>()
.BehaviourController.AddBehaviour<CameraController>()
.BehaviourController.AddBehaviour<MonoGameCamera2DBehaviour>();
////////////////////////////////////////////////////////////////////////////////////
PongManagerBehaviour pongManager = Universe.InstantiateUniverseObject().SetUniverseObject("Pong Game Manager")
PongManagerBehaviour pongManager = universe.InstantiateUniverseObject().SetUniverseObject("Pong Game Manager")
.BehaviourController.AddBehaviour<PongManagerBehaviour>(5);
////////////////////////////////////////////////////////////////////////////////////
Universe.InstantiateUniverseObject().SetUniverseObject("Ball")
.BehaviourController.AddBehaviour<Transform2D>().SetTransform(position: new Vector2D(0, 0f), scale: new Vector2D(10f, 10f))
.BehaviourController.AddBehaviour<CircleBehaviour>(new Circle(Vector2D.Zero, 1f))
.BehaviourController.AddBehaviour<BallBehaviour>()
.BehaviourController.AddBehaviour<RigidBody2D>();
universe.InstantiateUniverseObject().SetUniverseObject("Ball")
.BehaviourController.AddBehaviour<Transform2D>().SetTransform(position: new Vector2D(0, 0f), scale: new Vector2D(10f, 10f))
.BehaviourController.AddBehaviour<CircleBehaviour>(new Circle(Vector2D.Zero, 1f))
.BehaviourController.AddBehaviour<BallBehaviour>()
.BehaviourController.AddBehaviour<RigidBody2D>();
////////////////////////////////////////////////////////////////////////////////////
IUniverseObject leftPaddle = UniverseObjectFactory.Instantiate().SetUniverseObject("Left Paddle");
leftPaddle.BehaviourController.AddBehaviour<Transform2D>().SetTransform(position: new Vector2D(-468f, 0f), scale: new Vector2D(15f, 60f))
.BehaviourController.AddBehaviour<ShapeBehaviour>(Shape2D.Square)
.BehaviourController.AddBehaviour<RigidBody2D>().IsStatic = true;
.BehaviourController.AddBehaviour<ShapeBehaviour>(Shape2D.Square)
.BehaviourController.AddBehaviour<RigidBody2D>().IsStatic = true;
PaddleBehaviour leftPaddleBehaviour = BehaviourFactory.Instantiate<PaddleBehaviour>(Keys.W, Keys.S, 228f, -228f, 400f);
leftPaddleBehaviour.Id = "lp";
leftPaddle.BehaviourController.AddBehaviour(leftPaddleBehaviour);
Universe.Register(leftPaddle);
universe.Register(leftPaddle);
IUniverseObject rightPaddle = UniverseObjectFactory.Instantiate().SetUniverseObject("Right Paddle");
rightPaddle.BehaviourController.AddBehaviour<Transform2D>().SetTransform(position: new Vector2D(468f, 0f), scale: new Vector2D(15f, 60f))
.BehaviourController.AddBehaviour<ShapeBehaviour>(Shape2D.Square)
.BehaviourController.AddBehaviour<RigidBody2D>().IsStatic = true;
.BehaviourController.AddBehaviour<ShapeBehaviour>(Shape2D.Square)
.BehaviourController.AddBehaviour<RigidBody2D>().IsStatic = true;
PaddleBehaviour rightPaddleBehaviour = BehaviourFactory.Instantiate<PaddleBehaviour>(Keys.Up, Keys.Down, 228f, -228f, 400f);
rightPaddleBehaviour.Id = "rp";
rightPaddle.BehaviourController.AddBehaviour(rightPaddleBehaviour);
Universe.Register(rightPaddle);
universe.Register(rightPaddle);
////////////////////////////////////////////////////////////////////////////////////
Universe.InstantiateUniverseObject().SetUniverseObject("Wall Top")
universe.InstantiateUniverseObject().SetUniverseObject("Wall Top")
.BehaviourController.AddBehaviour<Transform2D>().SetTransform(position: new Vector2D(0f, 308f), scale: new Vector2D(552f, 20f))
.BehaviourController.AddBehaviour<ShapeBehaviour>(Shape2D.Square)
.BehaviourController.AddBehaviour<RigidBody2D>().IsStatic = true;
Universe.InstantiateUniverseObject().SetUniverseObject("Wall Bottom")
universe.InstantiateUniverseObject().SetUniverseObject("Wall Bottom")
.BehaviourController.AddBehaviour<Transform2D>().SetTransform(position: new Vector2D(0f, -308f), scale: new Vector2D(552f, 20f))
.BehaviourController.AddBehaviour<ShapeBehaviour>(Shape2D.Square)
.BehaviourController.AddBehaviour<RigidBody2D>().IsStatic = true;
Universe.InstantiateUniverseObject().SetUniverseObject("Wall Right")
universe.InstantiateUniverseObject().SetUniverseObject("Wall Right")
.BehaviourController.AddBehaviour<Transform2D>().SetTransform(position: new Vector2D(532f, 0f), scale: new Vector2D(20f, 328f))
.BehaviourController.AddBehaviour<WallScoreBehaviour>((Action)pongManager.ScoreToLeft)
.BehaviourController.AddBehaviour<ShapeBehaviour>(Shape2D.Square)
.BehaviourController.AddBehaviour<RigidBody2D>().IsStatic = true;
Universe.InstantiateUniverseObject().SetUniverseObject("Wall Left")
universe.InstantiateUniverseObject().SetUniverseObject("Wall Left")
.BehaviourController.AddBehaviour<Transform2D>().SetTransform(position: new Vector2D(-532f, 0f), scale: new Vector2D(20f, 328f))
.BehaviourController.AddBehaviour<WallScoreBehaviour>((Action)pongManager.ScoreToRight)
.BehaviourController.AddBehaviour<ShapeBehaviour>(Shape2D.Square)
.BehaviourController.AddBehaviour<RigidBody2D>().IsStatic = true;
return universe;
}
}