You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I guess the problem comes from here
Just see the comments
voidCoordinatorImp::StepAgents() {
auto step_agent = [this](Agent* a) {
ControlInterface* control = a->Control();
if (control->GetAppState() != AppState::normal) {
return;
}
if (control->PollLeaveGame()) {
return;
}
if (control->IsFinishedGame()) {
return;
}
control->Step(process_settings_.step_size);
control->WaitStep(); //1. from here we know the game has been end.if (process_settings_.multi_threaded) {
CallOnStep(a); //2. The first chance to call the CallOnStep() is missing (This function will call OnGameEnd() based on whether the Agent is in game or not) since it is not a multi_threaded game according to my settings.
}
};
if (agents_.size() == 1) {
step_agent(agents_.front());
}
else {
RunParallel(step_agent, agents_); // 0. Normal opeartion as usual
}
if (!process_settings_.multi_threaded) {
for (auto a : agents_) {
if (a->Control()->GetAppState() != AppState::normal) {
continue;
}
// It is possible to have a pending leave game request here.if (a->Control()->PollLeaveGame()) { // 3. In PollLeaveGame() it checks if the Agent is in game, is not, return true and continuecontinue;
}
CallOnStep(a); // 4. Because of step 3, the last precious call of CallOnStep (that is, the call of OnGameEnd() as I have mentioned in step 2) is missing again
}
}
}
The text was updated successfully, but these errors were encountered:
I guess the problem comes from here
Just see the comments
The text was updated successfully, but these errors were encountered: