room代码重构
This commit is contained in:
parent
1d5737cb12
commit
af44f89f9b
@ -103,7 +103,7 @@ void AndroidAI::ChangeToState(AndroidState_e to_state)
|
|||||||
void AndroidAI::DoMove()
|
void AndroidAI::DoMove()
|
||||||
{
|
{
|
||||||
Human* hum = (Human*)owner;
|
Human* hum = (Human*)owner;
|
||||||
if (hum->room->waiting_start) {
|
if (hum->room->IsWaitingStart()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (owner->UpdatedTimes() % 2 == 0) {
|
if (owner->UpdatedTimes() % 2 == 0) {
|
||||||
@ -132,10 +132,10 @@ void AndroidAI::DoMove()
|
|||||||
void AndroidAI::DoAttack()
|
void AndroidAI::DoAttack()
|
||||||
{
|
{
|
||||||
Human* hum = (Human*)owner;
|
Human* hum = (Human*)owner;
|
||||||
if (hum->room->waiting_start) {
|
if (hum->room->IsWaitingStart()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (hum->room->gas_data.gas_mode == GasInactive) {
|
if (hum->room->GetGasData().gas_mode == GasInactive) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (owner->UpdatedTimes() % 10 == 0) {
|
if (owner->UpdatedTimes() % 10 == 0) {
|
||||||
|
@ -189,9 +189,9 @@ cs::SMUpdate* FrameMaker::MakeUpdateMsg(const Human* hum)
|
|||||||
if (room->frame_event.airdrops_.size() > 0) {
|
if (room->frame_event.airdrops_.size() > 0) {
|
||||||
*msg->mutable_airdrop() = room->frame_event.airdrops_.Get(0);
|
*msg->mutable_airdrop() = room->frame_event.airdrops_.Get(0);
|
||||||
}
|
}
|
||||||
if (room->gas_data.gas_mode == GasMoving) {
|
if (room->GetGasData().gas_mode == GasMoving) {
|
||||||
msg->set_gas_progress(room->gas_data.gas_progress);
|
msg->set_gas_progress(room->GetGasData().gas_progress);
|
||||||
TypeConvert::ToPb(room->gas_data.pos_old, msg->mutable_gas_pos_old());
|
TypeConvert::ToPb(room->GetGasData().pos_old, msg->mutable_gas_pos_old());
|
||||||
}
|
}
|
||||||
msg->set_alive_count(room->AliveCount());
|
msg->set_alive_count(room->AliveCount());
|
||||||
}
|
}
|
||||||
|
@ -277,7 +277,7 @@ void Human::FillMFTeamData(cs::MFTeamData* team_data)
|
|||||||
#if 1
|
#if 1
|
||||||
{
|
{
|
||||||
#else
|
#else
|
||||||
if (room->gas_data.gas_mode == GasJump ||
|
if (room->GetGasData().gas_mode == GasJump ||
|
||||||
room->GetFrameNo() - last_sync_teamdata_frameno_ > SERVER_FRAME_RATE * 2) {
|
room->GetFrameNo() - last_sync_teamdata_frameno_ > SERVER_FRAME_RATE * 2) {
|
||||||
#endif
|
#endif
|
||||||
last_sync_teamdata_frameno_ = room->GetFrameNo();
|
last_sync_teamdata_frameno_ = room->GetFrameNo();
|
||||||
@ -477,7 +477,7 @@ bool Human::IsCollisionInMapService()
|
|||||||
if (!obstacle->IsDead(room) &&
|
if (!obstacle->IsDead(room) &&
|
||||||
obstacle->meta->i->attack_type() == 1 &&
|
obstacle->meta->i->attack_type() == 1 &&
|
||||||
obstacle->meta->i->drop() != 0 &&
|
obstacle->meta->i->drop() != 0 &&
|
||||||
room->gas_data.gas_mode != GasInactive
|
room->GetGasData().gas_mode != GasInactive
|
||||||
) {
|
) {
|
||||||
obstacle->Die(room);
|
obstacle->Die(room);
|
||||||
if (obstacle->IsDead(room)) {
|
if (obstacle->IsDead(room)) {
|
||||||
@ -644,10 +644,10 @@ void Human::UpdatePoisoning()
|
|||||||
}
|
}
|
||||||
bool need_notify = poisoning_time > 1000;
|
bool need_notify = poisoning_time > 1000;
|
||||||
while (poisoning_time > 1000) {
|
while (poisoning_time > 1000) {
|
||||||
if (room->gas_data.is_last_gas) {
|
if (room->GetGasData().is_last_gas) {
|
||||||
DecHP(room->gas_data.new_area_meta->i->hurt(), VP_SafeArea, "毒圈", VW_SafeArea);
|
DecHP(room->GetGasData().new_area_meta->i->hurt(), VP_SafeArea, "毒圈", VW_SafeArea);
|
||||||
} else {
|
} else {
|
||||||
DecHP(room->gas_data.old_area_meta->i->hurt(), VP_SafeArea, "毒圈", VW_SafeArea);
|
DecHP(room->GetGasData().old_area_meta->i->hurt(), VP_SafeArea, "毒圈", VW_SafeArea);
|
||||||
}
|
}
|
||||||
if (dead) {
|
if (dead) {
|
||||||
poisoning_time = 0;
|
poisoning_time = 0;
|
||||||
@ -697,8 +697,9 @@ void Human::SyncAroundPlayers(const char* file, int line, const char* func)
|
|||||||
#endif
|
#endif
|
||||||
assert(hum->part_objects.find(this) != hum->part_objects.end());
|
assert(hum->part_objects.find(this) != hum->part_objects.end());
|
||||||
if (hum->part_objects.find(this) == hum->part_objects.end()) {
|
if (hum->part_objects.find(this) == hum->part_objects.end()) {
|
||||||
if (a8::XGetTickCount() - room->last_debugout_tick > 1000 * 10) {
|
static long long last_debugout_tick = 0;
|
||||||
room->last_debugout_tick = a8::XGetTickCount();
|
if (a8::XGetTickCount() - last_debugout_tick > 1000 * 10) {
|
||||||
|
last_debugout_tick = a8::XGetTickCount();
|
||||||
a8::UdpLog::Instance()->Warning("SyncAroundPlayers error file:%s line:%d func:%s",
|
a8::UdpLog::Instance()->Warning("SyncAroundPlayers error file:%s line:%d func:%s",
|
||||||
{
|
{
|
||||||
file,
|
file,
|
||||||
@ -795,7 +796,7 @@ void Human::FillSMGameOver(cs::SMGameOver& msg)
|
|||||||
[&human_list] (Human* hum, a8::XParams& param) -> bool
|
[&human_list] (Human* hum, a8::XParams& param) -> bool
|
||||||
{
|
{
|
||||||
if (hum->leave_frameno_ == 0 ||
|
if (hum->leave_frameno_ == 0 ||
|
||||||
hum->leave_frameno_ > hum->room->battle_start_frameno_) {
|
hum->leave_frameno_ > hum->room->GetBattleStartFrameNo()) {
|
||||||
human_list.push_back(hum);
|
human_list.push_back(hum);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -839,7 +840,7 @@ void Human::FillSMGameOver(cs::SMGameOver& msg)
|
|||||||
msg.set_team_id(team_id);
|
msg.set_team_id(team_id);
|
||||||
msg.set_team_rank(stats.rank);
|
msg.set_team_rank(stats.rank);
|
||||||
msg.set_team_allcnt(1);
|
msg.set_team_allcnt(1);
|
||||||
msg.set_game_over(room->game_over);
|
msg.set_game_over(room->IsGameOver());
|
||||||
msg.set_victory(!dead);
|
msg.set_victory(!dead);
|
||||||
msg.set_room_uuid(a8::XValue(room->room_uuid));
|
msg.set_room_uuid(a8::XValue(room->room_uuid));
|
||||||
|
|
||||||
@ -852,7 +853,7 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id)
|
|||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
room->CheckPartObjects();
|
room->CheckPartObjects();
|
||||||
#endif
|
#endif
|
||||||
if (!dead && !room->game_over && !real_dead) {
|
if (!dead && !room->IsGameOver() && !real_dead) {
|
||||||
lethal_weapon = weapon_id;
|
lethal_weapon = weapon_id;
|
||||||
Entity* hum = room->GetEntityByUniId(killer_id);
|
Entity* hum = room->GetEntityByUniId(killer_id);
|
||||||
if (hum && hum->entity_type == ET_Player) {
|
if (hum && hum->entity_type == ET_Player) {
|
||||||
@ -1448,35 +1449,35 @@ void Human::FillMFActivePlayerData(cs::MFActivePlayerData* player_data)
|
|||||||
|
|
||||||
void Human::FillMFGasData(cs::MFGasData* gas_data)
|
void Human::FillMFGasData(cs::MFGasData* gas_data)
|
||||||
{
|
{
|
||||||
gas_data->set_mode(room->gas_data.gas_mode);
|
gas_data->set_mode(room->GetGasData().gas_mode);
|
||||||
if (room->gas_data.gas_mode == GasInactive) {
|
if (room->GetGasData().gas_mode == GasInactive) {
|
||||||
long long duration = room->GetGasInactiveTime() * SERVER_FRAME_RATE -
|
long long duration = room->GetGasInactiveTime() * SERVER_FRAME_RATE -
|
||||||
(room->GetFrameNo() - room->gas_data.gas_start_frameno);
|
(room->GetFrameNo() - room->GetGasData().gas_start_frameno);
|
||||||
gas_data->set_duration(std::max(duration * 50, (long long)1000) / 1000);
|
gas_data->set_duration(std::max(duration * 50, (long long)1000) / 1000);
|
||||||
} else if (room->gas_data.gas_mode == GasJump) {
|
} else if (room->GetGasData().gas_mode == GasJump) {
|
||||||
gas_data->set_duration(0);
|
gas_data->set_duration(0);
|
||||||
} else if (room->gas_data.gas_mode == GasMoving) {
|
} else if (room->GetGasData().gas_mode == GasMoving) {
|
||||||
if (room->gas_data.new_area_meta->i->shrink_speed() > 0.01f) {
|
if (room->GetGasData().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()) /
|
long long duration = (room->GetGasData().old_area_meta->i->rad() - room->GetGasData().new_area_meta->i->rad()) /
|
||||||
room->gas_data.new_area_meta->i->shrink_speed();
|
room->GetGasData().new_area_meta->i->shrink_speed();
|
||||||
++duration;
|
++duration;
|
||||||
gas_data->set_duration(++duration);
|
gas_data->set_duration(++duration);
|
||||||
} else {
|
} else {
|
||||||
gas_data->set_duration(0);
|
gas_data->set_duration(0);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (room->gas_data.old_area_meta->i->wait_time() <= 0) {
|
if (room->GetGasData().old_area_meta->i->wait_time() <= 0) {
|
||||||
gas_data->set_duration(0);
|
gas_data->set_duration(0);
|
||||||
} else {
|
} else {
|
||||||
long long duration = room->gas_data.old_area_meta->i->wait_time() * 20 -
|
long long duration = room->GetGasData().old_area_meta->i->wait_time() * 20 -
|
||||||
(room->GetFrameNo() - room->gas_data.gas_start_frameno);
|
(room->GetFrameNo() - room->GetGasData().gas_start_frameno);
|
||||||
gas_data->set_duration(std::max(duration * 50, (long long)1000) / 1000);
|
gas_data->set_duration(std::max(duration * 50, (long long)1000) / 1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TypeConvert::ToPb(room->gas_data.pos_old, gas_data->mutable_pos_old());
|
TypeConvert::ToPb(room->GetGasData().pos_old, gas_data->mutable_pos_old());
|
||||||
TypeConvert::ToPb(room->gas_data.pos_new, gas_data->mutable_pos_new());
|
TypeConvert::ToPb(room->GetGasData().pos_new, gas_data->mutable_pos_new());
|
||||||
gas_data->set_rad_old(room->gas_data.rad_old);
|
gas_data->set_rad_old(room->GetGasData().rad_old);
|
||||||
gas_data->set_rad_new(room->gas_data.rad_new);
|
gas_data->set_rad_new(room->GetGasData().rad_new);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Human::CanSee(const Human* hum) const
|
bool Human::CanSee(const Human* hum) const
|
||||||
@ -1603,8 +1604,8 @@ void Human::SendUpdateMsg()
|
|||||||
}
|
}
|
||||||
|
|
||||||
cs::SMUpdate* msg = room->frame_maker.MakeUpdateMsg(this);
|
cs::SMUpdate* msg = room->frame_maker.MakeUpdateMsg(this);
|
||||||
if (send_msg_times == 0 || last_sync_gas_frameno < room->gas_data.gas_start_frameno) {
|
if (send_msg_times == 0 || last_sync_gas_frameno < room->GetGasData().gas_start_frameno) {
|
||||||
last_sync_gas_frameno = room->gas_data.gas_start_frameno;
|
last_sync_gas_frameno = room->GetGasData().gas_start_frameno;
|
||||||
FillMFGasData(msg->mutable_gas_data());
|
FillMFGasData(msg->mutable_gas_data());
|
||||||
}
|
}
|
||||||
bool refreshed_view = false;
|
bool refreshed_view = false;
|
||||||
@ -2520,7 +2521,7 @@ void Human::ProcLootSkin(Loot* entity, MetaData::Equip* item_meta)
|
|||||||
|
|
||||||
void Human::ProcLootCar(Loot* entity, MetaData::Equip* item_meta)
|
void Human::ProcLootCar(Loot* entity, MetaData::Equip* item_meta)
|
||||||
{
|
{
|
||||||
if (room->gas_data.gas_mode == GasInactive) {
|
if (room->GetGasData().gas_mode == GasInactive) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (GetPos().Distance(entity->GetPos()) > MetaMgr::Instance()->max_mount_horse_distance) {
|
if (GetPos().Distance(entity->GetPos()) > MetaMgr::Instance()->max_mount_horse_distance) {
|
||||||
|
@ -119,7 +119,7 @@ void Player::UpdateMove()
|
|||||||
CancelAction();
|
CancelAction();
|
||||||
}
|
}
|
||||||
if (dead ||
|
if (dead ||
|
||||||
room->waiting_start) {
|
room->IsWaitingStart()) {
|
||||||
moving = false;
|
moving = false;
|
||||||
moved_frames = 0;
|
moved_frames = 0;
|
||||||
last_collision_door = nullptr;
|
last_collision_door = nullptr;
|
||||||
@ -156,7 +156,7 @@ void Player::UpdateShot()
|
|||||||
{
|
{
|
||||||
if (dead ||
|
if (dead ||
|
||||||
downed ||
|
downed ||
|
||||||
room->waiting_start) {
|
room->IsWaitingStart()) {
|
||||||
shot_start = false;
|
shot_start = false;
|
||||||
shot_hold = false;
|
shot_hold = false;
|
||||||
series_shot_frames = 0;
|
series_shot_frames = 0;
|
||||||
@ -293,8 +293,8 @@ void Player::UpdateUseItemId()
|
|||||||
|
|
||||||
void Player::UpdateSpectate()
|
void Player::UpdateSpectate()
|
||||||
{
|
{
|
||||||
if (room->gas_data.gas_mode == GasInactive ||
|
if (room->GetGasData().gas_mode == GasInactive ||
|
||||||
room->gas_data.gas_mode == GasJump) {
|
room->GetGasData().gas_mode == GasJump) {
|
||||||
spectate = false;
|
spectate = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -90,7 +90,7 @@ void Room::Update(int delta_time)
|
|||||||
run_in_timer_ = true;
|
run_in_timer_ = true;
|
||||||
#endif
|
#endif
|
||||||
xtimer.Update();
|
xtimer.Update();
|
||||||
if (game_over && GetFrameNo() - game_over_frameno > SERVER_FRAME_RATE * 20) {
|
if (IsGameOver() && GetFrameNo() - game_over_frameno_ > SERVER_FRAME_RATE * 20) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,7 +144,7 @@ int Room::AliveCount()
|
|||||||
|
|
||||||
void Room::AddPlayer(Player* hum)
|
void Room::AddPlayer(Player* hum)
|
||||||
{
|
{
|
||||||
assert(gas_data.gas_mode == GasInactive);
|
assert(gas_data_.gas_mode == GasInactive);
|
||||||
hum->born_point = AllocBornPoint(hum);
|
hum->born_point = AllocBornPoint(hum);
|
||||||
if (!hum->born_point) {
|
if (!hum->born_point) {
|
||||||
hum->SetPos(a8::Vec2(DEFAULT_BORN_POINT_X + rand() % 100,
|
hum->SetPos(a8::Vec2(DEFAULT_BORN_POINT_X + rand() % 100,
|
||||||
@ -257,7 +257,7 @@ int Room::AllocUniid()
|
|||||||
|
|
||||||
void Room::ShuaAndroid()
|
void Room::ShuaAndroid()
|
||||||
{
|
{
|
||||||
if (gas_data.gas_mode != GasInactive) {
|
if (gas_data_.gas_mode != GasInactive) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int robot_min_num = MetaMgr::Instance()->GetSysParamAsInt("refresh_robot_min_num", 5);
|
int robot_min_num = MetaMgr::Instance()->GetSysParamAsInt("refresh_robot_min_num", 5);
|
||||||
@ -658,7 +658,7 @@ int Room::GetAliveTeamNum()
|
|||||||
|
|
||||||
bool Room::CanJoin(const std::string& accountid, RoomType_e self_room_type)
|
bool Room::CanJoin(const std::string& accountid, RoomType_e self_room_type)
|
||||||
{
|
{
|
||||||
if (gas_data.gas_mode != GasInactive) {
|
if (gas_data_.gas_mode != GasInactive) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (GetPlayerByAccountId(accountid)) {
|
if (GetPlayerByAccountId(accountid)) {
|
||||||
@ -863,7 +863,7 @@ void Room::TouchEntityList(a8::XParams param,
|
|||||||
|
|
||||||
void Room::UpdateGas()
|
void Room::UpdateGas()
|
||||||
{
|
{
|
||||||
switch (gas_data.gas_mode) {
|
switch (gas_data_.gas_mode) {
|
||||||
case GasInactive:
|
case GasInactive:
|
||||||
UpdateGasInactive();
|
UpdateGasInactive();
|
||||||
break;
|
break;
|
||||||
@ -877,10 +877,10 @@ void Room::UpdateGas()
|
|||||||
UpdateGasMoving();
|
UpdateGasMoving();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (gas_data.gas_mode != GasInactive && gas_data.gas_mode != GasJump) {
|
if (gas_data_.gas_mode != GasInactive && gas_data_.gas_mode != GasJump) {
|
||||||
if (!game_over && alive_count_ <= MAX_TEAM_NUM && GetAliveTeamNum() <= 1) {
|
if (!IsGameOver() && alive_count_ <= MAX_TEAM_NUM && GetAliveTeamNum() <= 1) {
|
||||||
game_over = true;
|
game_over_ = true;
|
||||||
game_over_frameno = GetFrameNo();
|
game_over_frameno_ = GetFrameNo();
|
||||||
OnGameOver();
|
OnGameOver();
|
||||||
}
|
}
|
||||||
for (auto& pair : human_hash_) {
|
for (auto& pair : human_hash_) {
|
||||||
@ -888,13 +888,13 @@ void Room::UpdateGas()
|
|||||||
a8::HasBitFlag(pair.second->status, HS_Disable)) {
|
a8::HasBitFlag(pair.second->status, HS_Disable)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
bool b1 = a8::CircleContainCircle(gas_data.pos_old,
|
bool b1 = a8::CircleContainCircle(gas_data_.pos_old,
|
||||||
gas_data.gas_progress,
|
gas_data_.gas_progress,
|
||||||
pair.second->GetPos(),
|
pair.second->GetPos(),
|
||||||
pair.second->GetRadius()
|
pair.second->GetRadius()
|
||||||
);
|
);
|
||||||
bool b2 = a8::CircleContainCircle(gas_data.pos_new,
|
bool b2 = a8::CircleContainCircle(gas_data_.pos_new,
|
||||||
gas_data.rad_new,
|
gas_data_.rad_new,
|
||||||
pair.second->GetPos(),
|
pair.second->GetPos(),
|
||||||
pair.second->GetRadius()
|
pair.second->GetRadius()
|
||||||
);
|
);
|
||||||
@ -910,24 +910,24 @@ void Room::UpdateGas()
|
|||||||
|
|
||||||
void Room::UpdateGasInactive()
|
void Room::UpdateGasInactive()
|
||||||
{
|
{
|
||||||
if (GetFrameNo() - gas_data.gas_start_frameno >= GetGasInactiveTime() * SERVER_FRAME_RATE) {
|
if (GetFrameNo() - gas_data_.gas_start_frameno >= GetGasInactiveTime() * SERVER_FRAME_RATE) {
|
||||||
gas_data.gas_mode = GasWaiting;
|
gas_data_.gas_mode = GasWaiting;
|
||||||
gas_data.old_area_meta = MetaMgr::Instance()->GetSafeArea(30001);
|
gas_data_.old_area_meta = MetaMgr::Instance()->GetSafeArea(30001);
|
||||||
gas_data.new_area_meta = MetaMgr::Instance()->GetSafeArea(30002);
|
gas_data_.new_area_meta = MetaMgr::Instance()->GetSafeArea(30002);
|
||||||
gas_data.gas_progress = gas_data.old_area_meta->i->rad();
|
gas_data_.gas_progress = gas_data_.old_area_meta->i->rad();
|
||||||
gas_data.gas_start_frameno = GetFrameNo();
|
gas_data_.gas_start_frameno = GetFrameNo();
|
||||||
gas_data.pos_old = a8::Vec2(map_meta->i->map_width() / 2.0f,
|
gas_data_.pos_old = a8::Vec2(map_meta->i->map_width() / 2.0f,
|
||||||
map_meta->i->map_height() / 2.0f);
|
map_meta->i->map_height() / 2.0f);
|
||||||
gas_data.pos_old_bk = gas_data.pos_old;
|
gas_data_.pos_old_bk = gas_data_.pos_old;
|
||||||
{
|
{
|
||||||
bool gen_ok = GenSmallCircle(gas_data.pos_old,
|
bool gen_ok = GenSmallCircle(gas_data_.pos_old,
|
||||||
gas_data.old_area_meta->i->rad(),
|
gas_data_.old_area_meta->i->rad(),
|
||||||
gas_data.new_area_meta->i->rad(),
|
gas_data_.new_area_meta->i->rad(),
|
||||||
gas_data.pos_new);
|
gas_data_.pos_new);
|
||||||
assert(gen_ok);
|
assert(gen_ok);
|
||||||
}
|
}
|
||||||
gas_data.rad_old = gas_data.old_area_meta->i->rad();
|
gas_data_.rad_old = gas_data_.old_area_meta->i->rad();
|
||||||
gas_data.rad_new = gas_data.new_area_meta->i->rad();
|
gas_data_.rad_new = gas_data_.new_area_meta->i->rad();
|
||||||
battle_start_frameno_ = GetFrameNo();
|
battle_start_frameno_ = GetFrameNo();
|
||||||
if (human_hash_.size() < ROOM_MAX_PLAYER_NUM) {
|
if (human_hash_.size() < ROOM_MAX_PLAYER_NUM) {
|
||||||
CreateAndroid(ROOM_MAX_PLAYER_NUM - human_hash_.size());
|
CreateAndroid(ROOM_MAX_PLAYER_NUM - human_hash_.size());
|
||||||
@ -945,56 +945,56 @@ void Room::UpdateGasInactive()
|
|||||||
|
|
||||||
void Room::UpdateGasWaiting()
|
void Room::UpdateGasWaiting()
|
||||||
{
|
{
|
||||||
if (GetFrameNo() - gas_data.gas_start_frameno >=
|
if (GetFrameNo() - gas_data_.gas_start_frameno >=
|
||||||
gas_data.old_area_meta->i->wait_time() * SERVER_FRAME_RATE) {
|
gas_data_.old_area_meta->i->wait_time() * SERVER_FRAME_RATE) {
|
||||||
gas_data.gas_mode = GasMoving;
|
gas_data_.gas_mode = GasMoving;
|
||||||
gas_data.gas_start_frameno = GetFrameNo();;
|
gas_data_.gas_start_frameno = GetFrameNo();;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Room::UpdateGasMoving()
|
void Room::UpdateGasMoving()
|
||||||
{
|
{
|
||||||
if (GetFrameNo() - gas_data.gas_start_frameno > 0 && !gas_data.is_last_gas) {
|
if (GetFrameNo() - gas_data_.gas_start_frameno > 0 && !gas_data_.is_last_gas) {
|
||||||
float distance = gas_data.old_area_meta->i->shrink_speed() *
|
float distance = gas_data_.old_area_meta->i->shrink_speed() *
|
||||||
((GetFrameNo() - gas_data.gas_start_frameno) * (1.0 / SERVER_FRAME_RATE));
|
((GetFrameNo() - 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);
|
gas_data_.gas_progress = std::max(gas_data_.rad_old - distance, gas_data_.rad_new);
|
||||||
if (!(gas_data.pos_new == gas_data.pos_old)) {
|
if (!(gas_data_.pos_new == gas_data_.pos_old)) {
|
||||||
a8::Vec2 p1 = gas_data.pos_new - gas_data.pos_old_bk;
|
a8::Vec2 p1 = gas_data_.pos_new - gas_data_.pos_old_bk;
|
||||||
gas_data.pre_pos_old = gas_data.pos_old;
|
gas_data_.pre_pos_old = gas_data_.pos_old;
|
||||||
if (p1.Norm() - distance <= 0.01f) {
|
if (p1.Norm() - distance <= 0.01f) {
|
||||||
gas_data.pos_old = gas_data.pos_new;
|
gas_data_.pos_old = gas_data_.pos_new;
|
||||||
} else {
|
} else {
|
||||||
a8::Vec2 dir = p1;
|
a8::Vec2 dir = p1;
|
||||||
dir.Normalize();
|
dir.Normalize();
|
||||||
gas_data.pos_old = gas_data.pos_old_bk + dir * distance;
|
gas_data_.pos_old = gas_data_.pos_old_bk + dir * distance;
|
||||||
}
|
}
|
||||||
if (gas_data.rad_old - distance <= gas_data.rad_new) {
|
if (gas_data_.rad_old - distance <= gas_data_.rad_new) {
|
||||||
assert(gas_data.pos_new == gas_data.pos_old);
|
assert(gas_data_.pos_new == gas_data_.pos_old);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (std::abs(gas_data.gas_progress - gas_data.rad_new) <= 0.001f) {
|
if (std::abs(gas_data_.gas_progress - gas_data_.rad_new) <= 0.001f) {
|
||||||
int pre_area_id = gas_data.new_area_meta->i->id();
|
int pre_area_id = gas_data_.new_area_meta->i->id();
|
||||||
a8::Vec2 pre_pos = gas_data.pos_new;
|
a8::Vec2 pre_pos = gas_data_.pos_new;
|
||||||
if (!MetaMgr::Instance()->GetSafeArea(pre_area_id + 1)) {
|
if (!MetaMgr::Instance()->GetSafeArea(pre_area_id + 1)) {
|
||||||
gas_data.is_last_gas = true;
|
gas_data_.is_last_gas = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
gas_data.gas_mode = GasWaiting;
|
gas_data_.gas_mode = GasWaiting;
|
||||||
gas_data.old_area_meta = MetaMgr::Instance()->GetSafeArea(pre_area_id);
|
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_.new_area_meta = MetaMgr::Instance()->GetSafeArea(pre_area_id + 1);
|
||||||
gas_data.gas_progress = gas_data.old_area_meta->i->rad();
|
gas_data_.gas_progress = gas_data_.old_area_meta->i->rad();
|
||||||
gas_data.gas_start_frameno = GetFrameNo();
|
gas_data_.gas_start_frameno = GetFrameNo();
|
||||||
gas_data.pos_old = pre_pos;
|
gas_data_.pos_old = pre_pos;
|
||||||
gas_data.pos_old_bk = gas_data.pos_old;
|
gas_data_.pos_old_bk = gas_data_.pos_old;
|
||||||
{
|
{
|
||||||
bool gen_ok = GenSmallCircle(gas_data.pos_old,
|
bool gen_ok = GenSmallCircle(gas_data_.pos_old,
|
||||||
gas_data.old_area_meta->i->rad(),
|
gas_data_.old_area_meta->i->rad(),
|
||||||
gas_data.new_area_meta->i->rad(),
|
gas_data_.new_area_meta->i->rad(),
|
||||||
gas_data.pos_new);
|
gas_data_.pos_new);
|
||||||
assert(gen_ok);
|
assert(gen_ok);
|
||||||
}
|
}
|
||||||
gas_data.rad_old = gas_data.old_area_meta->i->rad();
|
gas_data_.rad_old = gas_data_.old_area_meta->i->rad();
|
||||||
gas_data.rad_new = gas_data.new_area_meta->i->rad();
|
gas_data_.rad_new = gas_data_.new_area_meta->i->rad();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1223,7 +1223,7 @@ void Room::InitAirDrop()
|
|||||||
[] (const a8::XParams& param)
|
[] (const a8::XParams& param)
|
||||||
{
|
{
|
||||||
Room* room = (Room*)param.sender.GetUserData();
|
Room* room = (Room*)param.sender.GetUserData();
|
||||||
if (!room->game_over) {
|
if (!room->IsGameOver()) {
|
||||||
room->AirDrop(param.param1, param.param2);
|
room->AirDrop(param.param1, param.param2);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -1237,7 +1237,7 @@ void Room::AirDrop(int appear_time, int box_id)
|
|||||||
if (thing_meta && thing_meta->i->type() == 2) {
|
if (thing_meta && thing_meta->i->type() == 2) {
|
||||||
a8::Vec2 dir = a8::Vec2::UP;
|
a8::Vec2 dir = a8::Vec2::UP;
|
||||||
dir.Rotate(a8::RandAngle());
|
dir.Rotate(a8::RandAngle());
|
||||||
a8::Vec2 box_pos = gas_data.pos_new + dir * (500 + rand() % 300);
|
a8::Vec2 box_pos = gas_data_.pos_new + dir * (500 + rand() % 300);
|
||||||
if (box_pos.x < 1.0f) {
|
if (box_pos.x < 1.0f) {
|
||||||
box_pos.x = 1.0f;
|
box_pos.x = 1.0f;
|
||||||
}
|
}
|
||||||
@ -1284,7 +1284,7 @@ void Room::AirDrop(int appear_time, int box_id)
|
|||||||
[] (const a8::XParams& param)
|
[] (const a8::XParams& param)
|
||||||
{
|
{
|
||||||
Room* room = (Room*)param.sender.GetUserData();
|
Room* room = (Room*)param.sender.GetUserData();
|
||||||
if (!room->game_over) {
|
if (!room->IsGameOver()) {
|
||||||
RoomObstacle* obstacle = room->
|
RoomObstacle* obstacle = room->
|
||||||
CreateObstacle(param.param1.GetInt(),
|
CreateObstacle(param.param1.GetInt(),
|
||||||
param.param2.GetDouble(),
|
param.param2.GetDouble(),
|
||||||
@ -1358,7 +1358,7 @@ void Room::AddObjectLater(RoomEntity* entity)
|
|||||||
void Room::OnGameOver()
|
void Room::OnGameOver()
|
||||||
{
|
{
|
||||||
for (auto& pair : human_hash_) {
|
for (auto& pair : human_hash_) {
|
||||||
if (game_over && game_over_frameno == GetFrameNo()) {
|
if (IsGameOver() && game_over_frameno_ == GetFrameNo()) {
|
||||||
pair.second->SendGameOver();
|
pair.second->SendGameOver();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1733,14 +1733,14 @@ void Room::NotifyGameStart()
|
|||||||
room->SecondRandPoint();
|
room->SecondRandPoint();
|
||||||
},
|
},
|
||||||
&xtimer_attacher_.timer_list_);
|
&xtimer_attacher_.timer_list_);
|
||||||
waiting_start = true;
|
waiting_start_ = true;
|
||||||
xtimer.AddDeadLineTimerAndAttach(SERVER_FRAME_RATE * 2,
|
xtimer.AddDeadLineTimerAndAttach(SERVER_FRAME_RATE * 2,
|
||||||
a8::XParams()
|
a8::XParams()
|
||||||
.SetSender(this),
|
.SetSender(this),
|
||||||
[] (const a8::XParams& param)
|
[] (const a8::XParams& param)
|
||||||
{
|
{
|
||||||
Room* room = (Room*)param.sender.GetUserData();
|
Room* room = (Room*)param.sender.GetUserData();
|
||||||
room->waiting_start = false;
|
room->waiting_start_ = false;
|
||||||
},
|
},
|
||||||
&xtimer_attacher_.timer_list_);
|
&xtimer_attacher_.timer_list_);
|
||||||
if (room_type == RT_NewBrid) {
|
if (room_type == RT_NewBrid) {
|
||||||
@ -2177,7 +2177,7 @@ void Room::ProcDieAndroid(int die_time, int die_num)
|
|||||||
alive_humans_copy.erase(alive_humans_copy.begin() + i);
|
alive_humans_copy.erase(alive_humans_copy.begin() + i);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (killer && ((rand() % 100 < 70) || !gas_data.old_area_meta)) {
|
if (killer && ((rand() % 100 < 70) || !gas_data_.old_area_meta)) {
|
||||||
hum->BeKill(killer->entity_uniid,
|
hum->BeKill(killer->entity_uniid,
|
||||||
killer->name,
|
killer->name,
|
||||||
killer->curr_weapon->weapon_id);
|
killer->curr_weapon->weapon_id);
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
namespace MetaData
|
namespace MetaData
|
||||||
{
|
{
|
||||||
struct Map;
|
struct Map;
|
||||||
struct SafeArea;
|
|
||||||
struct Building;
|
struct Building;
|
||||||
struct AirLine;
|
struct AirLine;
|
||||||
struct MapTplThing;
|
struct MapTplThing;
|
||||||
@ -39,26 +38,20 @@ class Room
|
|||||||
public:
|
public:
|
||||||
int room_idx = 0;
|
int room_idx = 0;
|
||||||
long long room_uuid = 0;
|
long long room_uuid = 0;
|
||||||
MetaData::Map* map_meta = nullptr;
|
const MetaData::Map* map_meta = nullptr;
|
||||||
std::string map_tpl_name;
|
std::string map_tpl_name;
|
||||||
FrameEvent frame_event;
|
FrameEvent frame_event;
|
||||||
FrameMaker frame_maker;
|
FrameMaker frame_maker;
|
||||||
GasData gas_data;
|
|
||||||
bool game_over = false;
|
|
||||||
long long game_over_frameno = 0;
|
|
||||||
a8::XTimer xtimer;
|
a8::XTimer xtimer;
|
||||||
|
a8::XTimerAttacher timer_attacher;
|
||||||
GridService* grid_service = nullptr;
|
GridService* grid_service = nullptr;
|
||||||
MapService* map_service = nullptr;
|
MapService* map_service = nullptr;
|
||||||
long long battle_start_frameno_ = 0;
|
|
||||||
long long last_debugout_tick = 0;
|
|
||||||
bool waiting_start = false;
|
|
||||||
RoomType_e room_type = RT_NewBrid;
|
RoomType_e room_type = RT_NewBrid;
|
||||||
std::vector<MetaData::MapTplThing*>* spawn_points = nullptr;
|
const std::vector<MetaData::MapTplThing*>* spawn_points = nullptr;
|
||||||
MetaData::MapTplThing* newbie_born_point_meta = nullptr;
|
const MetaData::MapTplThing* newbie_born_point_meta = nullptr;
|
||||||
std::vector<MetaData::MapTplThing*>* loots = nullptr;
|
const std::vector<MetaData::MapTplThing*>* loots = nullptr;
|
||||||
std::vector<Building*>* buildings = nullptr;
|
const std::vector<Building*>* buildings = nullptr;
|
||||||
Human* first_newbie = nullptr;
|
Human* first_newbie = nullptr;
|
||||||
a8::XTimerAttacher timer_attacher;
|
|
||||||
|
|
||||||
~Room();
|
~Room();
|
||||||
void Init();
|
void Init();
|
||||||
@ -68,6 +61,10 @@ public:
|
|||||||
int GetPlayerNum();
|
int GetPlayerNum();
|
||||||
int AliveCount();
|
int AliveCount();
|
||||||
inline int RealAliveCount() { return alive_human_hash_.size(); }
|
inline int RealAliveCount() { return alive_human_hash_.size(); }
|
||||||
|
long long GetBattleStartFrameNo() { return battle_start_frameno_; }
|
||||||
|
bool IsGameOver() { return game_over_; }
|
||||||
|
const GasData& GetGasData() { return gas_data_; }
|
||||||
|
bool IsWaitingStart() { return waiting_start_; }
|
||||||
Player* GetPlayerByAccountId(const std::string& accountid);
|
Player* GetPlayerByAccountId(const std::string& accountid);
|
||||||
Player* GetPlayerByUniId(int uniid);
|
Player* GetPlayerByUniId(int uniid);
|
||||||
Entity* GetEntityByUniId(int uniid);
|
Entity* GetEntityByUniId(int uniid);
|
||||||
@ -165,7 +162,12 @@ private:
|
|||||||
void CheckAliveHuman(Human* hum, std::vector<Human*>& alive_humans);
|
void CheckAliveHuman(Human* hum, std::vector<Human*>& alive_humans);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool waiting_start_ = false;
|
||||||
|
GasData gas_data_;
|
||||||
long long frameno_ = 0;
|
long long frameno_ = 0;
|
||||||
|
long long battle_start_frameno_ = 0;
|
||||||
|
bool game_over_ = false;
|
||||||
|
long long game_over_frameno_ = 0;
|
||||||
int elapsed_time_ = 0;
|
int elapsed_time_ = 0;
|
||||||
int alive_count_ = 0;
|
int alive_count_ = 0;
|
||||||
int force_shua_android_times_ = 0;
|
int force_shua_android_times_ = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user