game2005/server/gameserver/mapinstance.h
aozhiwei 596e683113 1
2021-03-16 17:46:55 +08:00

60 lines
1.6 KiB
C++

#pragma once
namespace MetaData
{
struct Map;
struct MapTplThing;
}
class Entity;
class Obstacle;
class Building;
class MapService;
class GridService;
class Room;
class MapInstance
{
public:
int map_id = 0;
void Init();
void UnInit();
void AttachRoom(Room* room, RoomInitInfo& init_info);
MetaData::Map* GetMapMeta() { return map_meta_; }
private:
void CreateThings();
void CreateMapObject(MetaData::MapTplThing& thing_tpl);
void CreateBuilding(int thing_id, float building_x, float building_y);
Obstacle* InternalCreateObstacle(int id, float x, float y,
std::function<void (Obstacle*)> on_precreate);
Entity* GetEntityByUniId(int uniid);
int AllocUniid();
private:
int current_uniid_ = 0;
std::map<int, Entity*> uniid_hash_;
std::string map_tpl_name_;
MetaData::Map* map_meta_ = nullptr;
MapService* map_service_ = nullptr;
GridService* grid_service_ = nullptr;
std::vector<MetaData::MapTplThing*> mini_room_spawn_points_;
std::vector<MetaData::MapTplThing*> normal_room_spawn_points_;
std::vector<MetaData::MapTplThing*> mini_room_monster_spawn_points_;
std::vector<MetaData::MapTplThing*> normal_room_monster_spawn_points_;
MetaData::MapTplThing* level0room_born_point_ = nullptr;
MetaData::MapTplThing* level1room_born_point_ = nullptr;
std::vector<MetaData::MapTplThing*> loots_;
std::vector<Building*> buildings_;
std::vector<MetaData::MapTplThing*> level0room_spec_things_;
int building_num_ = 0;
int obstacle_num_ = 0;
int obstacle0_num_ = 0;
int obstacle1_num_ = 0;
int obstacle2_num_ = 0;
};