This commit is contained in:
aozhiwei 2019-04-01 17:12:18 +08:00
parent dd19a2b402
commit 5fbbbd6bc1
5 changed files with 17 additions and 2 deletions

View File

@ -68,6 +68,6 @@ const int DEF_HELMET_ID = 12404;
const int DEF_CHEST_ID = 12401;
const int DEF_WEAPON_ID = 12103;
const int GAS_INACTIVE_TIME = 10;
const int GAS_INACTIVE_TIME = 1;
const int SERVER_FRAME_RATE = 20;
const int SYNC_FRAME_RATE = 10;

View File

@ -354,6 +354,7 @@ void Player::MakeUpdateMsg()
}
if (room->gas_data.gas_mode == GasMoving) {
update_msg->set_gas_progress(room->gas_data.gas_progress);
room->gas_data.pos_old.ToPB(update_msg->mutable_gas_pos_old());
}
update_msg->set_alive_count(room->AliveCount());

View File

@ -427,7 +427,7 @@ void Room::UpdateGas()
switch (gas_data.gas_mode) {
case GasInactive:
{
if (frame_no - gas_data.gas_start_frameno >= 30 * SERVER_FRAME_RATE) {
if (frame_no - gas_data.gas_start_frameno >= GAS_INACTIVE_TIME * SERVER_FRAME_RATE) {
gas_data.gas_mode = GasWaiting;
gas_data.old_area_meta = MetaMgr::Instance()->GetSafeArea(30001);
gas_data.new_area_meta = MetaMgr::Instance()->GetSafeArea(30002);
@ -435,6 +435,7 @@ void Room::UpdateGas()
gas_data.gas_start_frameno = frame_no;
gas_data.pos_old = Vector2D(map_meta->i->width() / 2.0f,
map_meta->i->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(),
@ -462,6 +463,16 @@ void Room::UpdateGas()
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 (!(gas_data.pos_new == gas_data.pos_old)) {
Vector2D p1 = gas_data.pos_old_bk - gas_data.pos_new;
if (std::abs(p1.Norm() - distance) <= 0.01f) {
gas_data.pos_old = gas_data.pos_new;
} else {
Vector2D dir = p1;
dir.Normalize();
gas_data.pos_old = gas_data.pos_old_bk + dir * distance;
}
}
if (std::abs(gas_data.gas_progress - gas_data.rad_new) <= 0.001f) {
int pre_area_id = gas_data.new_area_meta->i->id();
Vector2D pre_pos = gas_data.pos_new;
@ -475,6 +486,7 @@ void Room::UpdateGas()
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(),

View File

@ -50,6 +50,7 @@ struct GasData
{
GasMode_e gas_mode = GasInactive;
Vector2D pos_old;
Vector2D pos_old_bk;
Vector2D pos_new;
float rad_old = 0.0f;
float rad_new = 0.0f;

View File

@ -606,6 +606,7 @@ message SMUpdate
optional MFActivePlayerData active_player_data = 6; //()
optional int32 alive_count = 15; //
optional int32 gas_progress = 16; //,(gas_data.mode == moving时才会发进度)
optional MFVector2D gas_pos_old = 30; //
optional MFGasData gas_data = 17; //
repeated MFTeamData team_data = 18;
repeated MFTeammateInfo teams = 19; //