chore: updated engine with the more readable button inputs syntax

This commit is contained in:
Syntriax 2025-08-10 14:43:27 +03:00
parent 80d29a71ed
commit 24a09dcaa3
4 changed files with 35 additions and 31 deletions

2
Engine

@ -1 +1 @@
Subproject commit a4b83679b1c45313b57a7a2581547aacf9f3064f Subproject commit 746d29fb7a0f71bd01b9237f73022eee0a58e1f9

View File

@ -11,17 +11,17 @@ namespace MyUniverse.Platforms.Android;
public class MobileInputs : Behaviour, IUpdate, IGameInputs public class MobileInputs : Behaviour, IUpdate, IGameInputs
{ {
public Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments> OnAnyButtonPressed { get; } = new(); public IButtonInputs<IGameInputs.Button>.InputEvent OnAnyButtonPressed { get; } = new();
public Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments> OnAnyButtonReleased { get; } = new(); public IButtonInputs<IGameInputs.Button>.InputEvent OnAnyButtonReleased { get; } = new();
private readonly Dictionary<IGameInputs.Button, Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments>> OnPressed = new(256); private readonly Dictionary<IGameInputs.Button, IButtonInputs<IGameInputs.Button>.InputEvent> OnPressed = new(256);
private readonly Dictionary<IGameInputs.Button, Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments>> OnReleased = new(256); private readonly Dictionary<IGameInputs.Button, IButtonInputs<IGameInputs.Button>.InputEvent> OnReleased = new(256);
private TouchCollection touchCollection = default; private TouchCollection touchCollection = default;
public void RegisterOnPress(IGameInputs.Button key, Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments>.EventHandler callback) public void RegisterOnPress(IGameInputs.Button key, IButtonInputs<IGameInputs.Button>.InputEvent.EventHandler callback)
{ {
if (OnPressed.TryGetValue(key, out Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments> @event)) if (OnPressed.TryGetValue(key, out IButtonInputs<IGameInputs.Button>.InputEvent @event))
{ {
@event.AddListener(callback); @event.AddListener(callback);
return; return;
@ -32,15 +32,15 @@ public class MobileInputs : Behaviour, IUpdate, IGameInputs
OnPressed.Add(key, @event); OnPressed.Add(key, @event);
} }
public void UnregisterOnPress(IGameInputs.Button key, Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments>.EventHandler callback) public void UnregisterOnPress(IGameInputs.Button key, IButtonInputs<IGameInputs.Button>.InputEvent.EventHandler callback)
{ {
if (OnPressed.TryGetValue(key, out Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments> @event)) if (OnPressed.TryGetValue(key, out IButtonInputs<IGameInputs.Button>.InputEvent @event))
@event.RemoveListener(callback); @event.RemoveListener(callback);
} }
public void RegisterOnRelease(IGameInputs.Button key, Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments>.EventHandler callback) public void RegisterOnRelease(IGameInputs.Button key, IButtonInputs<IGameInputs.Button>.InputEvent.EventHandler callback)
{ {
if (OnReleased.TryGetValue(key, out Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments> @event)) if (OnReleased.TryGetValue(key, out IButtonInputs<IGameInputs.Button>.InputEvent @event))
{ {
@event.AddListener(callback); @event.AddListener(callback);
return; return;
@ -51,9 +51,9 @@ public class MobileInputs : Behaviour, IUpdate, IGameInputs
OnReleased.Add(key, @event); OnReleased.Add(key, @event);
} }
public void UnregisterOnRelease(IGameInputs.Button key, Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments>.EventHandler callback) public void UnregisterOnRelease(IGameInputs.Button key, IButtonInputs<IGameInputs.Button>.InputEvent.EventHandler callback)
{ {
if (OnReleased.TryGetValue(key, out Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments> @event)) if (OnReleased.TryGetValue(key, out IButtonInputs<IGameInputs.Button>.InputEvent @event))
@event.RemoveListener(callback); @event.RemoveListener(callback);
} }
@ -66,13 +66,13 @@ public class MobileInputs : Behaviour, IUpdate, IGameInputs
TouchLocation touchLocation = touchCollection[(int)IGameInputs.Button.Interact]; TouchLocation touchLocation = touchCollection[(int)IGameInputs.Button.Interact];
if (touchLocation.State == TouchLocationState.Pressed) if (touchLocation.State == TouchLocationState.Pressed)
{ {
if (OnPressed.TryGetValue(IGameInputs.Button.Interact, out Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments> @event)) if (OnPressed.TryGetValue(IGameInputs.Button.Interact, out IButtonInputs<IGameInputs.Button>.InputEvent @event))
@event.Invoke(this, new(IGameInputs.Button.Interact)); @event.Invoke(this, new(IGameInputs.Button.Interact));
OnAnyButtonPressed?.Invoke(this, new(IGameInputs.Button.Interact)); OnAnyButtonPressed?.Invoke(this, new(IGameInputs.Button.Interact));
} }
else if (touchLocation.State == TouchLocationState.Released) else if (touchLocation.State == TouchLocationState.Released)
{ {
if (OnReleased.TryGetValue(IGameInputs.Button.Interact, out Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments> @event)) if (OnReleased.TryGetValue(IGameInputs.Button.Interact, out IButtonInputs<IGameInputs.Button>.InputEvent @event))
@event.Invoke(this, new(IGameInputs.Button.Interact)); @event.Invoke(this, new(IGameInputs.Button.Interact));
OnAnyButtonReleased?.Invoke(this, new(IGameInputs.Button.Interact)); OnAnyButtonReleased?.Invoke(this, new(IGameInputs.Button.Interact));
} }

View File

@ -9,13 +9,15 @@ using Engine.Systems.Input;
using MyUniverse.Shared.Behaviours.Abstract; using MyUniverse.Shared.Behaviours.Abstract;
namespace MyUniverse.Platforms.Desktop;
public class DesktopInputs : BehaviourBase, IEnterUniverse, IExitUniverse, IGameInputs public class DesktopInputs : BehaviourBase, IEnterUniverse, IExitUniverse, IGameInputs
{ {
public Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments> OnAnyButtonPressed { get; } = new(); public IButtonInputs<IGameInputs.Button>.InputEvent OnAnyButtonPressed { get; } = new();
public Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments> OnAnyButtonReleased { get; } = new(); public IButtonInputs<IGameInputs.Button>.InputEvent OnAnyButtonReleased { get; } = new();
private readonly Dictionary<IGameInputs.Button, Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments>> OnPressed = new(256); private readonly Dictionary<IGameInputs.Button, IButtonInputs<IGameInputs.Button>.InputEvent> OnPressed = new(256);
private readonly Dictionary<IGameInputs.Button, Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments>> OnReleased = new(256); private readonly Dictionary<IGameInputs.Button, IButtonInputs<IGameInputs.Button>.InputEvent> OnReleased = new(256);
private readonly Dictionary<IGameInputs.Button, Keys> keyMappingReversed = []; private readonly Dictionary<IGameInputs.Button, Keys> keyMappingReversed = [];
private readonly Dictionary<Keys, IGameInputs.Button> keyMapping = new() { private readonly Dictionary<Keys, IGameInputs.Button> keyMapping = new() {
@ -54,7 +56,7 @@ public class DesktopInputs : BehaviourBase, IEnterUniverse, IExitUniverse, IGame
if (!keyMapping.TryGetValue(args.Button, out IGameInputs.Button button)) if (!keyMapping.TryGetValue(args.Button, out IGameInputs.Button button))
return; return;
if (!OnPressed.TryGetValue(button, out Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments>? @event)) if (!OnPressed.TryGetValue(button, out IButtonInputs<IGameInputs.Button>.InputEvent? @event))
return; return;
@event.Invoke(this, new(button)); @event.Invoke(this, new(button));
@ -65,7 +67,7 @@ public class DesktopInputs : BehaviourBase, IEnterUniverse, IExitUniverse, IGame
if (!keyMapping.TryGetValue(args.Button, out IGameInputs.Button button)) if (!keyMapping.TryGetValue(args.Button, out IGameInputs.Button button))
return; return;
if (!OnReleased.TryGetValue(button, out Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments>? @event)) if (!OnReleased.TryGetValue(button, out IButtonInputs<IGameInputs.Button>.InputEvent? @event))
return; return;
@event.Invoke(this, new(button)); @event.Invoke(this, new(button));
@ -83,9 +85,9 @@ public class DesktopInputs : BehaviourBase, IEnterUniverse, IExitUniverse, IGame
OnAnyButtonPressed?.Invoke(this, new(button)); OnAnyButtonPressed?.Invoke(this, new(button));
} }
public void RegisterOnPress(IGameInputs.Button button, Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments>.EventHandler callback) public void RegisterOnPress(IGameInputs.Button button, IButtonInputs<IGameInputs.Button>.InputEvent.EventHandler callback)
{ {
if (!OnPressed.TryGetValue(button, out Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments>? @event)) if (!OnPressed.TryGetValue(button, out IButtonInputs<IGameInputs.Button>.InputEvent? @event))
{ {
@event = new(); @event = new();
OnPressed.Add(button, @event); OnPressed.Add(button, @event);
@ -94,15 +96,15 @@ public class DesktopInputs : BehaviourBase, IEnterUniverse, IExitUniverse, IGame
@event.AddListener(callback); @event.AddListener(callback);
} }
public void UnregisterOnPress(IGameInputs.Button button, Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments>.EventHandler callback) public void UnregisterOnPress(IGameInputs.Button button, IButtonInputs<IGameInputs.Button>.InputEvent.EventHandler callback)
{ {
if (OnPressed.TryGetValue(button, out Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments>? @event)) if (OnPressed.TryGetValue(button, out IButtonInputs<IGameInputs.Button>.InputEvent? @event))
@event.RemoveListener(callback); @event.RemoveListener(callback);
} }
public void RegisterOnRelease(IGameInputs.Button button, Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments>.EventHandler callback) public void RegisterOnRelease(IGameInputs.Button button, IButtonInputs<IGameInputs.Button>.InputEvent.EventHandler callback)
{ {
if (!OnReleased.TryGetValue(button, out Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments>? @event)) if (!OnReleased.TryGetValue(button, out IButtonInputs<IGameInputs.Button>.InputEvent? @event))
{ {
@event = new(); @event = new();
OnReleased.Add(button, @event); OnReleased.Add(button, @event);
@ -111,9 +113,9 @@ public class DesktopInputs : BehaviourBase, IEnterUniverse, IExitUniverse, IGame
@event.AddListener(callback); @event.AddListener(callback);
} }
public void UnregisterOnRelease(IGameInputs.Button button, Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments>.EventHandler callback) public void UnregisterOnRelease(IGameInputs.Button button, IButtonInputs<IGameInputs.Button>.InputEvent.EventHandler callback)
{ {
if (OnReleased.TryGetValue(button, out Event<IButtonInputs<IGameInputs.Button>, IButtonInputs<IGameInputs.Button>.ButtonCallbackArguments>? @event)) if (OnReleased.TryGetValue(button, out IButtonInputs<IGameInputs.Button>.InputEvent? @event))
@event.RemoveListener(callback); @event.RemoveListener(callback);
} }

View File

@ -7,6 +7,8 @@ using Engine.Integration.MonoGame;
using Engine.Serializers.Yaml; using Engine.Serializers.Yaml;
using Engine.Systems.Network; using Engine.Systems.Network;
using MyUniverse.Platforms.Desktop;
Universe universe = new(); Universe universe = new();
ISerializer serializer = new YamlSerializer(); ISerializer serializer = new YamlSerializer();