void RTSSelectedUnitsCommand::changeSelection(const std::vector<WorldObject *> &selection) { m_selection = selection; m_availableBuilds.clear(); std::vector<const std::vector<TypeUnite *>*> available; for (WorldObject * object : m_selection) { Unite *unite = dynamic_cast<Unite *>(object); if (unite) { available.push_back(&unite->type()->construit()); } else { available.clear(); break; } } for (auto * types : available) { for (TypeUnite * type : *types) { bool add = true; for (const std::vector<TypeUnite *> *typesToTest : available) { auto it = std::find(typesToTest->begin(), typesToTest->end(), type); if (it == typesToTest->end()) { add = false; break; } } if (add) { m_availableBuilds.insert(type); } } } }