移除毒圈逻辑
This commit is contained in:
parent
e3b0b538d5
commit
b6f25065a1
@ -53,9 +53,7 @@ enum DoorState_e
|
||||
enum GasMode_e
|
||||
{
|
||||
GasInactive = 0,
|
||||
GasWaiting = 1,
|
||||
GasMoving = 2,
|
||||
GasJump = 3
|
||||
GasStarted = 1,
|
||||
};
|
||||
|
||||
enum ActionType_e
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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; //新圆心
|
||||
|
Loading…
x
Reference in New Issue
Block a user