Fix parting Input Settings if they have invalid data
This commit is contained in:
@@ -15,6 +15,7 @@
|
|||||||
#include "Engine/Scripting/ScriptingType.h"
|
#include "Engine/Scripting/ScriptingType.h"
|
||||||
#include "Engine/Scripting/BinaryModule.h"
|
#include "Engine/Scripting/BinaryModule.h"
|
||||||
#include "Engine/Profiler/ProfilerCPU.h"
|
#include "Engine/Profiler/ProfilerCPU.h"
|
||||||
|
#include "Engine/Serialization/JsonTools.h"
|
||||||
|
|
||||||
struct AxisEvaluation
|
struct AxisEvaluation
|
||||||
{
|
{
|
||||||
@@ -105,6 +106,69 @@ void InputSettings::Apply()
|
|||||||
Input::AxisMappings = AxisMappings;
|
Input::AxisMappings = AxisMappings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InputSettings::Deserialize(DeserializeStream& stream, ISerializeModifier* modifier)
|
||||||
|
{
|
||||||
|
const auto actionMappings = stream.FindMember("ActionMappings");
|
||||||
|
if (actionMappings != stream.MemberEnd())
|
||||||
|
{
|
||||||
|
auto& actionMappingsArray = actionMappings->value;
|
||||||
|
if (actionMappingsArray.IsArray())
|
||||||
|
{
|
||||||
|
ActionMappings.Resize(actionMappingsArray.Size(), false);
|
||||||
|
for (uint32 i = 0; i < actionMappingsArray.Size(); i++)
|
||||||
|
{
|
||||||
|
auto& v = actionMappingsArray[i];
|
||||||
|
if (!v.IsObject())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
ActionConfig& config = ActionMappings[i];
|
||||||
|
config.Name = JsonTools::GetString(v, "Name");
|
||||||
|
config.Mode = JsonTools::GetEnum(v, "Mode", InputActionMode::Pressing);
|
||||||
|
config.Key = JsonTools::GetEnum(v, "Key", KeyboardKeys::None);
|
||||||
|
config.MouseButton = JsonTools::GetEnum(v, "MouseButton", MouseButton::None);
|
||||||
|
config.GamepadButton = JsonTools::GetEnum(v, "GamepadButton", GamepadButton::None);
|
||||||
|
config.Gamepad = JsonTools::GetEnum(v, "Gamepad", InputGamepadIndex::All);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ActionMappings.Resize(0, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto axisMappings = stream.FindMember("AxisMappings");
|
||||||
|
if (axisMappings != stream.MemberEnd())
|
||||||
|
{
|
||||||
|
auto& axisMappingsArray = axisMappings->value;
|
||||||
|
if (axisMappingsArray.IsArray())
|
||||||
|
{
|
||||||
|
AxisMappings.Resize(axisMappingsArray.Size(), false);
|
||||||
|
for (uint32 i = 0; i < axisMappingsArray.Size(); i++)
|
||||||
|
{
|
||||||
|
auto& v = axisMappingsArray[i];
|
||||||
|
if (!v.IsObject())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
AxisConfig& config = AxisMappings[i];
|
||||||
|
config.Name = JsonTools::GetString(v, "Name");
|
||||||
|
config.Axis = JsonTools::GetEnum(v, "Axis", InputAxisType::MouseX);
|
||||||
|
config.Gamepad = JsonTools::GetEnum(v, "Gamepad", InputGamepadIndex::All);
|
||||||
|
config.PositiveButton = JsonTools::GetEnum(v, "PositiveButton", KeyboardKeys::None);
|
||||||
|
config.NegativeButton = JsonTools::GetEnum(v, "NegativeButton", KeyboardKeys::None);
|
||||||
|
config.DeadZone = JsonTools::GetFloat(v, "DeadZone", 0.1f);
|
||||||
|
config.Sensitivity = JsonTools::GetFloat(v, "Sensitivity", 0.4f);
|
||||||
|
config.Gravity = JsonTools::GetFloat(v, "Gravity", 1.0f);
|
||||||
|
config.Scale = JsonTools::GetFloat(v, "Scale", 1.0f);
|
||||||
|
config.Snap = JsonTools::GetBool(v, "Snap", false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AxisMappings.Resize(0, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Mouse::OnMouseMoved(const Vector2& newPosition)
|
void Mouse::OnMouseMoved(const Vector2& newPosition)
|
||||||
{
|
{
|
||||||
_prevState.MousePosition = newPosition;
|
_prevState.MousePosition = newPosition;
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "Engine/Core/Config/Settings.h"
|
#include "Engine/Core/Config/Settings.h"
|
||||||
#include "Engine/Serialization/JsonTools.h"
|
|
||||||
#include "VirtualInput.h"
|
#include "VirtualInput.h"
|
||||||
#include "Engine/Core/Collections/Array.h"
|
#include "Engine/Core/Collections/Array.h"
|
||||||
|
|
||||||
@@ -34,59 +33,5 @@ public:
|
|||||||
|
|
||||||
// [SettingsBase]
|
// [SettingsBase]
|
||||||
void Apply() override;
|
void Apply() override;
|
||||||
|
void Deserialize(DeserializeStream& stream, ISerializeModifier* modifier) final override;
|
||||||
void Deserialize(DeserializeStream& stream, ISerializeModifier* modifier) final override
|
|
||||||
{
|
|
||||||
const auto actionMappings = stream.FindMember("ActionMappings");
|
|
||||||
if (actionMappings != stream.MemberEnd())
|
|
||||||
{
|
|
||||||
auto& actionMappingsArray = actionMappings->value;
|
|
||||||
ASSERT(actionMappingsArray.IsArray());
|
|
||||||
ActionMappings.Resize(actionMappingsArray.Size(), false);
|
|
||||||
|
|
||||||
for (uint32 i = 0; i < actionMappingsArray.Size(); i++)
|
|
||||||
{
|
|
||||||
auto& v = actionMappingsArray[i];
|
|
||||||
if (!v.IsObject())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
ActionConfig& config = ActionMappings[i];
|
|
||||||
|
|
||||||
config.Name = JsonTools::GetString(v, "Name");
|
|
||||||
config.Mode = JsonTools::GetEnum(v, "Mode", InputActionMode::Pressing);
|
|
||||||
config.Key = JsonTools::GetEnum(v, "Key", KeyboardKeys::None);
|
|
||||||
config.MouseButton = JsonTools::GetEnum(v, "MouseButton", MouseButton::None);
|
|
||||||
config.GamepadButton = JsonTools::GetEnum(v, "GamepadButton", GamepadButton::None);
|
|
||||||
config.Gamepad = JsonTools::GetEnum(v, "Gamepad", InputGamepadIndex::All);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto axisMappings = stream.FindMember("AxisMappings");
|
|
||||||
if (axisMappings != stream.MemberEnd())
|
|
||||||
{
|
|
||||||
auto& axisMappingsArray = axisMappings->value;
|
|
||||||
ASSERT(axisMappingsArray.IsArray());
|
|
||||||
AxisMappings.Resize(axisMappingsArray.Size(), false);
|
|
||||||
|
|
||||||
for (uint32 i = 0; i < axisMappingsArray.Size(); i++)
|
|
||||||
{
|
|
||||||
auto& v = axisMappingsArray[i];
|
|
||||||
if (!v.IsObject())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
AxisConfig& config = AxisMappings[i];
|
|
||||||
|
|
||||||
config.Name = JsonTools::GetString(v, "Name");
|
|
||||||
config.Axis = JsonTools::GetEnum(v, "Axis", InputAxisType::MouseX);
|
|
||||||
config.Gamepad = JsonTools::GetEnum(v, "Gamepad", InputGamepadIndex::All);
|
|
||||||
config.PositiveButton = JsonTools::GetEnum(v, "PositiveButton", KeyboardKeys::None);
|
|
||||||
config.NegativeButton = JsonTools::GetEnum(v, "NegativeButton", KeyboardKeys::None);
|
|
||||||
config.DeadZone = JsonTools::GetFloat(v, "DeadZone", 0.1f);
|
|
||||||
config.Sensitivity = JsonTools::GetFloat(v, "Sensitivity", 0.4f);
|
|
||||||
config.Gravity = JsonTools::GetFloat(v, "Gravity", 1.0f);
|
|
||||||
config.Scale = JsonTools::GetFloat(v, "Scale", 1.0f);
|
|
||||||
config.Snap = JsonTools::GetBool(v, "Snap", false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user