移除毒圈逻辑

This commit is contained in:
aozhiwei 2019-06-29 13:37:55 +08:00
parent e3b0b538d5
commit b6f25065a1
6 changed files with 5 additions and 167 deletions

View File

@ -53,9 +53,7 @@ enum DoorState_e
enum GasMode_e
{
GasInactive = 0,
GasWaiting = 1,
GasMoving = 2,
GasJump = 3
GasStarted = 1,
};
enum ActionType_e

View File

@ -10,11 +10,6 @@ cs::SMUpdate* FrameMaker::MakeUpdateMsg(const Human* hum)
cs::SMUpdate* msg = new cs::SMUpdate;
{
Room* room = hum->room;
if (room->gas_data.gas_mode == GasJump) {
cs::MFPlane* p = msg->mutable_plane();
TypeConvert::ToPb(room->plane.start_point, p->mutable_start_point());
TypeConvert::ToPb(room->plane.end_point, p->mutable_end_point());
}
for (auto& itr : hum->new_objects) {
itr->FillMFObjectFull(msg->add_full_objects());
}
@ -70,11 +65,6 @@ cs::SMUpdate* FrameMaker::MakeUpdateMsg(const Human* hum)
if (room->frame_event.airdrops_.size() > 0) {
*msg->mutable_airdrop() = room->frame_event.airdrops_.Get(0);
}
if (room->gas_data.gas_mode == GasMoving) {
msg->set_gas_progress(room->gas_data.gas_progress);
TypeConvert::ToPb(room->gas_data.pos_old, msg->mutable_gas_pos_old());
}
msg->set_alive_count(room->AliveCount());
}
return msg;
}

View File

@ -1241,17 +1241,6 @@ void Human::FillMFGasData(cs::MFGasData* gas_data)
long long duration = MetaMgr::Instance()->gas_inactive_time * SERVER_FRAME_RATE -
(room->frame_no - room->gas_data.gas_start_frameno);
gas_data->set_duration(std::max(duration * 50, (long long)1000) / 1000);
} else if (room->gas_data.gas_mode == GasJump) {
gas_data->set_duration(0);
} else if (room->gas_data.gas_mode == GasMoving) {
if (room->gas_data.new_area_meta->i->shrink_speed() > 0.01f) {
long long duration = (room->gas_data.old_area_meta->i->rad() - room->gas_data.new_area_meta->i->rad()) /
room->gas_data.new_area_meta->i->shrink_speed();
++duration;
gas_data->set_duration(++duration);
} else {
gas_data->set_duration(0);
}
} else {
if (room->gas_data.old_area_meta->i->wait_time() <= 0) {
gas_data->set_duration(0);

View File

@ -233,7 +233,6 @@ void Player::UpdateUseItemIdx()
void Player::UpdateSpectate()
{
if (room->gas_data.gas_mode == GasInactive ||
room->gas_data.gas_mode == GasJump ||
a8::HasBitFlag(status, HS_Fly)) {
spectate = false;
return;
@ -339,7 +338,7 @@ void Player::Shot()
}
bullet_dir.Rotate(bullet_angle / 180.0f);
room->frame_event.AddBullet(this, bullet_born_pos, bullet_dir, fly_distance);
if (room->BattleStarted() || room->gas_data.gas_mode == GasJump && !a8::HasBitFlag(status, HS_Jump)) {
if (room->BattleStarted()) {
room->CreateBullet(this, curr_weapon, bullet_born_pos, bullet_dir, fly_distance);
}
}

View File

@ -781,14 +781,9 @@ void Room::UpdateGas()
switch (gas_data.gas_mode) {
case GasInactive:
{
#if 0
if (frame_no - gas_data.gas_start_frameno >=
3 * SERVER_FRAME_RATE) {
#else
if (frame_no - gas_data.gas_start_frameno >=
MetaMgr::Instance()->gas_inactive_time * SERVER_FRAME_RATE) {
#endif
gas_data.gas_mode = GasJump;
gas_data.gas_mode = GasStarted;
gas_data.gas_start_frameno = frame_no;
if (human_hash_.size() < ROOM_MAX_PLAYER_NUM) {
CreateAndroid(ROOM_MAX_PLAYER_NUM - human_hash_.size());
@ -825,137 +820,6 @@ void Room::UpdateGas()
}
}
break;
case GasJump:
{
a8::Vec2 len_vec = plane.dir *
((frame_no - gas_data.gas_start_frameno)*airline_->i->plane_speed() / SERVER_FRAME_RATE);
plane.curr_pos = plane.start_point + len_vec;
if ((plane.end_point - plane.start_point).Norm() <= len_vec.Norm()) {
TouchHumanList(
a8::XParams(),
[] (Human* hum, a8::XParams& param) -> bool
{
if (a8::HasBitFlag(hum->status, HS_Fly)) {
hum->DoJump();
}
if (hum->entity_subtype == EST_Player) {
GameLog::Instance()->GameStart((Player*)hum);
}
return true;
});
gas_data.gas_mode = GasWaiting;
gas_data.old_area_meta = MetaMgr::Instance()->GetSafeArea(30001);
gas_data.new_area_meta = MetaMgr::Instance()->GetSafeArea(30002);
gas_data.gas_progress = gas_data.old_area_meta->i->rad();
gas_data.gas_start_frameno = frame_no;
gas_data.pos_old = a8::Vec2(MAP_WIDTH / 2.0f,
MAP_HEIGHT / 2.0f);
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();
battle_start_frameno_ = frame_no;
xtimer.DeleteTimer(auto_jump_timer_);
auto_jump_timer_ = nullptr;
}
}
break;
case GasWaiting:
{
if (frame_no - gas_data.gas_start_frameno >=
gas_data.old_area_meta->i->wait_time() * SERVER_FRAME_RATE) {
gas_data.gas_mode = GasMoving;
gas_data.gas_start_frameno = frame_no;;
}
}
break;
case GasMoving:
{
if (frame_no - gas_data.gas_start_frameno > 0 && !gas_data.is_last_gas) {
float distance = gas_data.old_area_meta->i->shrink_speed() *
((frame_no - gas_data.gas_start_frameno) * (1.0 / SERVER_FRAME_RATE));
gas_data.gas_progress = std::max(gas_data.rad_old - distance, gas_data.rad_new);
#if 0
{
#else
if (!(gas_data.pos_new == gas_data.pos_old)) {
#endif
a8::Vec2 p1 = gas_data.pos_new - gas_data.pos_old_bk;
gas_data.pre_pos_old = gas_data.pos_old;
if (p1.Norm() - distance <= 0.01f) {
gas_data.pos_old = gas_data.pos_new;
} else {
a8::Vec2 dir = p1;
dir.Normalize();
gas_data.pos_old = gas_data.pos_old_bk + dir * distance;
}
if (gas_data.rad_old - distance <= gas_data.rad_new) {
#if 0
assert(gas_data.pos_new == gas_data.pos_old);
#endif
}
}
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 = frame_no;
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();
}
}
}
break;
}
if (gas_data.gas_mode != GasInactive && gas_data.gas_mode != GasJump) {
if (!game_over && alive_count_ <= 1) {
game_over = true;
game_over_frameno = frame_no;
OnGameOver();
}
for (auto& pair : human_hash_) {
if (pair.second->dead) {
continue;
}
bool b1 = a8::CircleContainCircle(gas_data.pos_old,
gas_data.gas_progress,
pair.second->pos,
pair.second->GetRadius()
);
bool b2 = a8::CircleContainCircle(gas_data.pos_new,
gas_data.rad_new,
pair.second->pos,
pair.second->GetRadius()
);
if (!b1 && !b2) {
pair.second->poisoning = true;
} else {
pair.second->poisoning = false;
pair.second->poisoning_time = false;
}
}
}
}

View File

@ -422,11 +422,9 @@ message MFGasData
{
/*
0:
3
1:
2:
1:
*/
optional int32 mode = 1; //0:inactive 1:waiting 2:moving 3:jump
optional int32 mode = 1; //0:inactive 1:started
optional float duration = 2; //()
optional MFVector2D pos_old = 3; //
optional MFVector2D pos_new = 4; //