/** @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