From 3a1f732d386460b2892ba125fccb08cdc8b833b7 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 2 Sep 2020 13:50:42 +0800 Subject: [PATCH] 1 --- server/gameserver/mapservice.cc | 1 + server/gameserver/navmeshbuilder.cc | 58 ++++++++++++++++++++++++++ server/gameserver/navmeshbuilder.h | 1 + server/gameserver/navmeshhelper.cc | 6 +-- server/tools/protobuild/cs_proto.proto | 2 +- 5 files changed, 64 insertions(+), 4 deletions(-) diff --git a/server/gameserver/mapservice.cc b/server/gameserver/mapservice.cc index e8a9ab4..4ee2bde 100644 --- a/server/gameserver/mapservice.cc +++ b/server/gameserver/mapservice.cc @@ -532,3 +532,4 @@ void MapService::UpdateNavmesh(FindPathStatus* find_status) find_status->navmesh_search_state = kNavMesh_SearchFailed; } } + diff --git a/server/gameserver/navmeshbuilder.cc b/server/gameserver/navmeshbuilder.cc index 7392221..9d6e7b7 100644 --- a/server/gameserver/navmeshbuilder.cc +++ b/server/gameserver/navmeshbuilder.cc @@ -2,6 +2,8 @@ #include +#include + #include "navmeshbuilder.h" #include "mapinstance.h" #include "collider.h" @@ -40,6 +42,7 @@ void NavMeshBuilder::Build(MapInstance* map_instance) BuildMapObstalce(builder_params); #endif map_instance->navmesh_ = builder_params.navmesh; + Save(builder_params); } void NavMeshBuilder::InitBuilderParams(BuilderParams& builder_params) @@ -465,3 +468,58 @@ void NavMeshBuilder::BuildMapObstalce(BuilderParams& builder_params) } }//end for pair } + +void NavMeshBuilder::Save(BuilderParams& builder_params) +{ + FILE* fp = fopen("map.bin", "wb"); + if (!fp) { + abort(); + } + + static const int TILECACHESET_MAGIC = 'T'<<24 | 'S'<<16 | 'E'<<8 | 'T'; //'TSET'; + static const int TILECACHESET_VERSION = 1; + + struct TileCacheSetHeader + { + int magic; + int version; + int numTiles; + dtNavMeshParams meshParams; + dtTileCacheParams cacheParams; + }; + + struct TileCacheTileHeader + { + dtCompressedTileRef tileRef; + int dataSize; + }; + + TileCacheSetHeader header; + header.magic = TILECACHESET_MAGIC; + header.version = TILECACHESET_VERSION; + header.numTiles = 0; + for (int i = 0; i < builder_params.tile_cache->getTileCount(); ++i) { + const dtCompressedTile* tile = builder_params.tile_cache->getTile(i); + if (!tile || !tile->header || !tile->dataSize) continue; + header.numTiles++; + } + memcpy(&header.cacheParams, builder_params.tile_cache->getParams(), sizeof(dtTileCacheParams)); + memcpy(&header.meshParams, builder_params.navmesh->getParams(), sizeof(dtNavMeshParams)); + fwrite(&header, sizeof(TileCacheSetHeader), 1, fp); + + // Store tiles. + for (int i = 0; i < builder_params.tile_cache->getTileCount(); ++i) { + const dtCompressedTile* tile = builder_params.tile_cache->getTile(i); + if (!tile || !tile->header || !tile->dataSize) continue; + + TileCacheTileHeader tileHeader; + tileHeader.tileRef = builder_params.tile_cache->getTileRef(tile); + tileHeader.dataSize = tile->dataSize; + fwrite(&tileHeader, sizeof(tileHeader), 1, fp); + + fwrite(tile->data, tile->dataSize, 1, fp); + } + + fclose(fp); + a8::UdpLog::Instance()->Debug("Save OK", {}); +} diff --git a/server/gameserver/navmeshbuilder.h b/server/gameserver/navmeshbuilder.h index 500acad..ed2d894 100644 --- a/server/gameserver/navmeshbuilder.h +++ b/server/gameserver/navmeshbuilder.h @@ -33,4 +33,5 @@ public: bool CreateTileCache(BuilderParams& builder_params); bool CreateNavMesh(BuilderParams& builder_params); void BuildMapObstalce(BuilderParams& builder_params); + void Save(BuilderParams& builder_params); }; diff --git a/server/gameserver/navmeshhelper.cc b/server/gameserver/navmeshhelper.cc index 219fa2d..cb727f8 100644 --- a/server/gameserver/navmeshhelper.cc +++ b/server/gameserver/navmeshhelper.cc @@ -92,8 +92,8 @@ void NavMeshHelper::OutputObjFile(MapInstance* map_instance) faces.clear(); { a8::Vec2 vert; - vert.x = 0 - map_instance->map_meta_->i->map_width() / 2.0f; - vert.y = 0 - map_instance->map_meta_->i->map_height() / 2.0f; + //vert.x = 0 - map_instance->map_meta_->i->map_width() / 2.0f; + //vert.y = 0 - map_instance->map_meta_->i->map_height() / 2.0f; vertexs.push_back(vert); vert.y += map_instance->map_meta_->i->map_height(); @@ -126,7 +126,7 @@ void NavMeshHelper::OutputObjFile(MapInstance* map_instance) std::string data = a8::Format("v %f %f %f\r\n", { vert.x, - -10, + 0, vert.y, }); fwrite(data.data(), 1, data.size(), fp); diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 26d3cc9..ac43eb7 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -12,7 +12,7 @@ package cs; 网络包格式:msghead + msgbody msghead: packagelen + msgid + seqid + magiccode + reserved = 2 + 2 + 4 + 2 + 2 = 12字节 - msgbody: protobuf数据 +n msgbody: protobuf数据 msghead说明 packagelen(unsigned short): 双字节网络包长度, msgid(unsigned short): 双字节消息id