diff --git a/Source/Engine/Engine/InputEvent.cs b/Source/Engine/Engine/InputEvent.cs
index 176d21fd0..c6c46c43d 100644
--- a/Source/Engine/Engine/InputEvent.cs
+++ b/Source/Engine/Engine/InputEvent.cs
@@ -16,14 +16,24 @@ namespace FlaxEngine
public string Name;
///
- /// Returns true if the event has been triggered during the current frame (e.g. user pressed a key). Use 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 , , to catch events without active waiting.
///
public bool Active => Input.GetAction(Name);
///
- /// 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.
///
- public event Action Triggered;
+ public event Action Pressed;
+
+ ///
+ /// Occurs when event is being pressing (e.g. user pressing a key). Called before scripts update.
+ ///
+ public event Action Pressing;
+
+ ///
+ /// Occurs when event is released (e.g. user releases a key). Called before scripts update.
+ ///
+ public event Action Released;
///
/// Initializes a new instance of the class.
@@ -51,10 +61,25 @@ namespace FlaxEngine
Input.ActionTriggered -= Handler;
}
- private void Handler(string name)
+ private void Handler(string name, InputActionState state)
{
- if (string.Equals(name, Name, StringComparison.OrdinalIgnoreCase))
- Triggered?.Invoke();
+ if (!string.Equals(name, Name, StringComparison.OrdinalIgnoreCase))
+ 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;
+ }
}
///
diff --git a/Source/Engine/Input/Input.cpp b/Source/Engine/Input/Input.cpp
index 81411ed76..af5600823 100644
--- a/Source/Engine/Input/Input.cpp
+++ b/Source/Engine/Input/Input.cpp
@@ -97,7 +97,7 @@ Action Input::MouseLeave;
Delegate Input::TouchDown;
Delegate Input::TouchMove;
Delegate Input::TouchUp;
-Delegate Input::ActionTriggered;
+Delegate Input::ActionTriggered;
Array Input::ActionMappings;
Array Input::AxisMappings;
@@ -1022,9 +1022,9 @@ void InputService::Update()
{
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);
}
}
}
diff --git a/Source/Engine/Input/Input.h b/Source/Engine/Input/Input.h
index 84d312fa3..5ff02eda9 100644
--- a/Source/Engine/Input/Input.h
+++ b/Source/Engine/Input/Input.h
@@ -293,7 +293,7 @@ public:
/// Event fired when virtual input action is triggered. Called before scripts update. See to edit configuration.
///
///
- API_EVENT() static Delegate ActionTriggered;
+ API_EVENT() static Delegate ActionTriggered;
///
/// Gets the value of the virtual action identified by name. Use to get the current config.