diff --git a/server/gameserver/mapinstance.cc b/server/gameserver/mapinstance.cc index 86ac1ba..ed46cc4 100644 --- a/server/gameserver/mapinstance.cc +++ b/server/gameserver/mapinstance.cc @@ -35,10 +35,11 @@ void MapInstance::Init() MAP_GRID_WIDTH); CreateThings(); a8::UdpLog::Instance()->Info - ("current_uniid:%d loots:%d mini_room_spawn_points:%d normal_room_spawn_points:%d " + ("map_id:%d current_uniid:%d loots:%d mini_room_spawn_points:%d normal_room_spawn_points:%d " "building_num:%d obstalce_num:%d obstacle0_num:%d " "obstacle1_num:%d obstacle2_num:%d", { + map_id, current_uniid_, loots_.size(), mini_room_spawn_points_.size(), @@ -62,6 +63,21 @@ void MapInstance::UnInit() A8_SAFE_DELETE(grid_service_); } +void MapInstance::AttachRoom(Room* room, RoomInitInfo& init_info) +{ + init_info.map_tpl_name = map_tpl_name_; + init_info.map_meta = map_meta_; + init_info.grid_service = grid_service_; + init_info.map_service = map_service_; + init_info.mini_room_spawn_points = &mini_room_spawn_points_; + init_info.normal_room_spawn_points = &normal_room_spawn_points_; + init_info.level0room_born_point_meta = level0room_born_point_; + init_info.level1room_born_point_meta = level1room_born_point_; + init_info.loots = &loots_; + init_info.buildings = &buildings_; + init_info.level0room_spec_things = &level0room_spec_things_; +} + void MapInstance::CreateThings() { map_tpl_name_ = map_meta_->RandTemplate(); diff --git a/server/gameserver/mapinstance.h b/server/gameserver/mapinstance.h index ddf4f88..257de9d 100644 --- a/server/gameserver/mapinstance.h +++ b/server/gameserver/mapinstance.h @@ -21,6 +21,8 @@ class MapInstance void Init(); void UnInit(); + void AttachRoom(Room* room, RoomInitInfo& init_info); + private: void CreateThings(); void CreateMapObject(MetaData::MapTplThing& thing_tpl); diff --git a/server/gameserver/mapmgr.cc b/server/gameserver/mapmgr.cc index b437da0..0e40afa 100644 --- a/server/gameserver/mapmgr.cc +++ b/server/gameserver/mapmgr.cc @@ -1,36 +1,39 @@ #include "precompile.h" -#include "mapservice.h" -#include "gridservice.h" -#include "building.h" -#include "obstacle.h" -#include "loot.h" #include "mapmgr.h" -#include "metamgr.h" #include "room.h" -#include "entityfactory.h" +#include "mapinstance.h" void MapMgr::Init() { + { + MapInstance* map_instance = new MapInstance(); + map_instance->map_id = 2001; + map_instance->Init(); + instance_hash_[map_instance->map_id] = map_instance; + } } void MapMgr::UnInit() { + for (auto& pair : instance_hash_) { + pair.second->UnInit(); + delete pair.second; + } + instance_hash_.clear(); } void MapMgr::AttachRoom(Room* room, RoomInitInfo& init_info) { - #if 0 - init_info.map_tpl_name = map_tpl_name_; - init_info.map_meta = map_meta_; - init_info.grid_service = grid_service_; - init_info.map_service = map_service_; - init_info.mini_room_spawn_points = &mini_room_spawn_points_; - init_info.normal_room_spawn_points = &normal_room_spawn_points_; - init_info.level0room_born_point_meta = level0room_born_point_; - init_info.level1room_born_point_meta = level1room_born_point_; - init_info.loots = &loots_; - init_info.buildings = &buildings_; - init_info.level0room_spec_things = &level0room_spec_things_; - #endif + MapInstance* map_instance = GetMapInstance(2001); + if (!map_instance) { + abort(); + } + map_instance->AttachRoom(room, init_info); +} + +MapInstance* MapMgr::GetMapInstance(int map_id) +{ + auto itr = instance_hash_.find(map_id); + return itr != instance_hash_.end() ? itr->second : nullptr; } diff --git a/server/gameserver/mapmgr.h b/server/gameserver/mapmgr.h index aea3ecd..c064490 100644 --- a/server/gameserver/mapmgr.h +++ b/server/gameserver/mapmgr.h @@ -4,16 +4,19 @@ class MapInstance; class Room; class MapMgr : public a8::Singleton { - private: +private: MapMgr() {}; friend class a8::Singleton; - public: +public: void Init(); void UnInit(); void AttachRoom(Room* room, RoomInitInfo& init_info); - private: +private: + MapInstance* GetMapInstance(int map_id); + +private: std::map instance_hash_; };