void CSelectedUnits::HandleUnitBoxSelection(const float4& planeRight, const float4& planeLeft, const float4& planeTop, const float4& planeBottom) { GML_RECMUTEX_LOCK(sel); // SelectUnits CUnit* unit = NULL; int addedunits = 0; int team, lastTeam; if (gu->spectatingFullSelect || gs->godMode) { // any team's units can be *selected* // (whether they can be given orders // depends on our ability to play god) team = 0; lastTeam = teamHandler->ActiveTeams() - 1; } else { team = gu->myTeam; lastTeam = gu->myTeam; } for (; team <= lastTeam; team++) { CUnitSet& teamUnits = teamHandler->Team(team)->units; for (CUnitSet::iterator ui = teamUnits.begin(); ui != teamUnits.end(); ++ui) { const float4 vec((*ui)->midPos, 1.0f); if (vec.dot4(planeRight) < 0.0f && vec.dot4(planeLeft) < 0.0f && vec.dot4(planeTop) < 0.0f && vec.dot4(planeBottom) < 0.0f) { if (keyInput->IsKeyPressed(SDLK_LCTRL) && (selectedUnits.find(*ui) != selectedUnits.end())) { RemoveUnit(*ui); } else { AddUnit(*ui); unit = *ui; addedunits++; } } } } #if (PLAY_SOUNDS == 1) if (addedunits >= 2) { Channels::UserInterface.PlaySample(soundMultiselID); } else if (addedunits == 1) { Channels::UnitReply.PlayRandomSample(unit->unitDef->sounds.select, unit); } #endif }
void CSelectedUnitsHandler::HandleUnitBoxSelection(const float4& planeRight, const float4& planeLeft, const float4& planeTop, const float4& planeBottom) { CUnit* unit = NULL; int addedunits = 0; int team, lastTeam; if (gu->spectatingFullSelect || gs->godMode) { // any team's units can be *selected* // (whether they can be given orders // depends on our ability to play god) team = 0; lastTeam = teamHandler->ActiveTeams() - 1; } else { team = gu->myTeam; lastTeam = gu->myTeam; } for (; team <= lastTeam; team++) { for (CUnit* u: teamHandler->Team(team)->units) { const float4 vec(u->midPos, 1.0f); if (vec.dot4(planeRight) < 0.0f && vec.dot4(planeLeft) < 0.0f && vec.dot4(planeTop) < 0.0f && vec.dot4(planeBottom) < 0.0f) { if (KeyInput::GetKeyModState(KMOD_CTRL) && (selectedUnits.find(u) != selectedUnits.end())) { RemoveUnit(u); } else { AddUnit(u); unit = u; addedunits++; } } } } if (addedunits >= 2) { Channels::UserInterface->PlaySample(soundMultiselID); } else if (addedunits == 1) { Channels::UnitReply->PlayRandomSample(unit->unitDef->sounds.select, unit); } }