diff --git a/agent.cc b/agent.cc index fb94935..56b171d 100644 --- a/agent.cc +++ b/agent.cc @@ -110,6 +110,13 @@ agent::on_action_takes(void) if (!conn) return; + if (conn->error) { + die(); + conn->cancel(); + conn = NULL; + return; + } + conn->actions(*this); } @@ -176,6 +183,7 @@ herb::on_tick(void) spawn_herb(tile->tile_in_dir(0, 1)); spawn_herb(tile->tile_in_dir(-1, 0)); spawn_herb(tile->tile_in_dir(0, -1)); - die(); + tile->on_agent_leave(*this); + tile = NULL; } } diff --git a/main.cc b/main.cc index fbffb5f..6c3f92f 100644 --- a/main.cc +++ b/main.cc @@ -29,7 +29,7 @@ drop_agents(void) for (std::list::iterator agent = agents.begin(); agent != agents.end(); agent++) { next_agent: - if ((*agent)->conn ? (*agent)->conn->error : (*agent)->dead) { + if (!(*agent)->conn && !(*agent)->tile) { delete *agent; agent = agents.erase(agent); if (agent != agents.end())