示例#1
0
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 );
}
示例#2
0
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;
}