Merge branch 'input-helpers' of https://github.com/Tryibion/FlaxEngine into Tryibion-input-helpers
This commit is contained in:
@@ -614,6 +614,209 @@ float Input::GetAxisRaw(const StringView& name)
|
|||||||
return e ? e->ValueRaw : false;
|
return e ? e->ValueRaw : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Input::SetInputMappingFromSettings(const JsonAssetReference<InputSettings>& settings)
|
||||||
|
{
|
||||||
|
auto actionMappings = settings.GetInstance()->ActionMappings;
|
||||||
|
ActionMappings.Resize(actionMappings.Count(), false);
|
||||||
|
for (int i = 0; i < actionMappings.Count(); i++)
|
||||||
|
{
|
||||||
|
ActionMappings[i] = actionMappings.At(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
auto axisMappings = settings.GetInstance()->AxisMappings;
|
||||||
|
AxisMappings.Resize(axisMappings.Count(), false);
|
||||||
|
for (int i = 0; i < axisMappings.Count(); i++)
|
||||||
|
{
|
||||||
|
AxisMappings[i] = axisMappings.At(i);
|
||||||
|
}
|
||||||
|
Axes.Clear();
|
||||||
|
Actions.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Input::SetInputMappingToDefaultSettings()
|
||||||
|
{
|
||||||
|
InputSettings* settings = InputSettings::Get();
|
||||||
|
if (settings)
|
||||||
|
{
|
||||||
|
ActionMappings = settings->ActionMappings;
|
||||||
|
AxisMappings = settings->AxisMappings;
|
||||||
|
Axes.Clear();
|
||||||
|
Actions.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ActionConfig Input::GetActionConfigByName(const StringView& name)
|
||||||
|
{
|
||||||
|
ActionConfig config = {};
|
||||||
|
for (const auto& a : ActionMappings)
|
||||||
|
{
|
||||||
|
if (a.Name == name)
|
||||||
|
{
|
||||||
|
config = a;
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
Array<ActionConfig> Input::GetAllActionConfigsByName(const StringView& name)
|
||||||
|
{
|
||||||
|
Array<ActionConfig> actionConfigs;
|
||||||
|
for (const auto& a : ActionMappings)
|
||||||
|
{
|
||||||
|
if (a.Name == name)
|
||||||
|
actionConfigs.Add(a);
|
||||||
|
}
|
||||||
|
return actionConfigs;
|
||||||
|
}
|
||||||
|
|
||||||
|
AxisConfig Input::GetAxisConfigByName(const StringView& name)
|
||||||
|
{
|
||||||
|
AxisConfig config = {};
|
||||||
|
for (const auto& a : AxisMappings)
|
||||||
|
{
|
||||||
|
if (a.Name == name)
|
||||||
|
{
|
||||||
|
config = a;
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
Array<AxisConfig> Input::GetAllAxisConfigsByName(const StringView& name)
|
||||||
|
{
|
||||||
|
Array<AxisConfig> actionConfigs;
|
||||||
|
for (const auto& a : AxisMappings)
|
||||||
|
{
|
||||||
|
if (a.Name == name)
|
||||||
|
actionConfigs.Add(a);
|
||||||
|
}
|
||||||
|
return actionConfigs;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Input::SetAxisConfigByName(const StringView& name, AxisConfig& config, bool all)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < AxisMappings.Count(); ++i)
|
||||||
|
{
|
||||||
|
auto& mapping = AxisMappings.At(i);
|
||||||
|
if (mapping.Name.Compare(name.ToString()) == 0)
|
||||||
|
{
|
||||||
|
if (config.Name.IsEmpty())
|
||||||
|
config.Name = name;
|
||||||
|
mapping = config;
|
||||||
|
if (!all)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Input::SetAxisConfigByName(const StringView& name, InputAxisType inputType, const KeyboardKeys positiveButton, const KeyboardKeys negativeButton, bool all)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < AxisMappings.Count(); ++i)
|
||||||
|
{
|
||||||
|
auto& mapping = AxisMappings.At(i);
|
||||||
|
if (mapping.Name.Compare(name.ToString()) == 0 && mapping.Axis == inputType)
|
||||||
|
{
|
||||||
|
mapping.PositiveButton = positiveButton;
|
||||||
|
mapping.NegativeButton = negativeButton;
|
||||||
|
if (!all)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Input::SetAxisConfigByName(const StringView& name, InputAxisType inputType, const GamepadButton positiveButton, const GamepadButton negativeButton, InputGamepadIndex gamepadIndex, bool all)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < AxisMappings.Count(); ++i)
|
||||||
|
{
|
||||||
|
auto& mapping = AxisMappings.At(i);
|
||||||
|
if (mapping.Name.Compare(name.ToString()) == 0 && mapping.Gamepad == gamepadIndex && mapping.Axis == inputType)
|
||||||
|
{
|
||||||
|
mapping.GamepadPositiveButton = positiveButton;
|
||||||
|
mapping.GamepadNegativeButton = negativeButton;
|
||||||
|
if (!all)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Input::SetAxisConfigByName(const StringView& name, InputAxisType inputType, const float gravity, const float deadZone, const float sensitivity, const float scale, const bool snap, bool all)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < AxisMappings.Count(); ++i)
|
||||||
|
{
|
||||||
|
auto& mapping = AxisMappings.At(i);
|
||||||
|
if (mapping.Name.Compare(name.ToString()) == 0 && mapping.Axis == inputType)
|
||||||
|
{
|
||||||
|
mapping.Gravity = gravity;
|
||||||
|
mapping.DeadZone = deadZone;
|
||||||
|
mapping.Sensitivity = sensitivity;
|
||||||
|
mapping.Scale = scale;
|
||||||
|
mapping.Snap = snap;
|
||||||
|
if (!all)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Input::SetActionConfigByName(const StringView& name, const KeyboardKeys key, bool all)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < ActionMappings.Count(); ++i)
|
||||||
|
{
|
||||||
|
auto& mapping = ActionMappings.At(i);
|
||||||
|
if (mapping.Name.Compare(name.ToString()) == 0)
|
||||||
|
{
|
||||||
|
mapping.Key = key;
|
||||||
|
if (!all)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Input::SetActionConfigByName(const StringView& name, const MouseButton mouseButton, bool all)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < ActionMappings.Count(); ++i)
|
||||||
|
{
|
||||||
|
auto& mapping = ActionMappings.At(i);
|
||||||
|
if (mapping.Name.Compare(name.ToString()) == 0)
|
||||||
|
{
|
||||||
|
mapping.MouseButton = mouseButton;
|
||||||
|
if (!all)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Input::SetActionConfigByName(const StringView& name, const GamepadButton gamepadButton, InputGamepadIndex gamepadIndex, bool all)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < ActionMappings.Count(); ++i)
|
||||||
|
{
|
||||||
|
auto& mapping = ActionMappings.At(i);
|
||||||
|
if (mapping.Name.Compare(name.ToString()) == 0 && mapping.Gamepad == gamepadIndex)
|
||||||
|
{
|
||||||
|
mapping.GamepadButton = gamepadButton;
|
||||||
|
if (!all)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Input::SetActionConfigByName(const StringView& name, ActionConfig& config, bool all)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < ActionMappings.Count(); ++i)
|
||||||
|
{
|
||||||
|
auto& mapping = ActionMappings.At(i);
|
||||||
|
if (mapping.Name.Compare(name.ToString()) == 0)
|
||||||
|
{
|
||||||
|
if (config.Name.IsEmpty())
|
||||||
|
config.Name = name;
|
||||||
|
mapping = config;
|
||||||
|
if (!all)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void InputService::Update()
|
void InputService::Update()
|
||||||
{
|
{
|
||||||
PROFILE_CPU();
|
PROFILE_CPU();
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#include "KeyboardKeys.h"
|
#include "KeyboardKeys.h"
|
||||||
#include "Enums.h"
|
#include "Enums.h"
|
||||||
#include "VirtualInput.h"
|
#include "VirtualInput.h"
|
||||||
|
#include "Engine/Content/JsonAssetReference.h"
|
||||||
|
|
||||||
class Mouse;
|
class Mouse;
|
||||||
class Keyboard;
|
class Keyboard;
|
||||||
@@ -332,4 +333,118 @@ public:
|
|||||||
/// <returns>The current axis value (e.g for gamepads it's in the range -1..1). No smoothing applied.</returns>
|
/// <returns>The current axis value (e.g for gamepads it's in the range -1..1). No smoothing applied.</returns>
|
||||||
/// <seealso cref="AxisMappings"/>
|
/// <seealso cref="AxisMappings"/>
|
||||||
API_FUNCTION() static float GetAxisRaw(const StringView& name);
|
API_FUNCTION() static float GetAxisRaw(const StringView& name);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets and overwrites the Action and Axis mappings with the values from a new InputSettings.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="settings">The input settings.</param>
|
||||||
|
API_FUNCTION() static void SetInputMappingFromSettings(const JsonAssetReference<class InputSettings>& settings);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets and overwrites the Action and Axis mappings with the values from the InputSettings in GameSettings.
|
||||||
|
/// </summary>
|
||||||
|
API_FUNCTION() static void SetInputMappingToDefaultSettings();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the first action configuration by name.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name">The name of the action config.</param>
|
||||||
|
/// <returns>The first Action configuration with the name. Empty configuration if not found.</returns>
|
||||||
|
API_FUNCTION() static ActionConfig GetActionConfigByName(const StringView& name);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets all the action configurations by name.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name">The name of the action config.</param>
|
||||||
|
/// <returns>The Action configurations with the name.</returns>
|
||||||
|
API_FUNCTION() static Array<ActionConfig> GetAllActionConfigsByName(const StringView& name);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets the action configuration keyboard key by name.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name">The name of the action config.</param>
|
||||||
|
/// <param name="key">The key to set.</param>
|
||||||
|
/// <param name="all">Whether to set only the first config found or all of them.</param>
|
||||||
|
API_FUNCTION() static void SetActionConfigByName(const StringView& name, const KeyboardKeys key, bool all = false);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets the action configuration mouse button by name.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name">The name of the action config.</param>
|
||||||
|
/// <param name="mouseButton">The mouse button to set.</param>
|
||||||
|
/// <param name="all">Whether to set only the first config found or all of them.</param>
|
||||||
|
API_FUNCTION() static void SetActionConfigByName(const StringView& name, const MouseButton mouseButton, bool all = false);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets the action configuration gamepad button by name and index.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name">The name of the action config.</param>
|
||||||
|
/// <param name="gamepadButton">The gamepad button to set.</param>
|
||||||
|
/// <param name="gamepadIndex">The gamepad index used to find the correct config.</param>
|
||||||
|
/// <param name="all">Whether to set only the first config found or all of them.</param>
|
||||||
|
API_FUNCTION() static void SetActionConfigByName(const StringView& name, const GamepadButton gamepadButton, InputGamepadIndex gamepadIndex, bool all = false);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets the action configuration by name.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name">The name of the action config.</param>
|
||||||
|
/// <param name="config">The action configuration to set. Leave the config name empty to use set name.</param>
|
||||||
|
/// <param name="all">Whether to set only the first config found or all of them.</param>
|
||||||
|
API_FUNCTION() static void SetActionConfigByName(const StringView& name, ActionConfig& config, bool all = false);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the first axis configurations by name.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name">The name of the axis config.</param>
|
||||||
|
/// <returns>The first Axis configuration with the name. Empty configuration if not found.</returns>
|
||||||
|
API_FUNCTION() static AxisConfig GetAxisConfigByName(const StringView& name);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets all the axis configurations by name.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name">The name of the axis config.</param>
|
||||||
|
/// <returns>The axis configurations with the name.</returns>
|
||||||
|
API_FUNCTION() static Array<AxisConfig> GetAllAxisConfigsByName(const StringView& name);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets the axis configuration keyboard key by name and type.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name">The name of the action config.</param>
|
||||||
|
/// <param name="config">The configuration to set. Leave the config name empty to use set name.</param>
|
||||||
|
/// <param name="all">Whether to set only the first config found or all of them.</param>
|
||||||
|
API_FUNCTION() static void SetAxisConfigByName(const StringView& name, AxisConfig& config, bool all = false);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets the axis configuration keyboard key buttons by name and type.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name">The name of the action config.</param>
|
||||||
|
/// <param name="inputType">The type to sort by.</param>
|
||||||
|
/// <param name="positiveButton">The positive key button.</param>
|
||||||
|
/// <param name="negativeButton">The negative key button.</param>
|
||||||
|
/// <param name="all">Whether to set only the first config found or all of them.</param>
|
||||||
|
API_FUNCTION() static void SetAxisConfigByName(const StringView& name, InputAxisType inputType, const KeyboardKeys positiveButton, const KeyboardKeys negativeButton, bool all = false);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets the axis configuration gamepad buttons by name, type, and index.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name">The name of the action config.</param>
|
||||||
|
/// <param name="inputType">The type to sort by.</param>
|
||||||
|
/// <param name="positiveButton">The positive gamepad button.</param>
|
||||||
|
/// <param name="negativeButton">The negative gamepad button.</param>
|
||||||
|
/// <param name="gamepadIndex">The gamepad index to sort by.</param>
|
||||||
|
/// <param name="all">Whether to set only the first config found or all of them.</param>
|
||||||
|
API_FUNCTION() static void SetAxisConfigByName(const StringView& name, InputAxisType inputType, const GamepadButton positiveButton, const GamepadButton negativeButton, InputGamepadIndex gamepadIndex, bool all = false);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets the axis configuration accessories by name, and type.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name">The name of the action config.</param>
|
||||||
|
/// <param name="inputType">The type to sort by.</param>
|
||||||
|
/// <param name="gravity">The gravity to set.</param>
|
||||||
|
/// <param name="deadZone">The dead zone to set.</param>
|
||||||
|
/// <param name="sensitivity">The sensitivity to set.</param>
|
||||||
|
/// <param name="scale">The scale to set.</param>
|
||||||
|
/// <param name="snap">The snap to set.</param>
|
||||||
|
/// <param name="all">Whether to set only the first config found or all of them.</param>
|
||||||
|
API_FUNCTION() static void SetAxisConfigByName(const StringView& name, InputAxisType inputType, const float gravity, const float deadZone, const float sensitivity, const float scale, const bool snap, bool all = false);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user