bool Manager::_pushState( IState* newstate, IProgressState* newpstate ) { if( !newstate ) return( false ); if( !newpstate ) newpstate = m_progressStateDefault; IState* c = m_states->current(); if( m_states->push( newstate ) ) { if( !m_changeState && c ) { m_engine->resetTimer(); c->onExit(); m_engine->resetTimer(); } m_actors->push( xnew ActorManager() ); Global::use().actors = m_actors->current(); m_controls->push( xnew ControlManager() ); Global::use().controls = m_controls->current(); m_collisions->push( xnew CollisionManager() ); Global::use().collisions = m_collisions->current(); if( newpstate ) { m_loading = true; newpstate->onEnter(); m_loading = false; } m_engine->resetTimer(); newstate->onEnter( newpstate ); m_engine->resetTimer(); if( newpstate ) { m_loading = true; newpstate->onExit(); m_loading = false; m_assetsLoading->releaseLevel( m_states->count() ); } return( true ); } return( false ); }
int GestionBateau::creerBateau(int tour,int dif) { int nombre_bateau; switch(tour)//Le nombre de bateau dépend de la difficulté et du tour { case 1://tour 1 switch(dif) { case 1://facile nombre_bateau = 4; break; case 2://moyen nombre_bateau = 5; break; case 3://difficile nombre_bateau = 7; break; } break; case 2: switch(dif) { case 1: nombre_bateau = 6; break; case 2: nombre_bateau = 8; break; case 3: nombre_bateau = 10; break; } break; case 3: switch(dif) { case 1: nombre_bateau = 9; break; case 2: nombre_bateau = 11; break; case 3: nombre_bateau = 13; break; } break; case 4: switch(dif) { case 1: nombre_bateau = 11; break; case 2: nombre_bateau = 13; break; case 3: nombre_bateau = 16; break; } break; default://tour >4 switch(dif) { case 1: nombre_bateau = 12; break; case 2: nombre_bateau = 16; break; case 3: nombre_bateau = 20; break; } break; } for(int i=0;i<nombre_bateau;i++) {//Creation des bateaux CollisionManager colManager = CollisionManager(sf::Vector2f(800,600)); //On prend une case d'eau au hasard int nbWaterCase = Map::Inst().getNbWaterCases(); int nb_rand = rand()%nbWaterCase; sf::Vector2f vectorxy = Map::Inst().getRandomWaterCase(nb_rand); bool bool_ok = true; bool bool_col = false; //on cree un bateau temporaire a placer correctement Ship ship_temp = Ship(vectorxy,30,25,VITESSE_BATEAU); while(bool_ok)//Tant que la position de départ du bateau n'est pas valide { bool_ok=false; //On vérifie que le bateau n'entre pas en collision avec les frontieres if(colManager.testCollisionXShip(ship_temp) or colManager.testCollisionYShip(ship_temp)) { bool_ok = true; } //On verifie que la position initiale n'entre en collision avec aucun autre bateau int i=0; while(i<tab_ship.size()) { bool_col = colManager.testCollision(ship_temp,tab_ship[i]); if(bool_col) { bool_ok=true; } i++; } if(bool_ok)//si le placement est invalide on en trouve un nouveau alétoirement { int nb_rand = rand()%nbWaterCase; sf::Vector2f vectorxy = Map::Inst().getRandomWaterCase(nb_rand); ship_temp.setPos(vectorxy); } } //Quand le bateau est bien placé , on l'ajoute au tableau tab_ship.push_back(ship_temp); } return 1; }