void CFactory::FinishBuild(CUnit* buildee) { if (buildee->beingBuilt) { return; } if (unitDef->fullHealthFactory && buildee->health < buildee->maxHealth) { return; } { GML_RECMUTEX_LOCK(group); // FinishBuild if (group && buildee->group == 0) { buildee->SetGroup(group, true); } } const CCommandAI* bcai = buildee->commandAI; const bool assignOrders = bcai->commandQue.empty() || (dynamic_cast<const CMobileCAI*>(bcai) && static_cast<const CMobileCAI*>(bcai)->unimportantMove); if (assignOrders) { AssignBuildeeOrders(buildee); waitCommandsAI.AddLocalUnit(buildee, this); } // inform our commandAI finishedBuildFunc(this, finishedBuildCommand); finishedBuildFunc = NULL; eventHandler.UnitFromFactory(buildee, this, !assignOrders); StopBuild(); }
void CFactory::FinishBuild(CUnit* buildee) { if (buildee->beingBuilt) { return; } if (unitDef->fullHealthFactory && buildee->health < buildee->maxHealth) { return; } { if (group && !buildee->group) { buildee->SetGroup(group, true); } } const CCommandAI* bcai = buildee->commandAI; // if not idle, the buildee already has user orders const bool buildeeIdle = (bcai->commandQue.empty()); const bool buildeeMobile = (dynamic_cast<const CMobileCAI*>(bcai) != NULL); if (buildeeIdle || buildeeMobile) { AssignBuildeeOrders(buildee); waitCommandsAI.AddLocalUnit(buildee, this); } // inform our commandAI finishedBuildFunc(this, finishedBuildCommand); finishedBuildFunc = NULL; eventHandler.UnitFromFactory(buildee, this, !buildeeIdle); StopBuild(); }