diff --git a/Platforms/Desktop/Desktop.csproj b/Platforms/Desktop/Desktop.csproj index 5556412..53fc12f 100644 --- a/Platforms/Desktop/Desktop.csproj +++ b/Platforms/Desktop/Desktop.csproj @@ -26,20 +26,14 @@ - - + - - - Content/Content.mgcb - - diff --git a/Platforms/Desktop/DesktopInputs.cs b/Platforms/Desktop/DesktopInputs.cs deleted file mode 100644 index 47b965d..0000000 --- a/Platforms/Desktop/DesktopInputs.cs +++ /dev/null @@ -1,135 +0,0 @@ -using System; -using System.Collections.Generic; - -using Microsoft.Xna.Framework.Input; - -using Engine.Core; -using Engine.Integration.MonoGame; -using Engine.Systems.Input; - -using MyUniverse.Shared.Behaviours.Abstract; - -namespace MyUniverse.Platforms.Desktop; - -public class DesktopInputs : Behaviour, IEnterUniverse, IExitUniverse, IGameInputs -{ - public IButtonInputs.InputEvent OnAnyButtonPressed { get; } = new(); - public IButtonInputs.InputEvent OnAnyButtonReleased { get; } = new(); - - private readonly Dictionary.InputEvent> OnPressed = new(256); - private readonly Dictionary.InputEvent> OnReleased = new(256); - - private readonly Dictionary keyMappingReversed = []; - private readonly Dictionary keyMapping = new() { - { Keys.Space, IGameInputs.Button.Interact } - }; - - private KeyboardInputs keyboardInputs = null!; - - public void EnterUniverse(IUniverse universe) - { - keyboardInputs = BehaviourController.GetOrAddBehaviour(); - keyboardInputs.OnAnyButtonPressed.AddListener(AnyPressCallback); - keyboardInputs.OnAnyButtonReleased.AddListener(AnyReleaseCallback); - - foreach ((Keys key, IGameInputs.Button button) in keyMapping) - keyboardInputs.RegisterOnPress(key, PressCallback); - - foreach ((Keys key, IGameInputs.Button button) in keyMapping) - keyboardInputs.RegisterOnRelease(key, ReleaseCallback); - } - - public void ExitUniverse(IUniverse universe) - { - keyboardInputs.OnAnyButtonPressed.RemoveListener(AnyPressCallback); - keyboardInputs.OnAnyButtonReleased.RemoveListener(AnyReleaseCallback); - - foreach ((Keys key, IGameInputs.Button button) in keyMapping) - keyboardInputs.UnregisterOnPress(key, PressCallback); - - foreach ((Keys key, IGameInputs.Button button) in keyMapping) - keyboardInputs.UnregisterOnRelease(key, ReleaseCallback); - } - - private void PressCallback(IButtonInputs sender, IButtonInputs.ButtonCallbackArguments args) - { - if (!keyMapping.TryGetValue(args.Button, out IGameInputs.Button button)) - return; - - if (!OnPressed.TryGetValue(button, out IButtonInputs.InputEvent? @event)) - return; - - @event.Invoke(this, new(button)); - } - - private void ReleaseCallback(IButtonInputs sender, IButtonInputs.ButtonCallbackArguments args) - { - if (!keyMapping.TryGetValue(args.Button, out IGameInputs.Button button)) - return; - - if (!OnReleased.TryGetValue(button, out IButtonInputs.InputEvent? @event)) - return; - - @event.Invoke(this, new(button)); - } - - private void AnyReleaseCallback(IButtonInputs sender, IButtonInputs.ButtonCallbackArguments args) - { - if (keyMapping.TryGetValue(args.Button, out IGameInputs.Button button)) - OnAnyButtonPressed?.Invoke(this, new(button)); - } - - private void AnyPressCallback(IButtonInputs sender, IButtonInputs.ButtonCallbackArguments args) - { - if (keyMapping.TryGetValue(args.Button, out IGameInputs.Button button)) - OnAnyButtonPressed?.Invoke(this, new(button)); - } - - public void RegisterOnPress(IGameInputs.Button button, IButtonInputs.InputEvent.EventHandler callback) - { - if (!OnPressed.TryGetValue(button, out IButtonInputs.InputEvent? @event)) - { - @event = new(); - OnPressed.Add(button, @event); - } - - @event.AddListener(callback); - } - - public void UnregisterOnPress(IGameInputs.Button button, IButtonInputs.InputEvent.EventHandler callback) - { - if (OnPressed.TryGetValue(button, out IButtonInputs.InputEvent? @event)) - @event.RemoveListener(callback); - } - - public void RegisterOnRelease(IGameInputs.Button button, IButtonInputs.InputEvent.EventHandler callback) - { - if (!OnReleased.TryGetValue(button, out IButtonInputs.InputEvent? @event)) - { - @event = new(); - OnReleased.Add(button, @event); - } - - @event.AddListener(callback); - } - - public void UnregisterOnRelease(IGameInputs.Button button, IButtonInputs.InputEvent.EventHandler callback) - { - if (OnReleased.TryGetValue(button, out IButtonInputs.InputEvent? @event)) - @event.RemoveListener(callback); - } - - public bool IsPressed(IGameInputs.Button button) - { - if (!keyMappingReversed.TryGetValue(button, out Keys key)) - throw new($"{Enum.GetName(button)} is not mapped correctly"); - - return keyboardInputs.IsPressed(key); - } - - public DesktopInputs() - { - foreach ((Keys key, IGameInputs.Button button) in keyMapping) - keyMappingReversed.Add(button, key); - } -} diff --git a/Platforms/Desktop/Program.cs b/Platforms/Desktop/Program.cs index abd54f2..56db350 100644 --- a/Platforms/Desktop/Program.cs +++ b/Platforms/Desktop/Program.cs @@ -1,16 +1,13 @@ -using Microsoft.Xna.Framework.Graphics; +using System; using Engine.Core; using Engine.Core.Debug; using Engine.Core.Serialization; -using Engine.Integration.MonoGame; using Engine.Serializers.Yaml; using Engine.Systems.Network; - -using MyUniverse.Platforms.Desktop; +using Engine.Systems.Time; Universe universe = new(); -using MonoGameWindow monoGameWindow = new(universe); ISerializer serializer = new YamlSerializer(); @@ -25,12 +22,8 @@ universe.InstantiateUniverseObject().SetUniverseObject("Logger") IUniverseObject desktopParent = universe.InstantiateUniverseObject().SetUniverseObject("Desktop"); -universe.InstantiateUniverseObject().SetUniverseObject("Desktop Inputs", desktopParent) - .BehaviourController.AddBehaviour(); - universe.InstantiateUniverseObject().SetUniverseObject("Visual Managers", desktopParent) - .BehaviourController.AddBehaviour() - .BehaviourController.AddBehaviour(); + .BehaviourController.AddBehaviour(); /* For Networking LiteNetLibClient client = universe.InstantiateUniverseObject().SetUniverseObject("Client").BehaviourController.AddBehaviour(); @@ -38,9 +31,24 @@ client.BehaviourController.AddBehaviour(); universe.OnPreUpdate.AddOneTimeListener((_, _) => client.Connect("localhost", 8888)); */ -MyUniverse.Shared.UniverseSource.ApplyClient(universe); +MyUniverse.Shared.UniverseSource.ApplyCore(universe); MyUniverse.Shared.UniverseSource.ApplyUniverse(universe); -monoGameWindow.Graphics.GraphicsProfile = GraphicsProfile.HiDef; +desktopParent.AddChild(universe.InstantiateUniverseObject().SetUniverseObject("Triangle Batcher").BehaviourController.AddBehaviour().UniverseObject); -monoGameWindow.Run(); +universe.Initialize(); + +DateTime lastRun = DateTime.UtcNow; +TimeSpan timeSinceStart = new(0); + +while (true) +{ + DateTime now = DateTime.UtcNow; + TimeSpan updateTimeSpan = now - lastRun; + + timeSinceStart += updateTimeSpan; + universe.Update(new(timeSinceStart, updateTimeSpan)); + + lastRun = now; + System.Threading.Thread.Sleep(1); +} diff --git a/Shared/Behaviours/MousePositionerBehaviour.cs b/Shared/Behaviours/MousePositionerBehaviour.cs deleted file mode 100644 index 44f2014..0000000 --- a/Shared/Behaviours/MousePositionerBehaviour.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Microsoft.Xna.Framework.Input; - -using Engine.Core; -using Engine.Integration.MonoGame; - -namespace MyUniverse.Shared.Behaviours; - -public class MousePositionerBehaviour : Behaviour2D, IUpdate, IFirstFrameUpdate -{ - private ICamera2D camera = null!; - - public void FirstActiveFrame() - { - camera = Universe.FindRequiredBehaviour(); - } - - public void Update() - { - Transform.Position = camera.ScreenToWorldPosition(Mouse.GetState().Position.ToVector2D()); - } -} diff --git a/Shared/Shared.csproj b/Shared/Shared.csproj index f7d2154..f1221c5 100644 --- a/Shared/Shared.csproj +++ b/Shared/Shared.csproj @@ -12,6 +12,5 @@ - diff --git a/Shared/UniverseSource.cs b/Shared/UniverseSource.cs index bf660a8..ba0e158 100644 --- a/Shared/UniverseSource.cs +++ b/Shared/UniverseSource.cs @@ -1,5 +1,4 @@ using Engine.Core; -using Engine.Integration.MonoGame; using Engine.Systems.Graphics; using Engine.Systems.Tween; @@ -19,33 +18,11 @@ public static class UniverseSource coreManagersUO.AddChild(universe.InstantiateUniverseObject().SetUniverseObject("Tween Manager").BehaviourController.AddBehaviour().UniverseObject); } - public static void ApplyClient(IUniverse universe) - { - ApplyCore(universe); - - IUniverseObject clientManagersUO = universe.InstantiateUniverseObject().SetUniverseObject("Core Managers"); - clientManagersUO.AddChild(universe.InstantiateUniverseObject().SetUniverseObject("Triangle Batcher").BehaviourController.AddBehaviour().UniverseObject); - clientManagersUO.AddChild(universe.InstantiateUniverseObject().SetUniverseObject("Sprite Batcher").BehaviourController.AddBehaviour().UniverseObject); - clientManagersUO.AddChild(universe.InstantiateUniverseObject().SetUniverseObject("MonoGame Triangle Batch").BehaviourController.AddBehaviour().UniverseObject); - - MonoGameCamera2D camera = universe.InstantiateUniverseObject().SetUniverseObject("Camera") - .BehaviourController.AddBehaviour() - .BehaviourController.AddBehaviour(); - - camera.Zoom = 20f; - } - public static void ApplyUniverse(IUniverse universe) { universe.InstantiateUniverseObject().SetUniverseObject("Example Object") .BehaviourController.AddBehaviour(); - universe.InstantiateUniverseObject().SetUniverseObject("MouseObject") - .BehaviourController.AddBehaviour() - .BehaviourController.AddBehaviour() - .BehaviourController.AddBehaviour() - .BehaviourController.AddBehaviour(Shape2D.CreateNgon(4), new ColorRGB(255, 255, 0)).Priority = 10; - universe.InstantiateUniverseObject() .SetUniverseObject("Rotating Triangle") .BehaviourController.AddBehaviour().SetTransform(position: new(10f, 6f), scale: Vector2D.One * 5)