std::string Goals::AbstractGoal::name() const //TODO: virtualize { std::string desc; switch (goalType) { case INVALID: return "INVALID"; case WIN: return "WIN"; case DO_NOT_LOSE: return "DO NOT LOOSE"; case CONQUER: return "CONQUER"; case BUILD: return "BUILD"; case EXPLORE: desc = "EXPLORE"; break; case GATHER_ARMY: desc = "GATHER ARMY"; break; case BOOST_HERO: desc = "BOOST_HERO (unsupported)"; break; case RECRUIT_HERO: return "RECRUIT HERO"; case BUILD_STRUCTURE: return "BUILD STRUCTURE"; case COLLECT_RES: desc = "COLLECT RESOURCE"; break; case GATHER_TROOPS: desc = "GATHER TROOPS"; break; case GET_OBJ: { auto obj = cb->getObjInstance(ObjectInstanceID(objid)); if (obj) desc = "GET OBJ " + obj->getHoverText(); } case FIND_OBJ: desc = "FIND OBJ " + boost::lexical_cast<std::string>(objid); break; case VISIT_HERO: { auto obj = cb->getObjInstance(ObjectInstanceID(objid)); if (obj) desc = "VISIT HERO " + obj->getHoverText(); } break; case GET_ART_TYPE: desc = "GET ARTIFACT OF TYPE " + VLC->arth->artifacts[aid]->Name(); break; case ISSUE_COMMAND: return "ISSUE COMMAND (unsupported)"; case VISIT_TILE: desc = "VISIT TILE " + tile(); break; case CLEAR_WAY_TO: desc = "CLEAR WAY TO " + tile(); break; case DIG_AT_TILE: desc = "DIG AT TILE " + tile(); break; default: return boost::lexical_cast<std::string>(goalType); } if (hero.get(true)) //FIXME: used to crash when we lost hero and failed goal desc += " (" + hero->name + ")"; return desc; }