This commit is contained in:
aozhiwei 2024-02-02 18:58:29 +08:00
parent 688c6c728c
commit edee47ac45
2 changed files with 79 additions and 19 deletions

View File

@ -399,10 +399,11 @@ void Room::AddPlayer(Player* hum, std::shared_ptr<BornPoint> init_born_point, bo
MatchTeam(hum); MatchTeam(hum);
} }
hum->PushJoinRoomMsg(); hum->PushJoinRoomMsg();
++alive_count_; if (!hum->IsOb()) {
alive_count_chged_frameno_ = GetFrameNo(); ++alive_count_;
++PerfMonitor::Instance()->alive_count; alive_count_chged_frameno_ = GetFrameNo();
++PerfMonitor::Instance()->alive_count;
}
grid_service->AddCreature(hum); grid_service->AddCreature(hum);
hum->FindLocation(); hum->FindLocation();
hum->RefreshView(); hum->RefreshView();
@ -500,9 +501,11 @@ void Room::CreateAndroid(int robot_num, std::shared_ptr<Team> team)
} else { } else {
MatchTeam(hum); MatchTeam(hum);
} }
++alive_count_; if (!hum->IsOb()) {
alive_count_chged_frameno_ = GetFrameNo(); ++alive_count_;
++PerfMonitor::Instance()->alive_count; alive_count_chged_frameno_ = GetFrameNo();
++PerfMonitor::Instance()->alive_count;
}
refreshed_robot_set_.insert(robot_meta->id()); refreshed_robot_set_.insert(robot_meta->id());
if (!CanAddToScene(hum)) { if (!CanAddToScene(hum)) {
a8::SetBitFlag(hum->status, CS_Disable); a8::SetBitFlag(hum->status, CS_Disable);
@ -910,7 +913,7 @@ void Room::InternalRemoveObjectLater(Entity* entity, a8::Attacher& xtimer_attach
void Room::OnHumanDie(Human* hum) void Room::OnHumanDie(Human* hum)
{ {
{ if (!hum->IsOb()) {
--alive_count_; --alive_count_;
alive_count_chged_frameno_ = GetFrameNo(); alive_count_chged_frameno_ = GetFrameNo();
--PerfMonitor::Instance()->alive_count; --PerfMonitor::Instance()->alive_count;
@ -1022,6 +1025,15 @@ void Room::TraverseTeams(std::function<bool (Team*)> cb)
} }
} }
void Room::TraverseRawTeams(std::function<bool (Team*)> cb)
{
for (auto& pair : team_hash_) {
if (!cb(pair.second.get())) {
break;
}
}
}
int Room::GetTeamNum() int Room::GetTeamNum()
{ {
return team_hash_.size(); return team_hash_.size();
@ -1172,20 +1184,40 @@ std::shared_ptr<Team> Room::NewViewTeam()
return team; return team;
} }
void Room::TraversePlayerList(std::function<void (Player*)> func) void Room::TraversePlayerList(std::function<void (Player*)> cb)
{ {
for (auto& pair : accountid_hash_) { for (auto& pair : accountid_hash_) {
if (pair.second) { if (pair.second && !pair.second->IsOb()) {
func(pair.second); cb(pair.second);
} }
} }
} }
void Room::TraverseHumanList(std::function<bool (Human*)> func) void Room::TraverseRawPlayerList(std::function<void (Player*)> cb)
{
for (auto& pair : accountid_hash_) {
if (pair.second) {
cb(pair.second);
}
}
}
void Room::TraverseHumanList(std::function<bool (Human*)> cb)
{ {
for (auto& pair : human_hash_) { for (auto& pair : human_hash_) {
if (pair.second && !pair.second->IsOb()) { if (pair.second && !pair.second->IsOb()) {
if (!func(pair.second)) { if (!cb(pair.second)) {
break;
}
}
}
}
void Room::TraverseRawHumanList(std::function<bool (Human*)> cb)
{
for (auto& pair : human_hash_) {
if (pair.second) {
if (!cb(pair.second)) {
break; break;
} }
} }
@ -2125,9 +2157,11 @@ void Room::RandRemoveAndroid()
RemoveFromHuamnHash(hum); RemoveFromHuamnHash(hum);
RemoveFromAliveHumanHash(hum); RemoveFromAliveHumanHash(hum);
AddToRemovedRobotHash(hum); AddToRemovedRobotHash(hum);
--alive_count_; if (!hum->IsOb()) {
alive_count_chged_frameno_ = GetFrameNo(); --alive_count_;
--PerfMonitor::Instance()->alive_count; alive_count_chged_frameno_ = GetFrameNo();
--PerfMonitor::Instance()->alive_count;
}
for (auto& pair : human_hash_) { for (auto& pair : human_hash_) {
pair.second->RemovePartObjects(hum); pair.second->RemovePartObjects(hum);
} }
@ -2903,6 +2937,27 @@ void Room::OnBattleStart()
e.Get()->OnBattleStart(this); e.Get()->OnBattleStart(this);
} }
} }
TraverseHumanList
(
[this] (Human* ele_hum) -> bool
{
++battle_human_count_;
return true;
});
TraversePlayerList
(
[this] (Player* ele_hum) -> bool
{
++battle_player_count_;
return true;
});
TraverseTeams
(
[this] (Team* ele_team) -> bool
{
++battle_team_count_;
return true;
});
battle_starting_ = false; battle_starting_ = false;
} }

View File

@ -148,8 +148,10 @@ public:
void FillSMJoinedNotify(Human* self_hum, cs::SMJoinedNotify& msg); void FillSMJoinedNotify(Human* self_hum, cs::SMJoinedNotify& msg);
void TraversePlayerList(std::function<void (Player*)> func); void TraversePlayerList(std::function<void (Player*)> cb);
void TraverseHumanList(std::function<bool (Human*)> func); void TraverseRawPlayerList(std::function<void (Player*)> cb);
void TraverseHumanList(std::function<bool (Human*)> cb);
void TraverseRawHumanList(std::function<bool (Human*)> cb);
void TraverseAliveHumanList(std::function<bool (Human*)> func); void TraverseAliveHumanList(std::function<bool (Human*)> func);
void TraverseEntityList(std::function<bool (Entity*)> func); void TraverseEntityList(std::function<bool (Entity*)> func);
void TraverseAlivePlayers(std::function<bool (Human*)> func); void TraverseAlivePlayers(std::function<bool (Human*)> func);
@ -201,6 +203,7 @@ public:
int GetAliveTeamNum(); int GetAliveTeamNum();
Team* GetAliveTeam(); Team* GetAliveTeam();
void TraverseTeams(std::function<bool (Team*)> cb); void TraverseTeams(std::function<bool (Team*)> cb);
void TraverseRawTeams(std::function<bool (Team*)> cb);
bool CanJoin(const std::string& accountid, bool CanJoin(const std::string& accountid,
RoomType_e self_roomm_type, RoomType_e self_roomm_type,
RoomMode_e self_room_mode, RoomMode_e self_room_mode,
@ -370,7 +373,9 @@ private:
int elapsed_time_ = 0; int elapsed_time_ = 0;
int alive_count_ = 0; int alive_count_ = 0;
long long alive_count_chged_frameno_ = 0; long long alive_count_chged_frameno_ = 0;
int human_alive_count_ = 0; int battle_human_count_ = 0;
int battle_player_count_ = 0;
int battle_team_count_ = 0;
const mt::AirLine* airline_ = nullptr; const mt::AirLine* airline_ = nullptr;
int level0room_born_point_uniid_ = 0; int level0room_born_point_uniid_ = 0;
int level1room_born_point_uniid_ = 0; int level1room_born_point_uniid_ = 0;