Files
Nuake-custom/Nuake/src/Scene/Components/CharacterControllerComponent.h

85 lines
1.9 KiB
C++

#pragma once
#include "src/Core/Physics/CharacterController.h"
namespace Nuake
{
class CharacterControllerComponent
{
private:
Ref<Physics::CharacterController> m_CharacterController;
public:
// Auto stepping settings
bool AutoStepping = false;
Vector3 StickToFloorStepDown = Vector3(0.f, -0.5f, 0.f);
Vector3 StepDownExtra = Vector3(0, 0, 0); // ??
Vector3 SteppingStepUp = Vector3(0.f, 0.4f, 0.f);
float SteppingMinDistance = 0.125f;
float SteppingForwardDistance = 0.250f;
float Friction = 0.5f;
float MaxSlopeAngle = 45.0f;
float MaxStrength = 1.0f;
CharacterControllerComponent()
{
}
void SetCharacterController(const Ref<Physics::CharacterController>& charController)
{
m_CharacterController = charController;
}
Ref<Physics::CharacterController> GetCharacterController() const
{
return m_CharacterController;
}
json Serialize()
{
BEGIN_SERIALIZE();
SERIALIZE_VAL(AutoStepping);
SERIALIZE_VEC3(StickToFloorStepDown);
SERIALIZE_VEC3(StepDownExtra);
SERIALIZE_VEC3(SteppingStepUp);
SERIALIZE_VAL(SteppingMinDistance);
SERIALIZE_VAL(SteppingForwardDistance);
SERIALIZE_VAL(Friction);
SERIALIZE_VAL(MaxSlopeAngle);
SERIALIZE_VAL(MaxStrength);
END_SERIALIZE();
}
bool Deserialize(const json& j)
{
DESERIALIZE_VAL(AutoStepping);
DESERIALIZE_VAL(Friction);
DESERIALIZE_VAL(MaxSlopeAngle);
if (j.contains("StickToFloorStepDown"))
{
DESERIALIZE_VEC3(j["StickToFloorStepDown"], StickToFloorStepDown);
}
if (j.contains("StepDownExtra"))
{
DESERIALIZE_VEC3(j["StepDownExtra"], StepDownExtra);
}
if (j.contains("SteppingStepUp"))
{
DESERIALIZE_VEC3(j["SteppingStepUp"], SteppingStepUp);
}
DESERIALIZE_VAL(SteppingMinDistance);
DESERIALIZE_VAL(SteppingForwardDistance);
DESERIALIZE_VAL(Friction);
DESERIALIZE_VAL(MaxSlopeAngle);
DESERIALIZE_VAL(MaxStrength);
return true;
}
};
}