Files
Destrum/destrum/include/destrum/Components/Physics/Collider.h
T

50 lines
1.5 KiB
C++

#pragma once
#include <glm/glm.hpp>
#include <destrum/ObjectModel/Component.h>
#include <destrum/Physics/PhysicsTypes.h>
class Collider : public Component {
public:
explicit Collider(GameObject& owner)
: Component(owner) {}
~Collider() override = default;
void ImGuiInspector() override;
[[nodiscard]] virtual PhysicsShapeDesc BuildPhysicsShape() const = 0;
[[nodiscard]] bool IsTrigger() const { return m_IsTrigger; }
void SetTrigger(bool trigger) { m_IsTrigger = trigger; NotifyPhysicsChanged(); }
[[nodiscard]] const glm::vec3& GetCenterOffset() const { return m_CenterOffset; }
void SetCenterOffset(const glm::vec3& offset) { m_CenterOffset = offset; NotifyPhysicsChanged(); }
protected:
[[nodiscard]] nlohmann::json SerializeCollider() const {
return {
{"centerOffset", {m_CenterOffset.x, m_CenterOffset.y, m_CenterOffset.z}},
{"isTrigger", m_IsTrigger}
};
}
void DeserializeCollider(const nlohmann::json& data) {
if (data.contains("centerOffset")) {
const auto& offset = data.at("centerOffset");
m_CenterOffset = {
offset.at(0).get<float>(),
offset.at(1).get<float>(),
offset.at(2).get<float>()
};
}
if (data.contains("isTrigger")) {
m_IsTrigger = data.at("isTrigger").get<bool>();
}
}
bool m_IsTrigger{false};
glm::vec3 m_CenterOffset{0.0f};
};