This commit is contained in:
aozhiwei 2021-03-15 16:06:39 +08:00
parent 6780aa53d5
commit 9038d84c3d
3 changed files with 67 additions and 3 deletions

View File

@ -1730,18 +1730,36 @@ void Human::RemoveObserver(Human* observer)
void Human::SendUpdateMsg() void Human::SendUpdateMsg()
{ {
if (!follow_target_ && !a8::HasBitFlag(status, HS_Disable) && IsPlayer()) { if (!follow_target_ && !a8::HasBitFlag(status, HS_Disable) && IsPlayer()) {
#ifdef DEBUG
long long begin_tick = a8::XGetTickCount();
long long end_tick = a8::XGetTickCount();
#endif
cs::MFActivePlayerData* active_player_data_pb = nullptr; cs::MFActivePlayerData* active_player_data_pb = nullptr;
if (send_msg_times == 0 || need_sync_active_player) { if (send_msg_times == 0 || need_sync_active_player) {
active_player_data_pb = new cs::MFActivePlayerData(); active_player_data_pb = new cs::MFActivePlayerData();
FillMFActivePlayerData(active_player_data_pb); FillMFActivePlayerData(active_player_data_pb);
need_sync_active_player = false; need_sync_active_player = false;
} }
#ifdef DEBUG
end_tick = a8::XGetTickCount();
if (a8::XGetTickCount() - begin_tick > 1000) {
abort();
}
begin_tick = a8::XGetTickCount();
#endif
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->GetGasData().gas_start_frameno) { if (send_msg_times == 0 || last_sync_gas_frameno < room->GetGasData().gas_start_frameno) {
last_sync_gas_frameno = room->GetGasData().gas_start_frameno; last_sync_gas_frameno = room->GetGasData().gas_start_frameno;
FillMFGasData(msg->mutable_gas_data()); FillMFGasData(msg->mutable_gas_data());
} }
#ifdef DEBUG
end_tick = a8::XGetTickCount();
if (a8::XGetTickCount() - begin_tick > 1000) {
abort();
}
begin_tick = a8::XGetTickCount();
#endif
NotifyObservers(msg, active_player_data_pb); NotifyObservers(msg, active_player_data_pb);
delete msg; delete msg;
@ -2231,7 +2249,7 @@ void Human::ClearFrameData()
Human* hum = (Human*)entity; Human* hum = (Human*)entity;
hum->RemovePartObjects(this); hum->RemovePartObjects(this);
} }
#ifdef DEBUG #ifdef DEBUG1
room->CheckPartObjects(); room->CheckPartObjects();
#endif #endif
} }
@ -2250,7 +2268,7 @@ void Human::ClearFrameData()
hum->RemovePartObjects(this); hum->RemovePartObjects(this);
} }
} }
#ifdef DEBUG #ifdef DEBUG1
room->CheckPartObjects(); room->CheckPartObjects();
#endif #endif
} }

View File

@ -58,7 +58,6 @@ void Player::InternalUpdate(int delta_time)
if (HasBuffEffect(kBET_Fly)) { if (HasBuffEffect(kBET_Fly)) {
SetPos(room->plane.curr_pos); SetPos(room->plane.curr_pos);
room->grid_service->MoveHuman(this); room->grid_service->MoveHuman(this);
return;
} }
if (HasSpecMove()) { if (HasSpecMove()) {
_UpdateSpecMove(); _UpdateSpecMove();

View File

@ -126,15 +126,39 @@ void Room::Update(int delta_time)
elapsed_time_ += delta_time; elapsed_time_ += delta_time;
while (elapsed_time_ >= 50) { while (elapsed_time_ >= 50) {
#ifdef DEBUG
long long begin_tick = a8::XGetTickCount();
long long end_tick = a8::XGetTickCount();
#endif
if (GetFrameNo() % 2 == 0) { if (GetFrameNo() % 2 == 0) {
UpdateGas(); UpdateGas();
} }
#ifdef DEBUG
end_tick = a8::XGetTickCount();
if (a8::XGetTickCount() - begin_tick > 1000) {
abort();
}
begin_tick = a8::XGetTickCount();
#endif
for (auto& pair : moveable_hash_) { for (auto& pair : moveable_hash_) {
pair.second->Update(50); pair.second->Update(50);
} }
#ifdef DEBUG
end_tick = a8::XGetTickCount();
if (a8::XGetTickCount() - begin_tick > 1000) {
abort();
}
begin_tick = a8::XGetTickCount();
#endif
if (GetFrameNo() % 2 == 0) { if (GetFrameNo() % 2 == 0) {
SyncFrameData(); SyncFrameData();
} }
#ifdef DEBUG
end_tick = a8::XGetTickCount();
if (a8::XGetTickCount() - begin_tick > 1000) {
abort();
}
#endif
++frameno_; ++frameno_;
elapsed_time_ -= 50; elapsed_time_ -= 50;
} }
@ -1046,6 +1070,7 @@ 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) {
long long begin_tick = a8::XGetTickCount();
gas_data_.gas_mode = GasJump; gas_data_.gas_mode = GasJump;
gas_data_.gas_start_frameno = GetFrameNo(); gas_data_.gas_start_frameno = GetFrameNo();
if (human_hash_.size() < GetRoomMaxPlayerNum()) { if (human_hash_.size() < GetRoomMaxPlayerNum()) {
@ -1088,6 +1113,10 @@ void Room::UpdateGasInactive()
} }
}, },
&xtimer_attacher_.timer_list_); &xtimer_attacher_.timer_list_);
#if 1
a8::XPrintf("max_run_delay:%d %d\n", {PerfMonitor::Instance()->max_run_delay_time,
a8::XGetTickCount() - begin_tick});
#endif
} }
} }
@ -3209,9 +3238,27 @@ bool Room::CanAddToScene(Human* hum)
void Room::SyncFrameData() void Room::SyncFrameData()
{ {
#ifdef DEBUG
long long begin_tick = a8::XGetTickCount();
long long end_tick = a8::XGetTickCount();
#endif
for (auto& pair : human_hash_) { for (auto& pair : human_hash_) {
pair.second->SendUpdateMsg(); pair.second->SendUpdateMsg();
#ifdef DEBUG
end_tick = a8::XGetTickCount();
if (a8::XGetTickCount() - begin_tick > 100) {
abort();
}
begin_tick = a8::XGetTickCount();
#endif
} }
#ifdef DEBUG
end_tick = a8::XGetTickCount();
if (a8::XGetTickCount() - begin_tick > 1000) {
abort();
}
begin_tick = a8::XGetTickCount();
#endif
frame_event.Clear(); frame_event.Clear();
} }