Change input event to trigger different input states.
This commit is contained in:
@@ -16,14 +16,24 @@ namespace FlaxEngine
|
|||||||
public string Name;
|
public string Name;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns true if the event has been triggered during the current frame (e.g. user pressed a key). Use <see cref="Triggered"/> to catch events without active waiting.
|
/// Returns true if the event has been triggered during the current frame (e.g. user pressed a key). Use <see cref="Pressed"/>, <see cref="Pressing"/>, <see cref="Released"/> to catch events without active waiting.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool Active => Input.GetAction(Name);
|
public bool Active => Input.GetAction(Name);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Occurs when event is triggered (e.g. user pressed a key). Called before scripts update.
|
/// Occurs when event is pressed (e.g. user pressed a key). Called before scripts update.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public event Action Triggered;
|
public event Action Pressed;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Occurs when event is being pressing (e.g. user pressing a key). Called before scripts update.
|
||||||
|
/// </summary>
|
||||||
|
public event Action Pressing;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Occurs when event is released (e.g. user releases a key). Called before scripts update.
|
||||||
|
/// </summary>
|
||||||
|
public event Action Released;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="InputEvent"/> class.
|
/// Initializes a new instance of the <see cref="InputEvent"/> class.
|
||||||
@@ -51,10 +61,25 @@ namespace FlaxEngine
|
|||||||
Input.ActionTriggered -= Handler;
|
Input.ActionTriggered -= Handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Handler(string name)
|
private void Handler(string name, InputActionState state)
|
||||||
{
|
{
|
||||||
if (string.Equals(name, Name, StringComparison.OrdinalIgnoreCase))
|
if (!string.Equals(name, Name, StringComparison.OrdinalIgnoreCase))
|
||||||
Triggered?.Invoke();
|
return;
|
||||||
|
switch (state)
|
||||||
|
{
|
||||||
|
case InputActionState.None: break;
|
||||||
|
case InputActionState.Waiting: break;
|
||||||
|
case InputActionState.Pressing:
|
||||||
|
Pressing?.Invoke();
|
||||||
|
break;
|
||||||
|
case InputActionState.Press:
|
||||||
|
Pressed?.Invoke();
|
||||||
|
break;
|
||||||
|
case InputActionState.Release:
|
||||||
|
Released?.Invoke();
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ Action Input::MouseLeave;
|
|||||||
Delegate<const Float2&, int32> Input::TouchDown;
|
Delegate<const Float2&, int32> Input::TouchDown;
|
||||||
Delegate<const Float2&, int32> Input::TouchMove;
|
Delegate<const Float2&, int32> Input::TouchMove;
|
||||||
Delegate<const Float2&, int32> Input::TouchUp;
|
Delegate<const Float2&, int32> Input::TouchUp;
|
||||||
Delegate<StringView> Input::ActionTriggered;
|
Delegate<StringView, const InputActionState&> Input::ActionTriggered;
|
||||||
Array<ActionConfig> Input::ActionMappings;
|
Array<ActionConfig> Input::ActionMappings;
|
||||||
Array<AxisConfig> Input::AxisMappings;
|
Array<AxisConfig> Input::AxisMappings;
|
||||||
|
|
||||||
@@ -1022,9 +1022,9 @@ void InputService::Update()
|
|||||||
{
|
{
|
||||||
for (auto i = Actions.Begin(); i.IsNotEnd(); ++i)
|
for (auto i = Actions.Begin(); i.IsNotEnd(); ++i)
|
||||||
{
|
{
|
||||||
if (i->Value.Active)
|
if (i->Value.State != InputActionState::Waiting)
|
||||||
{
|
{
|
||||||
Input::ActionTriggered(i->Key);
|
Input::ActionTriggered(i->Key, i->Value.State);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -293,7 +293,7 @@ public:
|
|||||||
/// Event fired when virtual input action is triggered. Called before scripts update. See <see cref="ActionMappings"/> to edit configuration.
|
/// Event fired when virtual input action is triggered. Called before scripts update. See <see cref="ActionMappings"/> to edit configuration.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <seealso cref="InputEvent"/>
|
/// <seealso cref="InputEvent"/>
|
||||||
API_EVENT() static Delegate<StringView> ActionTriggered;
|
API_EVENT() static Delegate<StringView, const InputActionState&> ActionTriggered;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the value of the virtual action identified by name. Use <see cref="ActionMappings"/> to get the current config.
|
/// Gets the value of the virtual action identified by name. Use <see cref="ActionMappings"/> to get the current config.
|
||||||
|
|||||||
Reference in New Issue
Block a user