diff --git a/Engine b/Engine index beecefe..c7f63dc 160000 --- a/Engine +++ b/Engine @@ -1 +1 @@ -Subproject commit beecefec1c31751d72ad83a4fcf6c4e65c413af7 +Subproject commit c7f63dc63870015ce136100289f1ace246870c90 diff --git a/Platforms/Desktop/Program.cs b/Platforms/Desktop/Program.cs index e5b5425..9f550d8 100644 --- a/Platforms/Desktop/Program.cs +++ b/Platforms/Desktop/Program.cs @@ -1,7 +1,16 @@ -using Syntriax.Engine.Core; +using Microsoft.Xna.Framework.Graphics; + +using Syntriax.Engine.Core; using Syntriax.Engine.Integration.MonoGame; -IUniverseObject universeObject = Syntriax.Engine.Core.Factory.UniverseObjectFactory.Instantiate().SetUniverseObject("Desktop HO"); -universeObject.BehaviourController.AddBehaviour(); -using var game = new Pong.GamePong(universeObject); +using var game = new Pong.GamePong(); + +game.Universe + .InstantiateUniverseObject().SetUniverseObject("Desktop HO") + .BehaviourController.AddBehaviour(); + +game.Graphics.PreferredBackBufferWidth = 1024; +game.Graphics.PreferredBackBufferHeight = 576; +game.Graphics.GraphicsProfile = GraphicsProfile.HiDef; + game.Run(); diff --git a/Shared/Behaviours/TextScoreBehaviour.cs b/Shared/Behaviours/TextScoreBehaviour.cs index 6693780..7e06d5b 100644 --- a/Shared/Behaviours/TextScoreBehaviour.cs +++ b/Shared/Behaviours/TextScoreBehaviour.cs @@ -1,18 +1,22 @@ using Microsoft.Xna.Framework.Graphics; + using Syntriax.Engine.Core; +using Syntriax.Engine.Integration.MonoGame; namespace Pong.Behaviours; -public class TextScoreBehaviour : TextBehaviour, IFirstFrameUpdate +public class TextScoreBehaviour(bool IsLeft) : TextBehaviour, IFirstFrameUpdate { - public bool IsLeft { get; } + public readonly bool IsLeft = IsLeft; - private PongManagerBehaviour? pongManager = null; + private PongManagerBehaviour pongManager = null!; public void FirstActiveFrame() { - if (!UniverseObject.Universe.TryFindBehaviour(out pongManager)) - return; + MonoGameWindow monoGameWindow = Universe.FindRequiredBehaviour().Window; + Font = monoGameWindow.Content.Load("UbuntuMono"); + + pongManager = Universe.FindRequiredBehaviour(); pongManager.OnScored += UpdateScores; pongManager.OnReset += UpdateScores; @@ -27,7 +31,4 @@ public class TextScoreBehaviour : TextBehaviour, IFirstFrameUpdate else Text = pongManager.ScoreRight.ToString(); } - - public TextScoreBehaviour(bool IsLeft) => this.IsLeft = IsLeft; - public TextScoreBehaviour(bool IsLeft, SpriteFont font) : base(font) => this.IsLeft = IsLeft; } diff --git a/Shared/GamePong.cs b/Shared/GamePong.cs index 301bfa4..ef7447b 100644 --- a/Shared/GamePong.cs +++ b/Shared/GamePong.cs @@ -1,78 +1,72 @@ using System; using System.Linq; -using Microsoft.Xna.Framework; -using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Pong.Behaviours; using Syntriax.Engine.Core; using Syntriax.Engine.Core.Factory; +using Syntriax.Engine.Integration.MonoGame; using Syntriax.Engine.Network; using Syntriax.Engine.Physics2D; using Syntriax.Engine.Systems.Tween; -using Syntriax.Engine.Integration.MonoGame; namespace Pong; public class GamePong : MonoGameWindow { - private readonly IUniverseObject platformSpecificUniverseObject = null!; - - public GamePong(IUniverseObject platformSpecificUniverseObject) + protected override void Initialize() { - this.platformSpecificUniverseObject = platformSpecificUniverseObject; - Graphics.PreferredBackBufferWidth = 1024; - Graphics.PreferredBackBufferHeight = 576; - Graphics.GraphicsProfile = GraphicsProfile.HiDef; - } - - protected override void PopulateUniverse(IUniverse universe) - { - SpriteFont spriteFont = Content.Load("UbuntuMono"); - - universe.Register(platformSpecificUniverseObject); + base.Initialize(); if (Environment.GetCommandLineArgs().FirstOrDefault(x => x.CompareTo("-server") == 0) is not null) { - LiteNetLibServer server = universe.InstantiateUniverseObject().SetUniverseObject("Server").BehaviourController.AddBehaviour(); + LiteNetLibServer server = Universe.InstantiateUniverseObject().SetUniverseObject("Server").BehaviourController.AddBehaviour(); server.BehaviourController.AddBehaviour(); server.Start(8888, 2); Window.Title = $"Server"; } else { - LiteNetLibClient client = universe.InstantiateUniverseObject().SetUniverseObject("Client").BehaviourController.AddBehaviour(); + LiteNetLibClient client = Universe.InstantiateUniverseObject().SetUniverseObject("Client").BehaviourController.AddBehaviour(); client.BehaviourController.AddBehaviour(); client.Connect("localhost", 8888); Window.Title = $"Client"; - DrawManager drawManager = universe.InstantiateUniverseObject().SetUniverseObject("Draw Manager").BehaviourController.AddBehaviour(); - universe.InstantiateUniverseObject().SetUniverseObject("Shape Batcher", drawManager.UniverseObject).BehaviourController.AddBehaviour(); - universe.InstantiateUniverseObject().SetUniverseObject("Sprite Batcher", drawManager.UniverseObject).BehaviourController.AddBehaviour(); + DrawManager drawManager = Universe.InstantiateUniverseObject().SetUniverseObject("Draw Manager").BehaviourController.AddBehaviour(); + Universe.InstantiateUniverseObject().SetUniverseObject("Shape Batcher", drawManager.UniverseObject).BehaviourController.AddBehaviour(); + Universe.InstantiateUniverseObject().SetUniverseObject("Sprite Batcher", drawManager.UniverseObject).BehaviourController.AddBehaviour(); + + Universe.InstantiateUniverseObject().SetUniverseObject("Score Left") + .BehaviourController.AddBehaviour().SetTransform(position: new Vector2D(-250f, 250f), scale: Vector2D.One * .25f) + .BehaviourController.AddBehaviour(true); + + Universe.InstantiateUniverseObject().SetUniverseObject("Score Right") + .BehaviourController.AddBehaviour().SetTransform(position: new Vector2D(250f, 250f), scale: Vector2D.One * .25f) + .BehaviourController.AddBehaviour(false); } - universe.InstantiateUniverseObject().SetUniverseObject("Update Manager").BehaviourController.AddBehaviour(); - universe.InstantiateUniverseObject().SetUniverseObject("Coroutine Manager").BehaviourController.AddBehaviour(); - universe.InstantiateUniverseObject().SetUniverseObject("Tween Manager").BehaviourController.AddBehaviour(); - universe.InstantiateUniverseObject().SetUniverseObject("Physics Engine 2D").BehaviourController.AddBehaviour(); + Universe.InstantiateUniverseObject().SetUniverseObject("Update Manager").BehaviourController.AddBehaviour(); + Universe.InstantiateUniverseObject().SetUniverseObject("Coroutine Manager").BehaviourController.AddBehaviour(); + Universe.InstantiateUniverseObject().SetUniverseObject("Tween Manager").BehaviourController.AddBehaviour(); + Universe.InstantiateUniverseObject().SetUniverseObject("Physics Engine 2D").BehaviourController.AddBehaviour(); //////////////////////////////////////////////////////////////////////////////////// - universe.InstantiateUniverseObject().SetUniverseObject("Camera") + Universe.InstantiateUniverseObject().SetUniverseObject("Camera") .BehaviourController.AddBehaviour() .BehaviourController.AddBehaviour() .BehaviourController.AddBehaviour(); //////////////////////////////////////////////////////////////////////////////////// - PongManagerBehaviour pongManager = universe.InstantiateUniverseObject().SetUniverseObject("Pong Game Manager") + PongManagerBehaviour pongManager = Universe.InstantiateUniverseObject().SetUniverseObject("Pong Game Manager") .BehaviourController.AddBehaviour(5); //////////////////////////////////////////////////////////////////////////////////// - universe.InstantiateUniverseObject().SetUniverseObject("Ball") + Universe.InstantiateUniverseObject().SetUniverseObject("Ball") .BehaviourController.AddBehaviour().SetTransform(position: new Vector2D(0, 0f), scale: new Vector2D(10f, 10f)) .BehaviourController.AddBehaviour(new Circle(Vector2D.Zero, 1f)) .BehaviourController.AddBehaviour() @@ -87,7 +81,7 @@ public class GamePong : MonoGameWindow PaddleBehaviour leftPaddleBehaviour = BehaviourFactory.Instantiate(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().SetTransform(position: new Vector2D(468f, 0f), scale: new Vector2D(15f, 60f)) @@ -96,40 +90,30 @@ public class GamePong : MonoGameWindow PaddleBehaviour rightPaddleBehaviour = BehaviourFactory.Instantiate(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().SetTransform(position: new Vector2D(0f, 308f), scale: new Vector2D(552f, 20f)) .BehaviourController.AddBehaviour(Shape2D.Square) .BehaviourController.AddBehaviour().IsStatic = true; - universe.InstantiateUniverseObject().SetUniverseObject("Wall Bottom") + Universe.InstantiateUniverseObject().SetUniverseObject("Wall Bottom") .BehaviourController.AddBehaviour().SetTransform(position: new Vector2D(0f, -308f), scale: new Vector2D(552f, 20f)) .BehaviourController.AddBehaviour(Shape2D.Square) .BehaviourController.AddBehaviour().IsStatic = true; - universe.InstantiateUniverseObject().SetUniverseObject("Wall Right") + Universe.InstantiateUniverseObject().SetUniverseObject("Wall Right") .BehaviourController.AddBehaviour().SetTransform(position: new Vector2D(532f, 0f), scale: new Vector2D(20f, 328f)) .BehaviourController.AddBehaviour((Action)pongManager.ScoreToLeft) .BehaviourController.AddBehaviour(Shape2D.Square) .BehaviourController.AddBehaviour().IsStatic = true; - universe.InstantiateUniverseObject().SetUniverseObject("Wall Left") + Universe.InstantiateUniverseObject().SetUniverseObject("Wall Left") .BehaviourController.AddBehaviour().SetTransform(position: new Vector2D(-532f, 0f), scale: new Vector2D(20f, 328f)) .BehaviourController.AddBehaviour((Action)pongManager.ScoreToRight) .BehaviourController.AddBehaviour(Shape2D.Square) .BehaviourController.AddBehaviour().IsStatic = true; - - //////////////////////////////////////////////////////////////////////////////////// - - universe.InstantiateUniverseObject().SetUniverseObject("Score Left") - .BehaviourController.AddBehaviour().SetTransform(position: new Vector2D(-250f, 250f), scale: Vector2D.One * .25f) - .BehaviourController.AddBehaviour(true, spriteFont); - - universe.InstantiateUniverseObject().SetUniverseObject("Score Right") - .BehaviourController.AddBehaviour().SetTransform(position: new Vector2D(250f, 250f), scale: Vector2D.One * .25f) - .BehaviourController.AddBehaviour(false, spriteFont); } }