#pragma once #include "src/Core/Physics/CharacterController.h" namespace Nuake { class CharacterControllerComponent { private: Ref 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& charController) { m_CharacterController = charController; } Ref 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; } }; }