Separate agent on_tick and removal, better world consistency

This commit is contained in:
Petr Baudis 2011-11-27 00:26:45 +01:00
parent 27f4f4a3b0
commit 1a9dcce608

23
main.cc
View file

@ -48,6 +48,19 @@ main(int argc, char *argv[])
while (true) { while (true) {
std::cout << "tick " << tick_id << '\n'; std::cout << "tick " << tick_id << '\n';
/* Drop disconnected agents. */
for (std::list<class agent *>::iterator agent = agents.begin(); agent != agents.end(); agent++)
{
next_agent:
if ((*agent)->conn && (*agent)->conn->error) {
delete *agent;
agent = agents.erase(agent);
if (agent != agents.end())
goto next_agent;
}
}
/* Accept new agents. */ /* Accept new agents. */
int cfd = accept(lfd, NULL, NULL); int cfd = accept(lfd, NULL, NULL);
@ -63,18 +76,8 @@ main(int argc, char *argv[])
/* Run on_tick everywhere. */ /* Run on_tick everywhere. */
map.on_tick(); map.on_tick();
for (std::list<class agent *>::iterator agent = agents.begin(); agent != agents.end(); agent++) for (std::list<class agent *>::iterator agent = agents.begin(); agent != agents.end(); agent++)
{
next_agent:
(*agent)->on_tick(); (*agent)->on_tick();
if ((*agent)->conn && (*agent)->conn->error) {
delete *agent;
agent = agents.erase(agent);
if (agent != agents.end())
goto next_agent;
}
}
/* Finish a tick. */ /* Finish a tick. */