chore: updated engine with non-universe-object managers

This commit is contained in:
Syntriax 2025-06-04 00:03:26 +03:00
parent 29df4a36e9
commit 4710b8364c
10 changed files with 40 additions and 40 deletions

2
Engine

@ -1 +1 @@
Subproject commit 8d49fb467cda79187a1a5677f7d594af4dbaef6e Subproject commit beecefec1c31751d72ad83a4fcf6c4e65c413af7

View File

@ -20,10 +20,10 @@ public class BallBehaviour : Behaviour2D, IFirstFrameUpdate, IPhysicsUpdate, INe
public void FirstActiveFrame() public void FirstActiveFrame()
{ {
BehaviourController.GetRequiredBehaviour<ICollider2D>().OnCollisionDetected.AddListener(OnCollisionDetected); BehaviourController.GetRequiredBehaviour<ICollider2D>().OnCollisionDetected.AddListener(OnCollisionDetected);
physicsEngine2D = Universe.GetRequiredUniverseObject<IPhysicsEngine2D>(); physicsEngine2D = Universe.FindRequiredBehaviour<IPhysicsEngine2D>();
tweenManager = Universe.GetRequiredUniverseObject<ITweenManager>(); tweenManager = Universe.FindRequiredBehaviour<ITweenManager>();
RigidBody = BehaviourController.GetRequiredBehaviour<IRigidBody2D>(); RigidBody = BehaviourController.GetRequiredBehaviour<IRigidBody2D>();
networkServer = Universe.Find<INetworkCommunicatorServer>(); networkServer = Universe.FindBehaviour<INetworkCommunicatorServer>();
} }
public void LaunchBall(Vector2D launchDirection) public void LaunchBall(Vector2D launchDirection)

View File

@ -34,10 +34,10 @@ public class PaddleBehaviour(Keys Up, Keys Down, float High, float Low, float Sp
public void FirstActiveFrame() public void FirstActiveFrame()
{ {
physicsEngine2D = Universe.GetRequiredUniverseObject<IPhysicsEngine2D>(); physicsEngine2D = Universe.FindRequiredBehaviour<IPhysicsEngine2D>();
inputs = Universe.FindRequired<IButtonInputs<Keys>>(); inputs = Universe.FindRequiredBehaviour<IButtonInputs<Keys>>();
networkClient = Universe.Find<INetworkCommunicatorClient>(); networkClient = Universe.FindBehaviour<INetworkCommunicatorClient>();
networkServer = Universe.Find<INetworkCommunicatorServer>(); networkServer = Universe.FindBehaviour<INetworkCommunicatorServer>();
rigidBody = BehaviourController.GetRequiredBehaviour<IRigidBody2D>(); rigidBody = BehaviourController.GetRequiredBehaviour<IRigidBody2D>();
inputs.RegisterOnPress(Up, OnUpPressed); inputs.RegisterOnPress(Up, OnUpPressed);

View File

@ -36,8 +36,8 @@ public class PongManagerBehaviour : Behaviour, INetworkEntity, IFirstFrameUpdate
buttonInputs.RegisterOnRelease(Keys.Space, (_, _1) => networkClient?.SendToServer(new RequestStartPacket())); buttonInputs.RegisterOnRelease(Keys.Space, (_, _1) => networkClient?.SendToServer(new RequestStartPacket()));
ball = Universe.FindRequiredBehaviour<BallBehaviour>(); ball = Universe.FindRequiredBehaviour<BallBehaviour>();
networkClient = Universe.Find<INetworkCommunicatorClient>(); networkClient = Universe.FindBehaviour<INetworkCommunicatorClient>();
networkServer = Universe.Find<INetworkCommunicatorServer>(); networkServer = Universe.FindBehaviour<INetworkCommunicatorServer>();
} }
public void ScoreToLeft() public void ScoreToLeft()

View File

@ -12,12 +12,12 @@ public class TextBehaviour : Behaviour2D, IDrawableSprite
public int Size { get; set; } = 16; public int Size { get; set; } = 16;
public string Text { get; set; } = string.Empty; public string Text { get; set; } = string.Empty;
public void Draw(SpriteBatch spriteBatch) public void Draw(ISpriteBatch spriteBatch)
{ {
if (Font is null) if (Font is null)
return; return;
spriteBatch.DrawString(Font, Text, Transform.Position.ToDisplayVector2(), Color.White, Transform.Rotation, Vector2.One * .5f, Transform.Scale.Magnitude, SpriteEffects.None, 0f); spriteBatch.DrawString(Font, Text, Transform.Position, Color.White, Transform.Rotation, Vector2D.One * .5f, Transform.Scale.Magnitude, SpriteEffects.None, 0f);
} }
public TextBehaviour() { } public TextBehaviour() { }

View File

@ -36,27 +36,27 @@ public class GamePong : MonoGameWindow
if (Environment.GetCommandLineArgs().FirstOrDefault(x => x.CompareTo("-server") == 0) is not null) if (Environment.GetCommandLineArgs().FirstOrDefault(x => x.CompareTo("-server") == 0) is not null)
{ {
LiteNetLibServer server = universe.InstantiateUniverseObject<LiteNetLibServer>().SetUniverseObject("Server"); LiteNetLibServer server = universe.InstantiateUniverseObject().SetUniverseObject("Server").BehaviourController.AddBehaviour<LiteNetLibServer>();
UniverseObjectFactory.Instantiate<NetworkManager>().SetUniverseObject("NetworkManager", server.BehaviourController.UniverseObject); server.BehaviourController.AddBehaviour<NetworkManager>();
server.Start(8888, 2); server.Start(8888, 2);
Window.Title = $"Server"; Window.Title = $"Server";
} }
else else
{ {
LiteNetLibClient client = universe.InstantiateUniverseObject<LiteNetLibClient>().SetUniverseObject("Client"); LiteNetLibClient client = universe.InstantiateUniverseObject().SetUniverseObject("Client").BehaviourController.AddBehaviour<LiteNetLibClient>();
UniverseObjectFactory.Instantiate<NetworkManager>().SetUniverseObject("NetworkManager", client.BehaviourController.UniverseObject); client.BehaviourController.AddBehaviour<NetworkManager>();
client.Connect("localhost", 8888); client.Connect("localhost", 8888);
Window.Title = $"Client"; Window.Title = $"Client";
DrawManager drawManager = universe.InstantiateUniverseObject<DrawManager>().SetUniverseObject("Draw Manager"); DrawManager drawManager = universe.InstantiateUniverseObject().SetUniverseObject("Draw Manager").BehaviourController.AddBehaviour<DrawManager>();
universe.InstantiateUniverseObject().SetUniverseObject("Shape Batcher", drawManager).BehaviourController.AddBehaviour<ShapeBatcher>(); universe.InstantiateUniverseObject().SetUniverseObject("Shape Batcher", drawManager.UniverseObject).BehaviourController.AddBehaviour<ShapeBatcher>();
universe.InstantiateUniverseObject().SetUniverseObject("Sprite Batcher", drawManager).BehaviourController.AddBehaviour<SpriteBatcher>(); universe.InstantiateUniverseObject().SetUniverseObject("Sprite Batcher", drawManager.UniverseObject).BehaviourController.AddBehaviour<SpriteBatcher>();
} }
universe.InstantiateUniverseObject<UpdateManager>().SetUniverseObject("Update Manager"); universe.InstantiateUniverseObject().SetUniverseObject("Update Manager").BehaviourController.AddBehaviour<UpdateManager>();
universe.InstantiateUniverseObject<CoroutineManager>().SetUniverseObject("Coroutine Manager"); universe.InstantiateUniverseObject().SetUniverseObject("Coroutine Manager").BehaviourController.AddBehaviour<CoroutineManager>();
universe.InstantiateUniverseObject<TweenManager>().SetUniverseObject("Tween Manager"); universe.InstantiateUniverseObject().SetUniverseObject("Tween Manager").BehaviourController.AddBehaviour<TweenManager>();
universe.InstantiateUniverseObject<PhysicsEngine2D>().SetUniverseObject("Physics Engine 2D"); universe.InstantiateUniverseObject().SetUniverseObject("Physics Engine 2D").BehaviourController.AddBehaviour<PhysicsEngine2D>();
//////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////

View File

@ -15,7 +15,7 @@ public class LiteNetLibClient : LiteNetLibCommunicatorBase, INetworkCommunicator
public INetworkCommunicatorClient Connect(string address, int port, string? password = null) public INetworkCommunicatorClient Connect(string address, int port, string? password = null)
{ {
if (!IsInUniverse) if (!UniverseObject.IsInUniverse)
throw new($"{nameof(LiteNetLibClient)} must be in an universe to connect"); throw new($"{nameof(LiteNetLibClient)} must be in an universe to connect");
Manager.Start(); Manager.Start();
@ -33,17 +33,17 @@ public class LiteNetLibClient : LiteNetLibCommunicatorBase, INetworkCommunicator
return this; return this;
} }
protected override void OnEnteringUniverse(IUniverse universe) protected override void OnEnteredUniverse(IUniverse universe)
{ {
base.OnEnteringUniverse(universe); base.OnEnteredUniverse(universe);
cancellationTokenSource = new CancellationTokenSource(); cancellationTokenSource = new CancellationTokenSource();
PollEvents(cancellationTokenSource.Token); PollEvents(cancellationTokenSource.Token);
} }
protected override void OnExitingUniverse(IUniverse universe) protected override void OnExitedUniverse(IUniverse universe)
{ {
base.OnExitingUniverse(universe); base.OnExitedUniverse(universe);
cancellationTokenSource?.Cancel(); cancellationTokenSource?.Cancel();
} }

View File

@ -10,7 +10,7 @@ using Syntriax.Engine.Core;
namespace Syntriax.Engine.Network; namespace Syntriax.Engine.Network;
public abstract class LiteNetLibCommunicatorBase : UniverseObject, INetworkCommunicator public abstract class LiteNetLibCommunicatorBase : Behaviour, INetworkCommunicator
{ {
protected readonly NetPacketProcessor netPacketProcessor = new(); protected readonly NetPacketProcessor netPacketProcessor = new();
@ -25,9 +25,9 @@ public abstract class LiteNetLibCommunicatorBase : UniverseObject, INetworkCommu
return this; return this;
} }
protected override void OnExitingUniverse(IUniverse universe) protected override void OnExitedUniverse(IUniverse universe)
{ {
base.OnExitingUniverse(universe); base.OnExitedUniverse(universe);
Stop(); Stop();
} }

View File

@ -32,7 +32,7 @@ public class LiteNetLibServer : LiteNetLibCommunicatorBase, INetworkCommunicator
public INetworkCommunicatorServer Start(int port, int maxConnectionCount, string? password = null) public INetworkCommunicatorServer Start(int port, int maxConnectionCount, string? password = null)
{ {
if (!IsInUniverse) if (!UniverseObject.IsInUniverse)
throw new($"{nameof(LiteNetLibServer)} must be in an universe to start"); throw new($"{nameof(LiteNetLibServer)} must be in an universe to start");
Password = password ?? string.Empty; Password = password ?? string.Empty;
@ -62,15 +62,15 @@ public class LiteNetLibServer : LiteNetLibCommunicatorBase, INetworkCommunicator
private void PollEvents(IUniverse sender, IUniverse.UpdateArguments args) => Manager.PollEvents(); private void PollEvents(IUniverse sender, IUniverse.UpdateArguments args) => Manager.PollEvents();
protected override void OnEnteringUniverse(IUniverse universe) protected override void OnEnteredUniverse(IUniverse universe)
{ {
base.OnEnteringUniverse(universe); base.OnEnteredUniverse(universe);
universe.OnPostUpdate.AddListener(PollEvents); universe.OnPostUpdate.AddListener(PollEvents);
} }
protected override void OnExitingUniverse(IUniverse universe) protected override void OnExitedUniverse(IUniverse universe)
{ {
base.OnExitingUniverse(universe); base.OnExitedUniverse(universe);
universe.OnPostUpdate.RemoveListener(PollEvents); universe.OnPostUpdate.RemoveListener(PollEvents);
} }
} }

View File

@ -10,7 +10,7 @@ namespace Syntriax.Engine.Network;
/// <summary> /// <summary>
/// Intermediary manager that looks up in it's hierarchy for a <see cref="INetworkCommunicator"/> to route/broadcast it's received packets to their destinations. /// Intermediary manager that looks up in it's hierarchy for a <see cref="INetworkCommunicator"/> to route/broadcast it's received packets to their destinations.
/// </summary> /// </summary>
public class NetworkManager : UniverseObject, INetworkManager public class NetworkManager : Behaviour, INetworkManager
{ {
private readonly Dictionary<Type, Dictionary<Type, List<MethodInfo>>> clientPacketArrivalMethods = []; private readonly Dictionary<Type, Dictionary<Type, List<MethodInfo>>> clientPacketArrivalMethods = [];
private readonly Dictionary<Type, Dictionary<Type, List<MethodInfo>>> serverPacketArrivalMethods = []; private readonly Dictionary<Type, Dictionary<Type, List<MethodInfo>>> serverPacketArrivalMethods = [];
@ -231,11 +231,11 @@ public class NetworkManager : UniverseObject, INetworkManager
UnregisterPacketRoutersFor(removedBehaviour, serverPacketRouters, serverPacketArrivalMethods); UnregisterPacketRoutersFor(removedBehaviour, serverPacketRouters, serverPacketArrivalMethods);
} }
protected override void OnExitingUniverse(IUniverse universe) => _networkEntityCollector.Unassign(); protected override void OnExitedUniverse(IUniverse universe) => _networkEntityCollector.Unassign();
protected override void OnEnteringUniverse(IUniverse universe) protected override void OnEnteredUniverse(IUniverse universe)
{ {
_networkEntityCollector.Assign(universe); _networkEntityCollector.Assign(universe);
NetworkCommunicator = this.GetRequiredUniverseObjectInParent<INetworkCommunicator>(); NetworkCommunicator = BehaviourController.GetRequiredBehaviourInParent<INetworkCommunicator>();
} }
#endregion #endregion