#pragma once #include #include namespace mc { enum ColliderType_e { kNoneCollider = 0, kBoxCollider = 1, kMeshCollider = 2 }; struct Bounds { glm::vec3 center = glm::vec3(0.0f, 0.0f, 0.0f); glm::vec3 size = glm::vec3(0.0f, 0.0f, 0.0f); }; struct Transform { glm::vec3 local_position = glm::vec3(0.0f, 0.0f, 0.0f); glm::quat local_rotation = glm::quat(0.0f, 0.0f, 0.0f, 0.0f); glm::vec3 local_scale = glm::vec3(0.0f, 0.0f, 0.0f); void Read(std::shared_ptr xobj); }; struct Mesh { std::vector vertices; std::vector triangles; Bounds bounds; }; struct Collider { int type = kNoneCollider; bool enabled = false; bool is_trigge = false; Bounds bounds; virtual void Read(std::shared_ptr xobj); }; struct MeshCollider : public Collider { Mesh mesh; virtual void Read(std::shared_ptr xobj) override; }; struct BoxCollider : public Collider { glm::vec3 center = glm::vec3(0.0f, 0.0f, 0.0f); glm::vec3 size = glm::vec3(0.0f, 0.0f, 0.0f); virtual void Read(std::shared_ptr xobj) override; }; struct ColliderNode { ColliderNode* parent = nullptr; std::string name; Transform transform; std::vector colliders; std::map childs; void Read(std::shared_ptr xobj); }; };