This commit is contained in:
aozhiwei 2021-04-14 16:07:27 +08:00
parent 4b3dc61c9c
commit 2b908fcba9
5 changed files with 50 additions and 19 deletions

View File

@ -80,6 +80,17 @@ namespace MetaData
abort();
}
}
first_safearea_center = a8::Vec2(i->map_width() / 2.0f,
i->map_height() / 2.0f);
if (!i->first_safearea_center().empty()) {
std::vector<std::string> strings;
a8::Split(i->first_safearea_center(), strings, ':');
if (strings.size() != 2) {
abort();
}
first_safearea_center = a8::Vec2(a8::XValue(strings[0]).GetDouble(),
a8::XValue(strings[1]).GetDouble());
}
if (i->player() < 10) {
abort();
}

View File

@ -28,6 +28,7 @@ namespace MetaData
int refresh_robot_min_time = 0;
int refresh_robot_max_time = 0;
std::vector<int> buff_list;
a8::Vec2 first_safearea_center;
void Init();
std::string RandTemplate();

View File

@ -1226,27 +1226,11 @@ void Room::UpdateGasMoving()
}
if (std::abs(gas_data_.gas_progress - gas_data_.rad_new) <= 0.001f) {
int pre_area_id = gas_data_.new_area_meta->i->id();
a8::Vec2 pre_pos = gas_data_.pos_new;
if (!MetaMgr::Instance()->GetSafeArea(pre_area_id + 1)) {
gas_data_.is_last_gas = true;
return;
}
gas_data_.gas_mode = GasWaiting;
gas_data_.old_area_meta = MetaMgr::Instance()->GetSafeArea(pre_area_id);
gas_data_.new_area_meta = MetaMgr::Instance()->GetSafeArea(pre_area_id + 1);
gas_data_.gas_progress = gas_data_.old_area_meta->i->rad();
gas_data_.gas_start_frameno = GetFrameNo();
gas_data_.pos_old = pre_pos;
gas_data_.pos_old_bk = gas_data_.pos_old;
{
bool gen_ok = GenSmallCircle(gas_data_.pos_old,
gas_data_.old_area_meta->i->rad(),
gas_data_.new_area_meta->i->rad(),
gas_data_.pos_new);
assert(gen_ok);
}
gas_data_.rad_old = gas_data_.old_area_meta->i->rad();
gas_data_.rad_new = gas_data_.new_area_meta->i->rad();
ForwardGasRing(1);
if (!MetaMgr::Instance()->GetSafeArea(gas_data_.new_area_meta->i->id() + 2)) {
#if 1
//最后一圈
@ -1291,8 +1275,7 @@ void Room::UpdateGasJump()
gas_data_.new_area_meta = MetaMgr::Instance()->GetSafeArea(map_meta_->i->safearea() + 1);
gas_data_.gas_progress = gas_data_.old_area_meta->i->rad();
gas_data_.gas_start_frameno = GetFrameNo();
gas_data_.pos_old = a8::Vec2(map_meta_->i->map_width() / 2.0f,
map_meta_->i->map_height() / 2.0f);
gas_data_.pos_old = map_meta_->first_safearea_center;
gas_data_.pos_old_bk = gas_data_.pos_old;
{
bool gen_ok = GenSmallCircle(gas_data_.pos_old,
@ -1303,6 +1286,9 @@ void Room::UpdateGasJump()
}
gas_data_.rad_old = gas_data_.old_area_meta->i->rad();
gas_data_.rad_new = gas_data_.new_area_meta->i->rad();
if (map_meta_->i->init_gas_ring() > 0) {
ForwardGasRing(map_meta_->i->init_gas_ring());
}
battle_start_frameno_ = GetFrameNo();
xtimer.DeleteTimer(auto_jump_timer_);
auto_jump_timer_ = nullptr;
@ -3649,3 +3635,33 @@ void Room::InitAndroidAI()
}
#endif
}
void Room::ForwardGasRing(int n)
{
while (n > 0) {
int pre_area_id = gas_data_.new_area_meta->i->id();
if (!MetaMgr::Instance()->GetSafeArea(pre_area_id + 1)) {
gas_data_.is_last_gas = true;
return;
}
a8::Vec2 pre_pos = gas_data_.pos_new;
gas_data_.old_area_meta = MetaMgr::Instance()->GetSafeArea(pre_area_id);
gas_data_.new_area_meta = MetaMgr::Instance()->GetSafeArea(pre_area_id + 1);
gas_data_.gas_progress = gas_data_.old_area_meta->i->rad();
gas_data_.gas_start_frameno = GetFrameNo();
gas_data_.pos_old = pre_pos;
gas_data_.pos_old_bk = gas_data_.pos_old;
{
bool gen_ok = GenSmallCircle(gas_data_.pos_old,
gas_data_.old_area_meta->i->rad(),
gas_data_.new_area_meta->i->rad(),
gas_data_.pos_new);
if (!gen_ok) {
abort();
}
}
gas_data_.rad_old = gas_data_.old_area_meta->i->rad();
gas_data_.rad_new = gas_data_.new_area_meta->i->rad();
--n;
}
}

View File

@ -248,6 +248,7 @@ private:
void ShuaLastGas();
size_t GetRoomMaxPlayerNum();
void InitAndroidAI();
void ForwardGasRing(int n);
#ifdef DEBUG
void InitDebugInfo();

View File

@ -34,6 +34,8 @@ message Map
optional int32 safearea = 11;
optional string game_start_buff_list = 12;
optional string map_pic = 13;
optional string first_safearea_center = 14;
optional int32 init_gas_ring = 15;
}
message MapThing