From dd13708e6ec7f7977ed6c1ae72125183e11e3135 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 4 May 2023 15:27:45 +0800 Subject: [PATCH] 1 --- server/gameserver/mapcollider.cc | 2 +- server/gameserver/mapcollider.h | 2 +- server/gameserver/mapinstance.cc | 11 ++++++----- server/gameserver/mapinstance.h | 4 ++-- server/gameserver/mt/Map.h | 2 +- server/gameserver/mt/MapCollider.cc | 14 +++++++------- server/gameserver/mt/MapCollider.h | 12 ++++++------ 7 files changed, 24 insertions(+), 23 deletions(-) diff --git a/server/gameserver/mapcollider.cc b/server/gameserver/mapcollider.cc index c50be614..9b928028 100644 --- a/server/gameserver/mapcollider.cc +++ b/server/gameserver/mapcollider.cc @@ -115,7 +115,7 @@ namespace mc { auto childs_arr = xobj->At("childs"); for (int i = 0; i < childs_arr->Size(); ++i) { - ColliderNode* node = new ColliderNode(); + std::shared_ptr node = std::make_shared(); node->parent = this; node->Read(childs_arr->At(i)); if (childs.find(node->name) != childs.end()) { diff --git a/server/gameserver/mapcollider.h b/server/gameserver/mapcollider.h index 699c8862..343b5724 100644 --- a/server/gameserver/mapcollider.h +++ b/server/gameserver/mapcollider.h @@ -101,7 +101,7 @@ namespace mc Bounds bounds; Transform transform; std::vector colliders; - std::map childs; + std::map> childs; void Read(std::shared_ptr xobj); }; diff --git a/server/gameserver/mapinstance.cc b/server/gameserver/mapinstance.cc index 824fdabf..8331bece 100644 --- a/server/gameserver/mapinstance.cc +++ b/server/gameserver/mapinstance.cc @@ -62,7 +62,8 @@ static float frand() return (float)rand()/(float)RAND_MAX; } -static void TraverseMapColliderNode(mc::ColliderNode* node, std::function cb) +static void TraverseMapColliderNode(std::shared_ptr node, + std::function)> cb) { for (auto& pair : node->childs) { cb(pair.second); @@ -774,7 +775,7 @@ bool MapInstance::PtInHouse(const glm::vec3& pt, glm::vec3& nearest_pt) void MapInstance::LoadHouse() { if (GetMapMeta()->collider_info) { - mc::ColliderNode* building_root = GetMapMeta()->collider_info->GetNode("building"); + std::shared_ptr building_root = GetMapMeta()->collider_info->GetNode("building"); if (building_root) { for (auto& pair : building_root->childs) { auto node = pair.second; @@ -849,7 +850,7 @@ void MapInstance::LoadHouse() //求三角形min_y max_y things_.reserve(1024 * 10); auto cb = - [this, box_tri_arr] (mc::ColliderNode* node) + [this, box_tri_arr] (std::shared_ptr node) { if (!node->colliders.empty()) { for (auto c : node->colliders) { @@ -858,7 +859,7 @@ void MapInstance::LoadHouse() mesh_collider->mesh.triangles.reserve(mesh_collider->mesh.raw_triangles.size() / 3); for (int i = 0; i < mesh_collider->mesh.raw_triangles.size(); i += 3) { auto& tri = a8::FastAppend(mesh_collider->mesh.triangles); - tri.node = node; + tri.node = node.get(); int v0 = mesh_collider->mesh.raw_triangles[i + 0]; int v1 = mesh_collider->mesh.raw_triangles[i + 1]; int v2 = mesh_collider->mesh.raw_triangles[i + 2]; @@ -905,7 +906,7 @@ void MapInstance::LoadHouse() box_collider->triangles.reserve(2 * 6); for (int i = 0; i < 12; ++i) { auto& tri = a8::FastAppend(box_collider->triangles); - tri.node = node; + tri.node = node.get(); tri.vert0 = new_points[box_tri_arr[i][0]]; tri.vert1 = new_points[box_tri_arr[i][1]]; tri.vert2 = new_points[box_tri_arr[i][2]]; diff --git a/server/gameserver/mapinstance.h b/server/gameserver/mapinstance.h index 9c83e468..cc38c8d7 100644 --- a/server/gameserver/mapinstance.h +++ b/server/gameserver/mapinstance.h @@ -12,7 +12,7 @@ namespace mc struct HouseInfo { - mc::ColliderNode* node = nullptr; + std::shared_ptr node; std::vector verts; }; @@ -77,7 +77,7 @@ class MapInstance : public std::enable_shared_from_this std::list houses_; - std::vector things_; + std::vector> things_; std::string map_tpl_name_; const mt::Map* map_meta_ = nullptr; diff --git a/server/gameserver/mt/Map.h b/server/gameserver/mt/Map.h index 6fd48606..90d44541 100644 --- a/server/gameserver/mt/Map.h +++ b/server/gameserver/mt/Map.h @@ -34,7 +34,7 @@ namespace mt std::map car_num_limit_; std::vector safearea_list; std::vector> _world_objects; - MapCollider* collider_info = nullptr; + std::shared_ptr collider_info; std::string RandTemplate() const; int GetCarLimit(int car_id) const; diff --git a/server/gameserver/mt/MapCollider.cc b/server/gameserver/mt/MapCollider.cc index 1c81ec72..be680553 100644 --- a/server/gameserver/mt/MapCollider.cc +++ b/server/gameserver/mt/MapCollider.cc @@ -9,13 +9,13 @@ #include "navmesh.pb.h" -std::vector mt::MapCollider::raw_list; -std::map mt::MapCollider::name_hash; +std::vector> mt::MapCollider::raw_list; +std::map> mt::MapCollider::name_hash; namespace mt { - MapCollider* MapCollider::GetByName(const std::string& name) + std::shared_ptr MapCollider::GetByName(const std::string& name) { auto itr = name_hash.find(name); return itr != name_hash.end() ? itr->second : nullptr; @@ -32,7 +32,7 @@ namespace mt "main3d_map.colliders.json" }; for (auto& filename : files) { - MapCollider* p = new MapCollider(); + std::shared_ptr p = std::make_shared(); p->Load(filename); p->LoadTerrain("map4_terrain.bin"); raw_list.push_back(p); @@ -47,7 +47,7 @@ namespace mt auto xobj_nodes = xobj_root.At("nodes"); for (int i = 0; i < xobj_nodes->Size(); ++i) { auto xobj_node = xobj_nodes->At(i); - mc::ColliderNode* node = new mc::ColliderNode(); + std::shared_ptr node = std::make_shared(); node->Read(xobj_node); if (nodes_.find(node->name) != nodes_.end()) { abort(); @@ -80,7 +80,7 @@ namespace mt abort(); } const std::string terrain_name = "_terrain_"; - mc::ColliderNode* node = new mc::ColliderNode(); + std::shared_ptr node = std::make_shared(); node->name = terrain_name; if (nodes_.find(node->name) != nodes_.end()) { abort(); @@ -127,7 +127,7 @@ namespace mt } } - mc::ColliderNode* MapCollider::GetNode(const std::string& name) + std::shared_ptr MapCollider::GetNode(const std::string& name) { auto itr = nodes_.find(name); return itr != nodes_.end() ? itr->second : nullptr; diff --git a/server/gameserver/mt/MapCollider.h b/server/gameserver/mt/MapCollider.h index ac99b15f..7d6e0fac 100644 --- a/server/gameserver/mt/MapCollider.h +++ b/server/gameserver/mt/MapCollider.h @@ -13,12 +13,12 @@ namespace mt class MapCollider { protected: - static std::vector raw_list; - static std::map name_hash; + static std::vector> raw_list; + static std::map> name_hash; public: - static MapCollider* GetByName(const std::string& name); + static std::shared_ptr GetByName(const std::string& name); static void StaticPostInit(); static void LoadAll(); @@ -28,11 +28,11 @@ namespace mt void Load(const std::string& filename); void LoadTerrain(const std::string& filename); void SaveToObjFile(const std::string& filename, const navmesh::vertex& vert_pb); - mc::ColliderNode* GetNode(const std::string& name); - std::map& GetNodes() { return nodes_; }; + std::shared_ptr GetNode(const std::string& name); + std::map>& GetNodes() { return nodes_; }; private: - std::map nodes_; + std::map> nodes_; }; }