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);
            }
        }
    }
}