int CSelectedUnits::GetDefaultCmd(CUnit* unit, CFeature* feature) { // NOTE: the unitDef->aihint value is being ignored int luaCmd; if (eventHandler.DefaultCommand(unit, feature, luaCmd)) { return luaCmd; } if ((selectedGroup != -1) && grouphandlers[gu->myTeam]->groups[selectedGroup]->ai) { return grouphandlers[gu->myTeam]->groups[selectedGroup]->GetDefaultCmd(unit, feature); } // return the default if there are no units selected CUnitSet::const_iterator ui = selectedUnits.begin(); if (ui == selectedUnits.end()) { return CMD_STOP; } // setup the locals for IsBetterLeader() targetUnit = unit; targetFeature = feature; if (targetUnit) { targetIsEnemy = !gs->Ally(gu->myAllyTeam, targetUnit->allyteam); } // find the best leader to pick the command const CUnit* leaderUnit = *ui; const UnitDef* leaderDef = leaderUnit->unitDef; for (++ui; ui != selectedUnits.end(); ++ui) { const CUnit* testUnit = *ui; const UnitDef* testDef = testUnit->unitDef; if (testDef != leaderDef) { if (IsBetterLeader(testDef, leaderDef)) { leaderDef = testDef; leaderUnit = testUnit; } } } return (leaderUnit->commandAI->GetDefaultCmd(unit, feature)); }
// CALLINFO: // DrawMapStuff --> CGuiHandler::GetDefaultCommand --> GetDefaultCmd // CMouseHandler::DrawCursor --> DrawCentroidCursor --> CGuiHandler::GetDefaultCommand --> GetDefaultCmd // LuaUnsyncedRead::GetDefaultCommand --> CGuiHandler::GetDefaultCommand --> GetDefaultCmd int CSelectedUnits::GetDefaultCmd(const CUnit* unit, const CFeature* feature) { int luaCmd; if (eventHandler.DefaultCommand(unit, feature, luaCmd)) { return luaCmd; } GML_RECMUTEX_LOCK(sel); // GetDefaultCmd // return the default if there are no units selected CUnitSet::const_iterator ui = selectedUnits.begin(); if (ui == selectedUnits.end()) { return CMD_STOP; } // setup the locals for IsBetterLeader() targetUnit = unit; targetFeature = feature; if (targetUnit) { targetIsEnemy = !teamHandler->Ally(gu->myAllyTeam, targetUnit->allyteam); } // find the best leader to pick the command const CUnit* leaderUnit = *ui; const UnitDef* leaderDef = leaderUnit->unitDef; for (++ui; ui != selectedUnits.end(); ++ui) { const CUnit* testUnit = *ui; const UnitDef* testDef = testUnit->unitDef; if (testDef != leaderDef) { if (IsBetterLeader(testDef, leaderDef)) { leaderDef = testDef; leaderUnit = testUnit; } } } return (leaderUnit->commandAI->GetDefaultCmd(unit, feature)); }