diff --git a/server/gameserver/mapinstance.cc b/server/gameserver/mapinstance.cc index a7e3e30e..6f230cd4 100644 --- a/server/gameserver/mapinstance.cc +++ b/server/gameserver/mapinstance.cc @@ -20,6 +20,7 @@ #include "mt/Param.h" #include "mt/Map.h" #include "mt/MapArea.h" +#include "mt/MapCollider.h" #include "roommgr.h" diff --git a/server/gameserver/mt/MapCollider.h b/server/gameserver/mt/MapCollider.h new file mode 100644 index 00000000..e841ef39 --- /dev/null +++ b/server/gameserver/mt/MapCollider.h @@ -0,0 +1,60 @@ +#pragma once + +#include +#include + +namespace mt +{ + 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); + }; + + struct Mesh + { + std::vector vertices; + std::vector triangles; + Bounds bounds; + }; + + struct Collider + { + bool enabled = false; + bool is_trigge = false; + Bounds bounds; + }; + + struct MeshCollider : public Collider + { + Mesh mesh; + }; + + 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); + }; + + struct ColliderNode + { + ColliderNode* parent = nullptr; + std::string name; + std::vector colliders; + std::map childs; + }; + + class MapCollider + { + private: + std::map nodes; + }; + +}