chore: cleaned up monogame references from desktop platform & shared project
This commit is contained in:
@@ -26,20 +26,14 @@
|
|||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="MonoGame.Framework.DesktopGL" Version="3.8.2.1105" />
|
|
||||||
<PackageReference Include="MonoGame.Content.Builder.Task" Version="3.8.2.1105" />
|
|
||||||
<PackageReference Include="nulastudio.NetBeauty" Version="2.1.5" />
|
<PackageReference Include="nulastudio.NetBeauty" Version="2.1.5" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="../../Engine/Engine.Integration/Engine.Integration.LiteNetLib/Engine.Integration.LiteNetLib.csproj" />
|
<ProjectReference Include="../../Engine/Engine.Integration/Engine.Integration.LiteNetLib/Engine.Integration.LiteNetLib.csproj" />
|
||||||
|
<ProjectReference Include="../../Engine/Engine.Integration/Engine.Integration.Yaml/Engine.Integration.Yaml.csproj" />
|
||||||
<ProjectReference Include="../../Shared/Shared.csproj" />
|
<ProjectReference Include="../../Shared/Shared.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<MonoGameContentReference Include="../../Shared/Content/Content.mgcb">
|
|
||||||
<Link>Content/Content.mgcb</Link>
|
|
||||||
</MonoGameContentReference>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="../../Shared/Shared.csproj" />
|
<ProjectReference Include="../../Shared/Shared.csproj" />
|
||||||
<ProjectReference Include="../../Engine/Engine.Integration/Engine.Integration.Yaml/Engine.Integration.Yaml.csproj" />
|
<ProjectReference Include="../../Engine/Engine.Integration/Engine.Integration.Yaml/Engine.Integration.Yaml.csproj" />
|
||||||
|
|||||||
@@ -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<IGameInputs.Button>.InputEvent OnAnyButtonPressed { get; } = new();
|
|
||||||
public IButtonInputs<IGameInputs.Button>.InputEvent OnAnyButtonReleased { get; } = new();
|
|
||||||
|
|
||||||
private readonly Dictionary<IGameInputs.Button, IButtonInputs<IGameInputs.Button>.InputEvent> OnPressed = new(256);
|
|
||||||
private readonly Dictionary<IGameInputs.Button, IButtonInputs<IGameInputs.Button>.InputEvent> OnReleased = new(256);
|
|
||||||
|
|
||||||
private readonly Dictionary<IGameInputs.Button, Keys> keyMappingReversed = [];
|
|
||||||
private readonly Dictionary<Keys, IGameInputs.Button> keyMapping = new() {
|
|
||||||
{ Keys.Space, IGameInputs.Button.Interact }
|
|
||||||
};
|
|
||||||
|
|
||||||
private KeyboardInputs keyboardInputs = null!;
|
|
||||||
|
|
||||||
public void EnterUniverse(IUniverse universe)
|
|
||||||
{
|
|
||||||
keyboardInputs = BehaviourController.GetOrAddBehaviour<KeyboardInputs>();
|
|
||||||
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<Keys> sender, IButtonInputs<Keys>.ButtonCallbackArguments args)
|
|
||||||
{
|
|
||||||
if (!keyMapping.TryGetValue(args.Button, out IGameInputs.Button button))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!OnPressed.TryGetValue(button, out IButtonInputs<IGameInputs.Button>.InputEvent? @event))
|
|
||||||
return;
|
|
||||||
|
|
||||||
@event.Invoke(this, new(button));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ReleaseCallback(IButtonInputs<Keys> sender, IButtonInputs<Keys>.ButtonCallbackArguments args)
|
|
||||||
{
|
|
||||||
if (!keyMapping.TryGetValue(args.Button, out IGameInputs.Button button))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!OnReleased.TryGetValue(button, out IButtonInputs<IGameInputs.Button>.InputEvent? @event))
|
|
||||||
return;
|
|
||||||
|
|
||||||
@event.Invoke(this, new(button));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void AnyReleaseCallback(IButtonInputs<Keys> sender, IButtonInputs<Keys>.ButtonCallbackArguments args)
|
|
||||||
{
|
|
||||||
if (keyMapping.TryGetValue(args.Button, out IGameInputs.Button button))
|
|
||||||
OnAnyButtonPressed?.Invoke(this, new(button));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void AnyPressCallback(IButtonInputs<Keys> sender, IButtonInputs<Keys>.ButtonCallbackArguments args)
|
|
||||||
{
|
|
||||||
if (keyMapping.TryGetValue(args.Button, out IGameInputs.Button button))
|
|
||||||
OnAnyButtonPressed?.Invoke(this, new(button));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void RegisterOnPress(IGameInputs.Button button, IButtonInputs<IGameInputs.Button>.InputEvent.EventHandler callback)
|
|
||||||
{
|
|
||||||
if (!OnPressed.TryGetValue(button, out IButtonInputs<IGameInputs.Button>.InputEvent? @event))
|
|
||||||
{
|
|
||||||
@event = new();
|
|
||||||
OnPressed.Add(button, @event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@event.AddListener(callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void UnregisterOnPress(IGameInputs.Button button, IButtonInputs<IGameInputs.Button>.InputEvent.EventHandler callback)
|
|
||||||
{
|
|
||||||
if (OnPressed.TryGetValue(button, out IButtonInputs<IGameInputs.Button>.InputEvent? @event))
|
|
||||||
@event.RemoveListener(callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void RegisterOnRelease(IGameInputs.Button button, IButtonInputs<IGameInputs.Button>.InputEvent.EventHandler callback)
|
|
||||||
{
|
|
||||||
if (!OnReleased.TryGetValue(button, out IButtonInputs<IGameInputs.Button>.InputEvent? @event))
|
|
||||||
{
|
|
||||||
@event = new();
|
|
||||||
OnReleased.Add(button, @event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@event.AddListener(callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void UnregisterOnRelease(IGameInputs.Button button, IButtonInputs<IGameInputs.Button>.InputEvent.EventHandler callback)
|
|
||||||
{
|
|
||||||
if (OnReleased.TryGetValue(button, out IButtonInputs<IGameInputs.Button>.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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,16 +1,13 @@
|
|||||||
using Microsoft.Xna.Framework.Graphics;
|
using System;
|
||||||
|
|
||||||
using Engine.Core;
|
using Engine.Core;
|
||||||
using Engine.Core.Debug;
|
using Engine.Core.Debug;
|
||||||
using Engine.Core.Serialization;
|
using Engine.Core.Serialization;
|
||||||
using Engine.Integration.MonoGame;
|
|
||||||
using Engine.Serializers.Yaml;
|
using Engine.Serializers.Yaml;
|
||||||
using Engine.Systems.Network;
|
using Engine.Systems.Network;
|
||||||
|
using Engine.Systems.Time;
|
||||||
using MyUniverse.Platforms.Desktop;
|
|
||||||
|
|
||||||
Universe universe = new();
|
Universe universe = new();
|
||||||
using MonoGameWindow monoGameWindow = new(universe);
|
|
||||||
|
|
||||||
ISerializer serializer = new YamlSerializer();
|
ISerializer serializer = new YamlSerializer();
|
||||||
|
|
||||||
@@ -25,12 +22,8 @@ universe.InstantiateUniverseObject().SetUniverseObject("Logger")
|
|||||||
|
|
||||||
IUniverseObject desktopParent = universe.InstantiateUniverseObject().SetUniverseObject("Desktop");
|
IUniverseObject desktopParent = universe.InstantiateUniverseObject().SetUniverseObject("Desktop");
|
||||||
|
|
||||||
universe.InstantiateUniverseObject().SetUniverseObject("Desktop Inputs", desktopParent)
|
|
||||||
.BehaviourController.AddBehaviour<DesktopInputs>();
|
|
||||||
|
|
||||||
universe.InstantiateUniverseObject().SetUniverseObject("Visual Managers", desktopParent)
|
universe.InstantiateUniverseObject().SetUniverseObject("Visual Managers", desktopParent)
|
||||||
.BehaviourController.AddBehaviour<DrawManager>()
|
.BehaviourController.AddBehaviour<DrawManager>();
|
||||||
.BehaviourController.AddBehaviour<LoadContentManager>();
|
|
||||||
|
|
||||||
/* For Networking
|
/* For Networking
|
||||||
LiteNetLibClient client = universe.InstantiateUniverseObject().SetUniverseObject("Client").BehaviourController.AddBehaviour<LiteNetLibClient>();
|
LiteNetLibClient client = universe.InstantiateUniverseObject().SetUniverseObject("Client").BehaviourController.AddBehaviour<LiteNetLibClient>();
|
||||||
@@ -38,9 +31,24 @@ client.BehaviourController.AddBehaviour<NetworkManager>();
|
|||||||
universe.OnPreUpdate.AddOneTimeListener((_, _) => client.Connect("localhost", 8888));
|
universe.OnPreUpdate.AddOneTimeListener((_, _) => client.Connect("localhost", 8888));
|
||||||
*/
|
*/
|
||||||
|
|
||||||
MyUniverse.Shared.UniverseSource.ApplyClient(universe);
|
MyUniverse.Shared.UniverseSource.ApplyCore(universe);
|
||||||
MyUniverse.Shared.UniverseSource.ApplyUniverse(universe);
|
MyUniverse.Shared.UniverseSource.ApplyUniverse(universe);
|
||||||
|
|
||||||
monoGameWindow.Graphics.GraphicsProfile = GraphicsProfile.HiDef;
|
desktopParent.AddChild(universe.InstantiateUniverseObject().SetUniverseObject("Triangle Batcher").BehaviourController.AddBehaviour<Engine.Systems.Graphics.TriangleBatcher>().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);
|
||||||
|
}
|
||||||
|
|||||||
@@ -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<ICamera2D>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Update()
|
|
||||||
{
|
|
||||||
Transform.Position = camera.ScreenToWorldPosition(Mouse.GetState().Position.ToVector2D());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -12,6 +12,5 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="../Engine/Engine/Engine.csproj" />
|
<ProjectReference Include="../Engine/Engine/Engine.csproj" />
|
||||||
<ProjectReference Include="../Engine/Engine.Integration/Engine.Integration.MonoGame/Engine.Integration.MonoGame.csproj" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using Engine.Core;
|
using Engine.Core;
|
||||||
using Engine.Integration.MonoGame;
|
|
||||||
using Engine.Systems.Graphics;
|
using Engine.Systems.Graphics;
|
||||||
using Engine.Systems.Tween;
|
using Engine.Systems.Tween;
|
||||||
|
|
||||||
@@ -19,33 +18,11 @@ public static class UniverseSource
|
|||||||
coreManagersUO.AddChild(universe.InstantiateUniverseObject().SetUniverseObject("Tween Manager").BehaviourController.AddBehaviour<TweenManager>().UniverseObject);
|
coreManagersUO.AddChild(universe.InstantiateUniverseObject().SetUniverseObject("Tween Manager").BehaviourController.AddBehaviour<TweenManager>().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<TriangleBatcher>().UniverseObject);
|
|
||||||
clientManagersUO.AddChild(universe.InstantiateUniverseObject().SetUniverseObject("Sprite Batcher").BehaviourController.AddBehaviour<SpriteBatcher>().UniverseObject);
|
|
||||||
clientManagersUO.AddChild(universe.InstantiateUniverseObject().SetUniverseObject("MonoGame Triangle Batch").BehaviourController.AddBehaviour<MonoGameTriangleBatch>().UniverseObject);
|
|
||||||
|
|
||||||
MonoGameCamera2D camera = universe.InstantiateUniverseObject().SetUniverseObject("Camera")
|
|
||||||
.BehaviourController.AddBehaviour<Transform2D>()
|
|
||||||
.BehaviourController.AddBehaviour<MonoGameCamera2D>();
|
|
||||||
|
|
||||||
camera.Zoom = 20f;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void ApplyUniverse(IUniverse universe)
|
public static void ApplyUniverse(IUniverse universe)
|
||||||
{
|
{
|
||||||
universe.InstantiateUniverseObject().SetUniverseObject("Example Object")
|
universe.InstantiateUniverseObject().SetUniverseObject("Example Object")
|
||||||
.BehaviourController.AddBehaviour<ExampleBehaviour>();
|
.BehaviourController.AddBehaviour<ExampleBehaviour>();
|
||||||
|
|
||||||
universe.InstantiateUniverseObject().SetUniverseObject("MouseObject")
|
|
||||||
.BehaviourController.AddBehaviour<Transform2D>()
|
|
||||||
.BehaviourController.AddBehaviour<LinearRotator>()
|
|
||||||
.BehaviourController.AddBehaviour<MousePositionerBehaviour>()
|
|
||||||
.BehaviourController.AddBehaviour<DrawableShape2D>(Shape2D.CreateNgon(4), new ColorRGB(255, 255, 0)).Priority = 10;
|
|
||||||
|
|
||||||
universe.InstantiateUniverseObject()
|
universe.InstantiateUniverseObject()
|
||||||
.SetUniverseObject("Rotating Triangle")
|
.SetUniverseObject("Rotating Triangle")
|
||||||
.BehaviourController.AddBehaviour<Transform2D>().SetTransform(position: new(10f, 6f), scale: Vector2D.One * 5)
|
.BehaviourController.AddBehaviour<Transform2D>().SetTransform(position: new(10f, 6f), scale: Vector2D.One * 5)
|
||||||
|
|||||||
Reference in New Issue
Block a user