This commit is contained in:
aozhiwei 2023-02-09 10:55:27 +08:00
parent 23e3e21202
commit 44a313a007
5 changed files with 39 additions and 3 deletions

View File

@ -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"));

View File

@ -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;
};

View File

@ -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)
{
}

View File

@ -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;

View File

@ -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_;