72 lines
1.6 KiB
C++
72 lines
1.6 KiB
C++
#pragma once
|
|
|
|
#include <glm/gtc/quaternion.hpp>
|
|
#include <glm/gtx/quaternion.hpp>
|
|
|
|
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<a8::XObject> xobj);
|
|
};
|
|
|
|
struct Mesh
|
|
{
|
|
std::vector<glm::vec3> vertices;
|
|
std::vector<int> triangles;
|
|
Bounds bounds;
|
|
};
|
|
|
|
struct Collider
|
|
{
|
|
int type = kNoneCollider;
|
|
bool enabled = false;
|
|
bool is_trigge = false;
|
|
Bounds bounds;
|
|
|
|
virtual void Read(std::shared_ptr<a8::XObject> xobj);
|
|
};
|
|
|
|
struct MeshCollider : public Collider
|
|
{
|
|
Mesh mesh;
|
|
virtual void Read(std::shared_ptr<a8::XObject> 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<a8::XObject> xobj) override;
|
|
};
|
|
|
|
struct ColliderNode
|
|
{
|
|
ColliderNode* parent = nullptr;
|
|
std::string name;
|
|
Transform transform;
|
|
std::vector<Collider*> colliders;
|
|
std::map<std::string, ColliderNode*> childs;
|
|
|
|
void Read(std::shared_ptr<a8::XObject> xobj);
|
|
};
|
|
|
|
};
|