Example #1
0
/** @brief rajoute un tourelle à la case specifiée
    @param turretType le type de la tourelle
    @param mx le x de la case
    @param my le y de la case
    @return success un bool selon si l'opération a réussi ou pas
*/
bool Map::addTurretAt(TYPE::TURRET turretType,float mx,float my) {

    // Vérifie s'il est possible de poser une tourelle à cet emplacement
    if( this->getTileAt(mx/32,my/32).turretAllowed()) {

        // On pose une nouvelle tourelle du type souhaité ...
        // ... si le joueur a assez d'argent (le cas échant, il est débité aussitôt)
        Defenser* newTurret;
        bool enoughMoney = false;

        switch(turretType) {

            // Pistolet à eau
            case TYPE::PISTOLET_A_EAU:
            if(_player->payMoney(WaterGun::getBasicCost()))
            {
                enoughMoney = true;
                newTurret = new WaterGun(((int)(mx/32))*32,
                                         ((int)(my/32))*32,
                                         1,
                                         this);
            }
            break;

            // Lance-pierres
            case TYPE::LANCE_PIERRES:
            if(_player->payMoney(Slingshot::getBasicCost()))
            {
                enoughMoney = true;
                newTurret = new Slingshot(((int)(mx/32))*32,
                                         ((int)(my/32))*32,
                                         1,
                                         this);
            }
            break;

            // Paintball
            case TYPE::PAINTBALL:
            if(_player->payMoney(Paintball::getBasicCost()))
            {
                enoughMoney = true;
                newTurret = new Paintball(((int)(mx/32))*32,
                                         ((int)(my/32))*32,
                                         1,
                                         this);
            }
            break;

            // Pétanque
            case TYPE::PETANQUE:
            if(_player->payMoney(Bowling::getBasicCost()))
            {
                enoughMoney = true;
                newTurret = new Bowling(((int)(mx/32))*32,
                                         ((int)(my/32))*32,
                                         1,
                                         this);
            }
            break;

            // Musicien
            case TYPE::MUSICIEN:
            if(_player->payMoney(Musician::getBasicCost()))
            {
                enoughMoney = true;
                newTurret = new Musician(((int)(mx/32))*32,
                                         ((int)(my/32))*32,
                                         1,
                                         this);
                dynamic_cast<Musician*>(newTurret)->applyBonuses(); // Met à jour le bonus des tourelles voisines
            }
            break;

            // Type inconnu ~ erreur
            default:
            break;

         } // eos

        // Ajout de la tourelle et mise à jour des informations de la map
        if(enoughMoney) {
            // Ajout sur la map
            this->addItem(newTurret);
            // Sauvegarde dans la liste des tourelles
            _turrets.push_back(newTurret);
            // Gestion des clics sur la tourelle
            QObject::connect(this,SIGNAL(setTurretsSelected(bool)),newTurret,SLOT(setIsSelected(bool)));

            // Mise à jour des bonus
            emit updateBonuses();

            // On remet à zéro le choix du joueur
            _player->setTurretChoice(TYPE::NONE);

            // Affichage des infos + activation des boutons
            emit turretInfosRequest(newTurret->getInfos());
            emit disableTurretUpgradeButton(false);
            emit disableTurretSellButton(false);


            return true; // Succès
        }

    } // End test case libre