Skip to content
Snippets Groups Projects
Commit 4a3fa89d authored by mathvdt's avatar mathvdt
Browse files

essai de detruire une structure (pb pas de delete de la structure sinon il plante)

parent bf28994f
Branches menu
No related tags found
No related merge requests found
......@@ -76,6 +76,7 @@ public:
// Setter
void ajouterConstructionCaseCarte(Structure *s,
const Vector2u &pos);
bool supprimerConstructionCaseCarte(Structure *s);
// Convertisseur coordonnées
static Vector2u matriceToCarte(const Vector2u &cMat);
......
......@@ -92,6 +92,7 @@ public:
TYPE_SOL typeSol = TYPE_SOL::Vierge);
void ajouterConstruction(Structure *s);
void retirerConstruction();
};
/***************************************************/
......
......@@ -93,6 +93,8 @@ private:
void validerCraft(Structure *s);
void resetCraft(Structure *s);
void detruireStructure(Structure *s);
bool integrationStructureVoisinage();
void dessinerOverlay();
......
......@@ -90,6 +90,7 @@ public:
// Gestion des structures connectées
virtual bool connecterStructure(Structure *s, bool commeSortie = true, bool connexionAutreSens = false);
virtual bool deconnecterStructure(Structure *s);
bool deconnecterToutesLesStructures();
virtual bool checkConnexionPossible(Structure *s, bool commeSortie);
virtual bool updateOrientation() = 0;
......
......@@ -71,6 +71,8 @@ void Batiment::dechargerMemoireBatiments()
*/
bool Batiment::isBatiment(Structure *s)
{
if (s == nullptr)
return false;
Batiment *isTypeBatiment = dynamic_cast<Batiment *>(s);
return isTypeBatiment != nullptr;
}
......
......@@ -255,6 +255,22 @@ void Carte::ajouterConstructionCaseCarte(Structure *s, const Vector2u &posCarte)
// Si c'est pipeline gerer connexion
}
bool Carte::supprimerConstructionCaseCarte(Structure *s)
{
for (uint y = 0; y < _nbLignesGrille; ++y)
{
for (uint x = 0; x < _nbColonnesGrille; ++x)
{
if (_grille[y][x].getConstruction() == s)
{
_grille[y][x].retirerConstruction();
return true;
}
}
}
return false;
}
/*******************************************************/
/**
......
......@@ -218,3 +218,13 @@ void CaseMap::ajouterConstruction(Structure *s)
return;
_construction = s;
}
/**
* @brief Retire une structure de la case.
*
* @param Structure * - *s*
*/
void CaseMap::retirerConstruction()
{
_construction = nullptr;
}
......@@ -16,8 +16,8 @@
ContextGlobal *ContextGlobal::_singleton = ContextGlobal::getInstance();
uint ContextGlobal::_nbTicksMax = 4; // = 4
// Time ContextGlobal::_deltaTick = seconds(1.f);
Time ContextGlobal::_deltaTick = seconds(.25f); // = 250ms
// Time ContextGlobal::_deltaTick = seconds(.05f); // = 50ms
// Time ContextGlobal::_deltaTick = seconds(.25f); // = 250ms
Time ContextGlobal::_deltaTick = seconds(.05f); // = 50ms
ContextGlobal::ContextGlobal()
{
......
......@@ -456,6 +456,10 @@ void Manager::updateEvent()
cerr << "EVENT RESET CRAFT" << endl;
resetCraft(structSelect);
break;
case GameEvent::Detruire:
cerr << "EVENT DETRUIRE STRUCUTRE" << endl;
detruireStructure(structSelect);
break;
default:
break;
......@@ -572,3 +576,16 @@ void Manager::resetCraft(Structure *s)
}
contextGlobal->resetGameEvent();
}
/**
* @brief Detruite la structure construite.
*
* @param Structure * - *s*
*/
void Manager::detruireStructure(Structure *s)
{
s->deconnecterToutesLesStructures();
contextGlobal->setCaseSelectionnee(true);
contextGlobal->resetGameEvent();
_carte->supprimerConstructionCaseCarte(s);
}
\ No newline at end of file
......@@ -657,6 +657,8 @@ bool Menu::setBoutonsClick()
{
btn->setState(BoutonState::Pressed);
changement = true;
cerr << btn->getAction() << std::endl;
contextGlobal->setGameEvent(btn->getAction());
}
else if (btn->getState() == BoutonState::Active)
{
......@@ -691,6 +693,9 @@ bool Menu::setBoutonsClick()
}
}
// if (_sectionMenu == SectionMenu::BatimentSelectCraftDefine)
// {
// }
return changement;
}
......
......@@ -63,13 +63,13 @@ Structure::~Structure()
_nbStructures--;
delete _sprite;
// Deconnecte tous les structures
// Plus besoin vu que c'est un tableau
deconnecterToutesLesStructures();
// Plus besoin vu que c'est un tableau ?
// cerr<< "~Structure(), id : " << _idStructure << endl;
}
void Structure::init()
{
}
/*******************************************************/
......@@ -394,7 +394,7 @@ bool Structure::setSortie(Structure *s)
* @brief Deconnecte une structure
*
* @param Structure - *s*
* @return true - *Si LES structureS ont bien été déconnectées correctement*
* @return true - *Si la structure a bien été déconnectée correctement*
* @return false - *S'il y a eu un soucis dans la déconnexion*
*/
bool Structure::deconnecterStructure(Structure *structADeconnectee)
......@@ -409,7 +409,7 @@ bool Structure::deconnecterStructure(Structure *structADeconnectee)
if (c.structure == structADeconnectee)
{
c.structure = nullptr;
c.direction = DIRECTION::NULLDIRECTION;
// c.direction = DIRECTION::NULLDIRECTION;
c.type = TypeConnexion::Undefined;
deco = true;
}
......@@ -433,6 +433,46 @@ bool Structure::deconnecterStructure(Structure *structADeconnectee)
return deco;
}
/**
* @brief Deconnecte TOOUTES les structures connectées
*
// * @return true - *Si LES structureS ont bien été déconnectées correctement*
// * @return false - *S'il y a eu un soucis dans les déconnexions*
*/
bool Structure::deconnecterToutesLesStructures()
{
bool deco = true;
std::list<Structure *> structDeco;
// Déco dans le sens principale
for (auto &c : _connexions)
{
if (c.structure != nullptr)
{
structDeco.push_back(c.structure);
c.structure = nullptr;
// c.direction = DIRECTION::NULLDIRECTION;
c.type = TypeConnexion::Undefined;
}
}
// Déco dans l'autre sens
for (auto &s : structDeco)
{
for (auto &c : s->_connexions)
{
if (c.structure == this)
{
c.structure = nullptr;
c.direction = DIRECTION::NULLDIRECTION;
c.type = TypeConnexion::Undefined;
deco = true;
}
}
}
// Deconnexion ok dans les deux sens
return deco;
}
/*******************************************************/
/*******************************************************/
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment