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()
{
BehaviourController.GetRequiredBehaviour<ICollider2D>().OnCollisionDetected.AddListener(OnCollisionDetected);
physicsEngine2D = Universe.GetRequiredUniverseObject<IPhysicsEngine2D>();
tweenManager = Universe.GetRequiredUniverseObject<ITweenManager>();
physicsEngine2D = Universe.FindRequiredBehaviour<IPhysicsEngine2D>();
tweenManager = Universe.FindRequiredBehaviour<ITweenManager>();
RigidBody = BehaviourController.GetRequiredBehaviour<IRigidBody2D>();
networkServer = Universe.Find<INetworkCommunicatorServer>();
networkServer = Universe.FindBehaviour<INetworkCommunicatorServer>();
}
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()
{
physicsEngine2D = Universe.GetRequiredUniverseObject<IPhysicsEngine2D>();
inputs = Universe.FindRequired<IButtonInputs<Keys>>();
networkClient = Universe.Find<INetworkCommunicatorClient>();
networkServer = Universe.Find<INetworkCommunicatorServer>();
physicsEngine2D = Universe.FindRequiredBehaviour<IPhysicsEngine2D>();
inputs = Universe.FindRequiredBehaviour<IButtonInputs<Keys>>();
networkClient = Universe.FindBehaviour<INetworkCommunicatorClient>();
networkServer = Universe.FindBehaviour<INetworkCommunicatorServer>();
rigidBody = BehaviourController.GetRequiredBehaviour<IRigidBody2D>();
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()));
ball = Universe.FindRequiredBehaviour<BallBehaviour>();
networkClient = Universe.Find<INetworkCommunicatorClient>();
networkServer = Universe.Find<INetworkCommunicatorServer>();
networkClient = Universe.FindBehaviour<INetworkCommunicatorClient>();
networkServer = Universe.FindBehaviour<INetworkCommunicatorServer>();
}
public void ScoreToLeft()

View File

@ -12,12 +12,12 @@ public class TextBehaviour : Behaviour2D, IDrawableSprite
public int Size { get; set; } = 16;
public string Text { get; set; } = string.Empty;
public void Draw(SpriteBatch spriteBatch)
public void Draw(ISpriteBatch spriteBatch)
{
if (Font is null)
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() { }

View File

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

View File

@ -15,7 +15,7 @@ public class LiteNetLibClient : LiteNetLibCommunicatorBase, INetworkCommunicator
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");
Manager.Start();
@ -33,17 +33,17 @@ public class LiteNetLibClient : LiteNetLibCommunicatorBase, INetworkCommunicator
return this;
}
protected override void OnEnteringUniverse(IUniverse universe)
protected override void OnEnteredUniverse(IUniverse universe)
{
base.OnEnteringUniverse(universe);
base.OnEnteredUniverse(universe);
cancellationTokenSource = new CancellationTokenSource();
PollEvents(cancellationTokenSource.Token);
}
protected override void OnExitingUniverse(IUniverse universe)
protected override void OnExitedUniverse(IUniverse universe)
{
base.OnExitingUniverse(universe);
base.OnExitedUniverse(universe);
cancellationTokenSource?.Cancel();
}

View File

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

View File

@ -32,7 +32,7 @@ public class LiteNetLibServer : LiteNetLibCommunicatorBase, INetworkCommunicator
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");
Password = password ?? string.Empty;
@ -62,15 +62,15 @@ public class LiteNetLibServer : LiteNetLibCommunicatorBase, INetworkCommunicator
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);
}
protected override void OnExitingUniverse(IUniverse universe)
protected override void OnExitedUniverse(IUniverse universe)
{
base.OnExitingUniverse(universe);
base.OnExitedUniverse(universe);
universe.OnPostUpdate.RemoveListener(PollEvents);
}
}

View File

@ -10,7 +10,7 @@ namespace Syntriax.Engine.Network;
/// <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.
/// </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>>> serverPacketArrivalMethods = [];
@ -231,11 +231,11 @@ public class NetworkManager : UniverseObject, INetworkManager
UnregisterPacketRoutersFor(removedBehaviour, serverPacketRouters, serverPacketArrivalMethods);
}
protected override void OnExitingUniverse(IUniverse universe) => _networkEntityCollector.Unassign();
protected override void OnEnteringUniverse(IUniverse universe)
protected override void OnExitedUniverse(IUniverse universe) => _networkEntityCollector.Unassign();
protected override void OnEnteredUniverse(IUniverse universe)
{
_networkEntityCollector.Assign(universe);
NetworkCommunicator = this.GetRequiredUniverseObjectInParent<INetworkCommunicator>();
NetworkCommunicator = BehaviourController.GetRequiredBehaviourInParent<INetworkCommunicator>();
}
#endregion