添加毒圈新逻辑
This commit is contained in:
parent
2d78f7599b
commit
4e8430117f
@ -38,6 +38,13 @@ namespace MetaData
|
||||
airdrops.push_back(a8::XValue(str).GetInt());
|
||||
}
|
||||
}
|
||||
{
|
||||
std::vector<std::string> strings;
|
||||
a8::Split(i->safearea(), strings, '|');
|
||||
for (auto& str : strings) {
|
||||
safearea_list.push_back(a8::XValue(str).GetInt());
|
||||
}
|
||||
}
|
||||
{
|
||||
std::vector<std::string> strings;
|
||||
a8::Split(i->airraids(), strings, '|');
|
||||
@ -114,6 +121,7 @@ namespace MetaData
|
||||
|
||||
void Map::Init2()
|
||||
{
|
||||
#if 0
|
||||
std::vector<MetaData::SafeAreaPos*>* pos_list = MetaMgr::Instance()->GetSafeAreaPosList(i->safearea());
|
||||
MetaData::SafeArea* area_meta = MetaMgr::Instance()->GetSafeArea(i->safearea());
|
||||
if (area_meta && pos_list) {
|
||||
@ -148,6 +156,17 @@ namespace MetaData
|
||||
}//end for i
|
||||
}
|
||||
}
|
||||
#endif
|
||||
{
|
||||
if (safearea_list.empty()) {
|
||||
abort();
|
||||
}
|
||||
for (int area_type : safearea_list) {
|
||||
if (!MetaMgr::Instance()->GetSafeAreaByType(area_type)) {
|
||||
abort();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::string Map::RandTemplate()
|
||||
@ -176,6 +195,14 @@ namespace MetaData
|
||||
return center;
|
||||
}
|
||||
|
||||
int Map::RandSafeArea() const
|
||||
{
|
||||
if (safearea_list.empty()) {
|
||||
abort();
|
||||
}
|
||||
return safearea_list[rand() % safearea_list.size()];
|
||||
}
|
||||
|
||||
void MapThing::Init()
|
||||
{
|
||||
{
|
||||
|
@ -31,12 +31,14 @@ namespace MetaData
|
||||
std::vector<int> buff_list;
|
||||
a8::Vec2 first_safearea_center;
|
||||
std::map<int, int> car_num_limit;
|
||||
std::vector<int> safearea_list;
|
||||
|
||||
void Init();
|
||||
void Init2();
|
||||
std::string RandTemplate();
|
||||
int GetCarLimit(int car_id);
|
||||
a8::Vec2 GetCenter() const;
|
||||
int RandSafeArea() const;
|
||||
};
|
||||
|
||||
struct Attr
|
||||
|
@ -197,6 +197,7 @@ public:
|
||||
std::map<int, MetaData::AirDrop*> airdrop_hash;
|
||||
std::map<int, MetaData::AirRaid*> airraid_hash;
|
||||
std::map<int, MetaData::SafeArea*> safearea_hash;
|
||||
std::map<int, MetaData::SafeArea*> safearea_type_hash;
|
||||
std::map<int, std::vector<MetaData::SafeAreaPos*>> safearea_pos_hash;
|
||||
std::map<int, MetaData::Item*> item_hash;
|
||||
std::map<int, MetaData::Equip*> equip_hash;
|
||||
@ -692,6 +693,9 @@ private:
|
||||
meta.set_shrink_speed(500);
|
||||
}
|
||||
safearea_hash[item.i->id()] = &item;
|
||||
if (safearea_type_hash.find(item.i->type()) == safearea_type_hash.end()) {
|
||||
safearea_type_hash[item.i->type()] = &item;
|
||||
}
|
||||
}
|
||||
|
||||
for (auto& meta : safearea_pos_meta_list) {
|
||||
@ -1010,6 +1014,12 @@ MetaData::SafeArea* MetaMgr::GetSafeArea(int area_id)
|
||||
return itr != loader_->safearea_hash.end() ? itr->second : nullptr;
|
||||
}
|
||||
|
||||
MetaData::SafeArea* MetaMgr::GetSafeAreaByType(int area_type)
|
||||
{
|
||||
auto itr = loader_->safearea_type_hash.find(area_type);
|
||||
return itr != loader_->safearea_type_hash.end() ? itr->second : nullptr;
|
||||
}
|
||||
|
||||
MetaData::SafeAreaPos* MetaMgr::RandSafeAreaPos(int area_id)
|
||||
{
|
||||
std::vector<MetaData::SafeAreaPos*>* pos_list = GetSafeAreaPosList(area_id);
|
||||
|
@ -33,6 +33,7 @@ class MetaMgr : public a8::Singleton<MetaMgr>
|
||||
MetaData::Building* GetBuilding(int building_id);
|
||||
MetaData::Drop* GetDrop(int drop_id);
|
||||
MetaData::SafeArea* GetSafeArea(int area_id);
|
||||
MetaData::SafeArea* GetSafeAreaByType(int area_type);
|
||||
MetaData::SafeAreaPos* RandSafeAreaPos(int area_id);
|
||||
std::vector<MetaData::SafeAreaPos*>* GetSafeAreaPosList(int area_id);
|
||||
std::vector<MetaData::MapTplThing>* GetMapTplThing(const std::string& map_name);
|
||||
|
@ -1348,13 +1348,19 @@ void Room::UpdateGasJump()
|
||||
}
|
||||
return true;
|
||||
});
|
||||
MetaData::SafeArea* first_safearea = MetaMgr::Instance()->GetSafeAreaByType
|
||||
(map_meta_->RandSafeArea());
|
||||
gas_data_.gas_mode = GasWaiting;
|
||||
gas_data_.old_area_meta = MetaMgr::Instance()->GetSafeArea(map_meta_->i->safearea());
|
||||
gas_data_.new_area_meta = MetaMgr::Instance()->GetSafeArea(map_meta_->i->safearea() + 1);
|
||||
gas_data_.pos_list = MetaMgr::Instance()->RandSafeAreaPos(map_meta_->i->safearea());
|
||||
gas_data_.old_area_meta = first_safearea;
|
||||
gas_data_.new_area_meta = MetaMgr::Instance()->GetSafeArea(first_safearea->i->id() + 1);
|
||||
gas_data_.pos_list = MetaMgr::Instance()->RandSafeAreaPos(first_safearea->i->id());
|
||||
gas_data_.gas_progress = gas_data_.old_area_meta->i->rad();
|
||||
gas_data_.gas_start_frameno = GetFrameNo();
|
||||
#if 1
|
||||
gas_data_.pos_old = a8::Vec2(first_safearea->i->x1(), first_safearea->i->y1());
|
||||
#else
|
||||
gas_data_.pos_old = map_meta_->first_safearea_center;
|
||||
#endif
|
||||
gas_data_.pos_old_bk = gas_data_.pos_old;
|
||||
{
|
||||
if (gas_data_.pos_list && !gas_data_.pos_list->poses.empty()) {
|
||||
@ -1390,6 +1396,10 @@ bool Room::GenSmallCircle()
|
||||
if (gas_data_.pos_list && gas_data_.gas_count + 1 < gas_data_.pos_list->poses.size()) {
|
||||
gas_data_.pos_new = gas_data_.pos_list->poses[gas_data_.gas_count + 1];
|
||||
} else {
|
||||
#if 1
|
||||
gas_data_.pos_new = a8::Vec2(gas_data_.new_area_meta->i->x1(),
|
||||
gas_data_.new_area_meta->i->y1());
|
||||
#else
|
||||
a8::Vec2 dir = a8::Vec2::UP;
|
||||
dir.Rotate(a8::RandAngle());
|
||||
float rad = rand() % (int)(gas_data_.old_area_meta->i->rad() -
|
||||
@ -1398,6 +1408,7 @@ bool Room::GenSmallCircle()
|
||||
rad = 0.001f;
|
||||
}
|
||||
gas_data_.pos_new = gas_data_.pos_old + dir * rad;
|
||||
#endif
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ message Map
|
||||
optional int32 player = 8;
|
||||
optional string refresh_robot = 9;
|
||||
optional int32 map_mode = 10;
|
||||
optional int32 safearea = 11;
|
||||
optional string safearea = 11;
|
||||
optional string game_start_buff_list = 12;
|
||||
optional string map_pic = 13;
|
||||
optional string first_safearea_center = 14;
|
||||
@ -85,6 +85,9 @@ message SafeArea
|
||||
optional int32 wait_time = 4; //等待时间
|
||||
optional int32 shrink_speed = 5; //收缩速度
|
||||
optional int32 hurt = 6; //伤害/秒
|
||||
optional int32 type = 7;
|
||||
optional int32 x1 = 8;
|
||||
optional int32 y1 = 9;
|
||||
}
|
||||
|
||||
message SafeAreaPos
|
||||
|
Loading…
x
Reference in New Issue
Block a user