From 8451dfd4c124bdd07b59bd565a57e4ccbdf6345a Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Sat, 4 Nov 2023 08:51:03 +0800 Subject: [PATCH] 1 --- server/gameserver/mapcollider.cc | 6 +++--- server/gameserver/mapcollider.h | 4 ++-- server/gameserver/mapinstance.cc | 15 ++++++++------- 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, 29 insertions(+), 28 deletions(-) diff --git a/server/gameserver/mapcollider.cc b/server/gameserver/mapcollider.cc index c50be614..f394f21b 100644 --- a/server/gameserver/mapcollider.cc +++ b/server/gameserver/mapcollider.cc @@ -90,7 +90,7 @@ namespace mc switch (collider_union_xobj->At("type")->AsXValue().GetInt()) { case kBoxCollider: { - Collider* c = new BoxCollider(); + auto c = std::make_shared(); c->type = kBoxCollider; c->Read(collider_union_xobj->At("box")); colliders.push_back(c); @@ -98,7 +98,7 @@ namespace mc break; case kMeshCollider: { - Collider* c = new MeshCollider(); + auto c = std::make_shared(); c->type = kMeshCollider; c->Read(collider_union_xobj->At("mesh")); colliders.push_back(c); @@ -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(); + auto 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..690dba28 100644 --- a/server/gameserver/mapcollider.h +++ b/server/gameserver/mapcollider.h @@ -100,8 +100,8 @@ namespace mc std::string name; Bounds bounds; Transform transform; - std::vector colliders; - std::map childs; + std::vector> colliders; + std::map> childs; void Read(std::shared_ptr xobj); }; diff --git a/server/gameserver/mapinstance.cc b/server/gameserver/mapinstance.cc index a1d682ec..b221fa82 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); @@ -820,7 +821,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; @@ -895,16 +896,16 @@ 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) { if (c->type == mc::kMeshCollider) { - mc::MeshCollider* mesh_collider = (mc::MeshCollider*)c; + mc::MeshCollider* mesh_collider = (mc::MeshCollider*)c.get(); 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]; @@ -928,7 +929,7 @@ void MapInstance::LoadHouse() map_service_->AddTriangle(&tri); }//end for i } else if (c->type == mc::kBoxCollider) { - mc::BoxCollider* box_collider = (mc::BoxCollider*)c; + mc::BoxCollider* box_collider = (mc::BoxCollider*)c.get(); #if 0 if (node->name == "Wall2_1 (18)") { printf("node->name %s %f,%f,%f %f,%f,%f\n", @@ -951,7 +952,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 1cc63223..02911a8c 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; }; @@ -82,7 +82,7 @@ class MapInstance : public std::enable_shared_from_this std::list houses_; - std::vector things_; + std::vector> things_; std::set connectable_polys_; std::string map_tpl_name_; diff --git a/server/gameserver/mt/Map.h b/server/gameserver/mt/Map.h index 776a0ae9..9b5a54fe 100644 --- a/server/gameserver/mt/Map.h +++ b/server/gameserver/mt/Map.h @@ -35,7 +35,7 @@ namespace mt std::vector safearea_list; std::vector> _world_objects; std::map>> _group_world_objects; - MapCollider* collider_info = nullptr; + std::shared_ptr collider_info = nullptr; std::vector, int>> moba_born_points; std::vector, int>>> moba_path_points; diff --git a/server/gameserver/mt/MapCollider.cc b/server/gameserver/mt/MapCollider.cc index 8a36d7c9..ebbd8646 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; @@ -49,7 +49,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(); + auto node = std::make_shared(); node->Read(xobj_node); if (nodes_.find(node->name) != nodes_.end()) { abort(); @@ -82,13 +82,13 @@ namespace mt abort(); } const std::string terrain_name = "_terrain_"; - mc::ColliderNode* node = new mc::ColliderNode(); + auto node = std::make_shared(); node->name = terrain_name; if (nodes_.find(node->name) != nodes_.end()) { abort(); } { - mc::MeshCollider* mesh = new mc::MeshCollider(); + auto mesh = std::make_shared(); mesh->type = mc::kMeshCollider; mesh->ca_type = mc::kCA_Surface; mesh->mesh.vertices.reserve(verts_pb.vectors().size()); @@ -129,7 +129,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_; }; }