1
This commit is contained in:
parent
23e3e21202
commit
44a313a007
@ -67,10 +67,10 @@ namespace mc
|
||||
{
|
||||
auto trig_xobj = xobj->At("mesh")->At("triangles");
|
||||
for (int i = 0; i < trig_xobj->Size(); ++i) {
|
||||
mesh.triangles.push_back(trig_xobj->At(i)->AsXValue().GetDouble());
|
||||
mesh.raw_triangles.push_back(trig_xobj->At(i)->AsXValue().GetDouble());
|
||||
}
|
||||
}
|
||||
if (mesh.triangles.size() % 3 != 0) {
|
||||
if (mesh.raw_triangles.size() % 3 != 0) {
|
||||
abort();
|
||||
}
|
||||
Bounds_Read(mesh.bounds, xobj->At("mesh")->At("bounds"));
|
||||
|
@ -30,6 +30,16 @@ namespace mc
|
||||
glm::vec3 size = glm::vec3(0.0f, 0.0f, 0.0f);
|
||||
};
|
||||
|
||||
struct Triangle
|
||||
{
|
||||
glm::vec3 vert0 = glm::vec3(0.0f, 0.0f, 0.0f);
|
||||
glm::vec3 vert1 = glm::vec3(0.0f, 0.0f, 0.0f);
|
||||
glm::vec3 vert2 = glm::vec3(0.0f, 0.0f, 0.0f);
|
||||
float min_y = 0.0f;
|
||||
float max_y = 0.0f;
|
||||
int check_flag = 0;
|
||||
};
|
||||
|
||||
struct Transform
|
||||
{
|
||||
glm::vec3 local_position = glm::vec3(0.0f, 0.0f, 0.0f);
|
||||
@ -38,10 +48,12 @@ namespace mc
|
||||
void Read(std::shared_ptr<a8::XObject> xobj);
|
||||
};
|
||||
|
||||
|
||||
struct Mesh
|
||||
{
|
||||
std::vector<glm::vec3> vertices;
|
||||
std::vector<int> triangles;
|
||||
std::vector<int> raw_triangles;
|
||||
//std::vector<Triangle> triangles;
|
||||
Bounds bounds;
|
||||
};
|
||||
|
||||
|
@ -57,6 +57,16 @@ static float frand()
|
||||
return (float)rand()/(float)RAND_MAX;
|
||||
}
|
||||
|
||||
static void TraverseMapColliderNode(mc::ColliderNode* node, std::function<void (mc::ColliderNode*)> cb)
|
||||
{
|
||||
for (auto& pair : node->childs) {
|
||||
cb(pair.second);
|
||||
if (!pair.second->childs.empty()) {
|
||||
TraverseMapColliderNode(pair.second, cb);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MapInstance::Init()
|
||||
{
|
||||
map_meta_ = mt::Map::GetById(map_id);
|
||||
@ -821,5 +831,15 @@ void MapInstance::LoadHouse()
|
||||
houses_.push_back(p);
|
||||
}
|
||||
}
|
||||
{
|
||||
for (auto& pair : GetMapMeta()->collider_info->GetNodes()) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool MapInstance::SceneRaycast(const glm::vec3& orig, const glm::vec3& dir, float max_distance, glm::vec3& hit_pos)
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -57,6 +57,7 @@ class MapInstance : public std::enable_shared_from_this<MapInstance>
|
||||
void CheckTerrain(Creature* c, int same_poly_flags, const std::vector<dtPolyRef>& spec_polys);
|
||||
void TraverseHouseList(std::function<void (HouseInfo*)> func);
|
||||
bool PtInHouse(const glm::vec3& pt, glm::vec3& nearest_pt);
|
||||
bool SceneRaycast(const glm::vec3& orig, const glm::vec3& dir, float max_distance, glm::vec3& hit_pos);
|
||||
|
||||
private:
|
||||
void CreateThings();
|
||||
@ -79,6 +80,8 @@ class MapInstance : public std::enable_shared_from_this<MapInstance>
|
||||
|
||||
std::list<HouseInfo> houses_;
|
||||
|
||||
std::vector<mc::ColliderNode*> things_;
|
||||
|
||||
std::string map_tpl_name_;
|
||||
const mt::Map* map_meta_ = nullptr;
|
||||
MapService* map_service_ = nullptr;
|
||||
|
@ -22,6 +22,7 @@ namespace mt
|
||||
|
||||
void Load(const std::string& filename);
|
||||
mc::ColliderNode* GetNode(const std::string& name);
|
||||
std::map<std::string, mc::ColliderNode*>& GetNodes() { return nodes_; };
|
||||
|
||||
private:
|
||||
std::map<std::string, mc::ColliderNode*> nodes_;
|
||||
|
Loading…
x
Reference in New Issue
Block a user