1
This commit is contained in:
commit
49026a0478
@ -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;
|
||||
|
@ -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());
|
||||
|
||||
|
@ -427,14 +427,15 @@ 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);
|
||||
gas_data.gas_progress = 0.0f;
|
||||
gas_data.gas_progress = gas_data.old_area_meta->i->rad();
|
||||
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(),
|
||||
@ -452,7 +453,6 @@ void Room::UpdateGas()
|
||||
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_progress = 0.0f;
|
||||
gas_data.gas_start_frameno = frame_no;;
|
||||
}
|
||||
}
|
||||
@ -460,12 +460,20 @@ void Room::UpdateGas()
|
||||
case GasMoving:
|
||||
{
|
||||
if (frame_no - gas_data.gas_start_frameno > 0 && !gas_data.is_last_gas) {
|
||||
float total_distance = gas_data.rad_old - gas_data.rad_new +
|
||||
(gas_data.pos_old - gas_data.pos_new).Norm();
|
||||
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::min(distance, total_distance);
|
||||
if (std::abs(total_distance-distance) >= 0.001f) {
|
||||
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_new - gas_data.pos_old_bk;
|
||||
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;
|
||||
if (!MetaMgr::Instance()->GetSafeArea(pre_area_id + 1)) {
|
||||
@ -475,9 +483,10 @@ void Room::UpdateGas()
|
||||
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 = 0.0f;
|
||||
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(),
|
||||
@ -493,7 +502,9 @@ void Room::UpdateGas()
|
||||
break;
|
||||
}
|
||||
if (gas_data.gas_mode == GasInactive) {
|
||||
for (auto& pair : human_hash_) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -506,6 +517,9 @@ bool Room::GenSmallCircle(Vector2D big_circle_pos, float big_circle_rad, float s
|
||||
Vector2D dir = Vector2D::UP;
|
||||
dir.Rotate(a8::RandAngle());
|
||||
float rad = rand() % (int)(big_circle_rad - small_circle_rad);
|
||||
if (rad <= 0.001f){
|
||||
rad = 0.001f;
|
||||
}
|
||||
out_pos = big_circle_pos + dir * rad;
|
||||
return true;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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; //同队队友数据
|
||||
|
Loading…
x
Reference in New Issue
Block a user