|
|
|
using System;
|
|
|
|
using System.Numerics;
|
|
|
|
using gaemstone.ECS;
|
|
|
|
|
|
|
|
namespace gaemstone.Client.Components;
|
|
|
|
|
|
|
|
[Module]
|
|
|
|
public class InputComponents
|
|
|
|
{
|
|
|
|
[Symbol, Path("/Input")]
|
|
|
|
[Add<Input>]
|
|
|
|
public struct Input { }
|
|
|
|
|
|
|
|
[Symbol, Path("/Input/Mouse")]
|
|
|
|
[Add<Mouse>]
|
|
|
|
public struct Mouse { }
|
|
|
|
|
|
|
|
[Symbol, Path("/Input/Keyboard")]
|
|
|
|
[Add<Keyboard>]
|
|
|
|
public struct Keyboard { }
|
|
|
|
|
|
|
|
[Symbol, Tag]
|
|
|
|
public struct Gamepad { }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary> Present on inputs / actions that are currently active. </summary>
|
|
|
|
[Symbol, Component] public struct Active { public TimeSpan Duration; }
|
|
|
|
|
|
|
|
/// <summary> Present on inputs / actions were activated this frame. </summary>
|
|
|
|
[Symbol, Tag] public struct Activated { }
|
|
|
|
|
|
|
|
/// <summary> Present on inputs / actions were deactivated this frame. </summary>
|
|
|
|
[Symbol, Tag] public struct Deactivated { }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Relationship on <see cref="Input"/> which indicates keyboard
|
|
|
|
/// and gamepad input is currently captured by the target.
|
|
|
|
/// </summary>
|
|
|
|
/// <remarks>
|
|
|
|
/// This is set if a UI element is focused that captures
|
|
|
|
/// navigational or text input.
|
|
|
|
/// </remarks>
|
|
|
|
[Symbol, Relation, Tag, Exclusive]
|
|
|
|
public struct InputCapturedBy { }
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Relationship on <see cref="Input"/> which indicates that mouse
|
|
|
|
/// input (buttons and wheel) is currently captured by the target.
|
|
|
|
/// </summary>
|
|
|
|
/// <remarks>
|
|
|
|
/// This could for example include the mouse currently being over
|
|
|
|
/// a UI element, preventing the game from handling mouse input.
|
|
|
|
/// </remarks>
|
|
|
|
[Symbol, Relation, Tag, Exclusive]
|
|
|
|
public struct MouseInputCapturedBy { }
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Relationship on <see cref="Input"/> which indicates that the
|
|
|
|
/// cursor is currently captured by the target, and thus hidden.
|
|
|
|
/// </summary>
|
|
|
|
/// <remarks>
|
|
|
|
/// This is set when a camera controller assumes control of the mouse.
|
|
|
|
/// </remarks>
|
|
|
|
[Symbol, Relation, Tag, Exclusive]
|
|
|
|
[With<InputCapturedBy>]
|
|
|
|
[With<MouseInputCapturedBy>]
|
|
|
|
public struct CursorCapturedBy { }
|
|
|
|
|
|
|
|
|
|
|
|
[Component]
|
|
|
|
internal readonly struct RawValue1D
|
|
|
|
{
|
|
|
|
private readonly float _value;
|
|
|
|
private RawValue1D(float value) => _value = value;
|
|
|
|
|
|
|
|
public static implicit operator float(RawValue1D value) => value._value;
|
|
|
|
public static implicit operator RawValue1D(float value) => new(value);
|
|
|
|
}
|
|
|
|
|
|
|
|
[Component]
|
|
|
|
internal readonly struct RawValue2D
|
|
|
|
{
|
|
|
|
private readonly Vector2 _value;
|
|
|
|
private RawValue2D(Vector2 value) => _value = value;
|
|
|
|
|
|
|
|
public static implicit operator Vector2(RawValue2D value) => value._value;
|
|
|
|
public static implicit operator RawValue2D(Vector2 value) => new(value);
|
|
|
|
}
|
|
|
|
}
|