Exemplo n.º 1
0
void Character::init(b2World* world) {

	m_sprite = new Sprite();
	player = XmlLocalStorage::getInstance()->getStringForKey("selectedPlayer").c_str();

	m_sprite->createWithPhysics(
		world,
		Vec2(90, 125),
		Vec2(150, 820),
		XmlLocalStorage::getInstance()->getStringForKey(player.c_str()),
		14,
		1.0f,
		0.0f,
		true);

	m_body = m_sprite->getCollisionBody();

	b2Filter playerfilter;
	playerfilter.maskBits = PLAYER_FILTER;

	m_body->GetFixtureList()->SetFilterData(playerfilter);
	m_body->SetUserData(m_sprite);
	m_body->SetTransform(
		b2Vec2(m_sprite->getPosition().x_, m_sprite->getPosition().y_),
		0
		);

	playerPosY = m_sprite->getPosition().y_;
	setPlayerState(ALIVE);
}
Exemplo n.º 2
0
void StageManager::setPlayerState(int idx, int state)
{
	if (m_GameScene == nullptr)
	{
		return;
	}
	auto layer = m_GameScene->getGameLayer();
	if (layer == nullptr)
	{
		return;
	}
	layer->setPlayerState(idx, state);
}
Exemplo n.º 3
0
void PlayerInputSystem::update(double deltaTime)
{
    auto entities = getEntities();
    for(auto e : entities)
    {
        auto& playerComp = e.getComponent<PlayerComponent>();
        auto& velocity = e.getComponent<VelocityComponent>().velocity;

        bool shootKeyPressed = sf::Keyboard::isKeyPressed(playerComp.controls.shoot);


        if(sf::Keyboard::isKeyPressed(playerComp.controls.left))
        {
            std::cout << "Left key pressed\n";
            velocity.x = -playerComp.baseSpeed;
            setPlayerState(e, playerComp, shootKeyPressed ? PlayerComponent::State::MOVE_LEFT_SHOOT : PlayerComponent::State::MOVE_LEFT);
        }
        else if(sf::Keyboard::isKeyPressed(playerComp.controls.right))
        {
            std::cout << "Right key pressed\n";
            velocity.x = playerComp.baseSpeed;
            setPlayerState(e, playerComp, shootKeyPressed ? PlayerComponent::State::MOVE_RIGHT_SHOOT : PlayerComponent::State::MOVE_RIGHT);
        }
        else
        {
            velocity.x = 0;
            if(shootKeyPressed) 
            {
                std::cout << "Shoot key pressed\n";
                setPlayerState(e, playerComp, PlayerComponent::State::SHOOT);
            }
            else
            {
                setPlayerState(e, playerComp, PlayerComponent::State::DEFAULT_STATE); 
            }
        }
    }
}
Exemplo n.º 4
0
void Character::slide() {
	setPlayerState(SLIDING);
	int x = m_sprite->getPosition().x_;

	int pos = x += 30;
	m_sprite->setPositionX(pos);
	m_sprite->setPositionY(865);

	m_body->SetTransform(
		b2Vec2(m_sprite->getPosition().x_, m_sprite->getPosition().y_),
		0
		);

	m_sprite->updateTexure(
		Vec2(130, 75),
		m_sprite->getPosition(),
		XmlLocalStorage::getInstance()->getStringForKey("player2slide"), 1);
}
Exemplo n.º 5
0
void Character::stopSlide() {
	setPlayerState(SLIDING);
	int x = m_sprite->getPosition().x_;

	m_sprite->updateTexure(
		Vec2(90, 125),
		m_sprite->getPosition(),
		XmlLocalStorage::getInstance()->getStringForKey(player.c_str()), 14);

	while (x > 100) {

		int pos = x -= 30;
		m_sprite->setPositionX(pos);

		m_body->SetTransform(
			b2Vec2(m_sprite->getPosition().x_, m_sprite->getPosition().y_),
			0
			);
	}
}
Exemplo n.º 6
0
void Player::frameEvent(float time)
{
    for (int i = 0; i < NUM_POWERUP_BOARDS; i++)
    {
        // this method will return quickly if the powerup in question is already disabled
        if ( mPowerupStates[i].timeElapsed(mPowerupBars[i], time) )
        {
            reLayoutPowerupBoards();
        }
    }

    // Remove any powerups that have expired
    for( int i = 0; i < POWERUP_COUNT; i ++ )
    {
        if( getCar() == NULL )
        	continue;

    	if( powerupTimers[i] != 0 && RakNet::GreaterThan( RakNet::GetTimeMS(), powerupTimers[i] ) )
        {
            switch( i )
            {
            case POWERUP_MASS:
                getCar()->resetMass();
                getCar()->resetEngineForce();
                break;
            case POWERUP_SPEED:
                getCar()->resetEngineForce();
                break;
            }

            powerupTimers[i] = 0;
        }
    }

    if( this == GameCore::mPlayerPool->getLocalPlayer() && getPlayerState() != PLAYER_STATE_SPECTATE && mLastKiller != NULL && RakNet::GreaterThan( RakNet::GetTimeMS(), mTimeLastKilled+3000 ) )
    {
        setPlayerState( PLAYER_STATE_SPECTATE );
        GameCore::mPlayerPool->setSpectating( mLastKiller->getPlayerGUID() );
        mLastKiller = NULL;
    }
}
Exemplo n.º 7
0
void Character::jump() {


		setPlayerState(JUMPING);

		m_sprite->updateTexure(
			Vec2(122, 112),
			m_sprite->getPosition(),
			XmlLocalStorage::getInstance()->getStringForKey("player2jump"), 2);

		playerPosY -= 200;

		m_sprite->setPositionY(playerPosY);

		m_sprite->setBoundingBox(m_sprite->getPosition(), m_sprite->getContentSize());
		m_body->SetTransform(
			b2Vec2(m_sprite->getPosition().x_, m_sprite->getPosition().y_),
			0
			);

}
Exemplo n.º 8
0
void Character::fall() {
	setPlayerState(FALLING);
	playerPosY = m_sprite->getPosition().y_;

	m_sprite->updateTexure(
		Vec2(90, 125),
		m_sprite->getPosition(),
		XmlLocalStorage::getInstance()->getStringForKey(player.c_str()), 14);

	while (playerPosY < 820) {


		int pos = playerPosY += 30;
		m_sprite->setPositionY(pos);

		m_sprite->setBoundingBox(m_sprite->getPosition(), m_sprite->getContentSize());
		m_body->SetTransform(
			b2Vec2(m_sprite->getPosition().x_, m_sprite->getPosition().y_),
			0
			);
	}
}
Exemplo n.º 9
0
static void
idle(void)
{
    static float lastT = SDL_GetTicks();
    float ticks;
    ticks = SDL_GetTicks() - lastT;
    lastT = SDL_GetTicks();

    /*
    * WORLD HANDLING
    */
    ptl::tickParticles();
    prjctl::tickProjectiles(ticks / 100.0);
    rck::tickRocks(ticks / 1000.0);

    rect4f plLimits;
    switch(getPlayerState()) {
        case PLST_DEAD:
            setPlayerState(PLST_NEEDSPAWN);
            playerLives --;
            break;

        case PLST_NEEDSPAWN:
            plLimits = player.getLimits();
            for(int i=0; i < 10; i ++) {
                float x = getRndFloat(plLimits.x1, plLimits.x2);
                float y = getRndFloat(plLimits.y1, plLimits.y2);

                if(rck::closestRockDistance(pos2f(x, y)) > 4.0) {
                    player.setPos(pos2f(x, y));
                    player.setSpeed(vector2f(0.0, 0.0));
                    setPlayerState(PLST_NORMAL);
                }
            }
            break;

        default:
        case PLST_NORMAL:
            if(player.checkCollide()) {
                setPlayerState(PLST_DEAD);
            }

            player.updatePos(ticks / 10.0);
            player.dampenSpeed(ticks / 50000.0);
            break;
    }

    if(rck::getLiveRocks() == 0) {
        curLvl ++;
        snd::playSound(snd::NEXT_LEVEL);
        loadLevel(curLvl);
    }

    /*
    * KEY HANDLING
    */
    Uint8 *keys;
    keys = SDL_GetKeyState(NULL);

    if ( keys[SDLK_ESCAPE] ) {
      mainloopDone = 1;
    }
    if ( keys[SDLK_UP] ) {
        player.thrust(ticks / 10000.0);

        snd::startSoundOnce(snd::ENGINE);

        std::deque<ptl::cParticle> newPtls;
        for(int i = 0; i < 50; i ++)
        {
            float rndFloat = getRndFloat((player.getAngle()+200.0)*M_PI/180.0, (player.getAngle()+340.0)*M_PI/180.0);
            ptl::cParticle newPtl(  getRndFloat(0.2, 0.4),
                                    1.0, getRndFloat(0.0, 0.5), 0.0,
                                    cVertex(player.getPos().x + cos((player.getAngle()+90.0)*M_PI/180.0) * getRndFloat(1.1, 1.5), player.getPos().y + sin((player.getAngle()-90.0)*M_PI/180.0) * getRndFloat(1.1, 1.5),  - 0.5),
                                    cVertex(-player.getSpeed().x*10.0 + cos(rndFloat+M_PI) * 5, -player.getSpeed().y*10.0 + sin(rndFloat)*5, getRndFloat(-2.0, 0.0)),
                                    cVertex(0.0, 0.0, 0)
                                );
            newPtls.push_back(newPtl);
        }
        ptl::createParticles(newPtls);
    }
    if ( !keys[SDLK_UP] ) {
        snd::stopSound(snd::ENGINE);
    }
    if ( keys[SDLK_DOWN] ) {

    }
    if ( keys[SDLK_LEFT] ) {
        player.turn(LEFT, ticks / 5.0);
    }
    if ( keys[SDLK_RIGHT] ) {
        player.turn(RIGHT, ticks / 5.0);
    }
    if ( keys[SDLK_SPACE] ) {
        static float shotTimer = 0;

        if(SDL_GetTicks() - shotTimer > 500) {
            snd::playSound(snd::LASER);

            prjctl::cProjectile newPrjctl;
            std::deque<prjctl::cProjectile> newPrjctls;

            newPrjctl.setPos(pos2f(player.getPos().x - cos((player.getAngle()+90.0)*M_PI/180.0) * 1.3, player.getPos().y - sin((player.getAngle()-90.0)*M_PI/180.0) * 1.3));
            newPrjctl.setTtl(20.0);
            newPrjctl.setSpeed(vector2f(cos((player.getAngle()-90.0)*M_PI/180.0), sin((player.getAngle()+90.0)*M_PI/180.0)));
            newPrjctl.setAngle(player.getAngle());

            newPrjctls.push_back(newPrjctl);

            prjctl::createProjectiles(newPrjctls);

            shotTimer = SDL_GetTicks();
        }
    }
    if ( keys[SDLK_z] ) {

    }
}
Exemplo n.º 10
0
void DataStore::playPlayer(){
  setPlayerState(getPlayingState());
}
Exemplo n.º 11
0
void DataStore::pausePlayer(){
  setPlayerState(getPausedState());
}
Exemplo n.º 12
0
int main(int argc, char *argv[])
{

    char **playersNameList;
    int totalPlayersNumber;
    int turn, i;
    char buffer[BUFF_SIZE];
    FILE *configFile;

    /* legge gli argomenti */
    char **name1, **name2;

    if (argc < 4) {
        fprintf(stderr,
                "ERROR: Wrong number of arguments. \n USAGE: %s\n",
                USAGE);
        exit(EXIT_FAILURE);
    }
    playersNameList = argv + 3;
    totalPlayersNumber = argc - 3;

    /* controlla se ci sono due giocatori con lo stesso nome */
    for (name1 = playersNameList; *name1; name1++)
        for (name2 = name1 + 1; *name2; name2++)
            if (strcmp(*name1, *name2) == 0) {
                fprintf(stderr, "ERROR: found two player with the"
                        "same name \"%s\"\n", *name1);
                exit(EXIT_FAILURE);
            }
    initIoInterface(argv[2]);
    /* crea e inizializza le strutture dati per i giocatori */
    initPlayersManager(totalPlayersNumber);
    for (; *playersNameList; playersNameList++)
        addPlayer(*playersNameList);

    initBoard();
    /*
     * legge il file di configurazione secondo il formato: 
     *     numero_casella:descrizione della prova\n
     * e aggiunge le descrizioni al tabellone
     */
    if ((configFile = fopen(argv[1], "r")) == NULL) {
        printErr("ERROR: error while opening configuration file\n");
        exit(EXIT_FAILURE);
    }
    while (fgets(buffer, BUFF_SIZE, configFile)) {
        char *description;
        int boxNumber;
        /* legge il numero di casella */
        if ((boxNumber = atoi(buffer)) <= 0) {
            printErr("ERROR:invalid box num(\"%s\") in"
                     " configuration file\n", buffer);
            exit(EXIT_FAILURE);
        }
        /* aggiunge una nuova casella con la relativa descrizione */
        if ((description = strchr(buffer, ':')) == NULL) {
            printErr("ERROR: missing ':' in configuration file\n");
            exit(EXIT_FAILURE);
        }
        addBox(boxNumber, description + 1);
    }
    if (getTotalBoxesNumber() == 0) {
        printErr("ERROR: invalid configuration file\n");
        exit(EXIT_FAILURE);
    }
    fclose(configFile);
    printBoard();
    showGame();
    /* avvia la simulazione del gioco */
    srand(time(NULL));
    for (turn = 0; !allPlayersDone(); turn++) {
        if (!nextStep())
            return EXIT_SUCCESS;
        printMessage("\n**************************************\n");
        printMessage("turno %d", turn + 1);
        printMessage("\n**************************************\n");
        showGame();
        /*
         * per ogni giocatore G che non ha terminato il gioco: 
         * 1. se G  e' fermo per un turno cambia il suo stato in
         *      modo che al turno successivo venga rimesso in gioco 
         * 2. altrimenti viene lanciato il dado, mosso il giocatore
         *              e visualizzata la sua prova 
         */
        while (nextPlayer()) {
            int state = getPlayerState();

            if (state == ACTIVE || state == TEST_PASSED
                || state == TO_BE_ACTIVATED) {
                if (state != ACTIVE)
                    setPlayerState(ACTIVE, 0);
                movePlayer((rand() % 6) + 1);
                if (getPlayerBox() > getTotalBoxesNumber())
                    setPlayerState(DONE, turn);
                else
                    printMessage("player %s: \"%s\"\n",
                                 getPlayerName(),
                                 getDescription(getPlayerBox()));
            } else if (state == OUT_OF_TURN)
                setPlayerState(TO_BE_ACTIVATED, 0);
        }
        showGame();
        /*
         * Legge e registra l'esito di tutte le prove sostenute nel
         * turno corrente dai giocatori 
         */
        for (i = getActivePlayersNumber(); i > 0; i--) {
            int playerNumber;
            bool result;

            do {
                result = askPlayerResult(&playerNumber);
                if (playerNumber > totalPlayersNumber)
                    printErr("WARNING: player number %d out of "
                             "bounds [1; %d]\n", playerNumber,
                             totalPlayersNumber);
                else {
                    setCurrentPlayer(playerNumber);
                    if (getPlayerState() != ACTIVE)
                        printErr("WARNING: player number %d not "
                                 "valid because player:"
                                 "\n\t-won"
                                 "\n\t-is out of turn"
                                 "\n\t-already passed the test\n",
                                 playerNumber);
                }
            }
            while (playerNumber > totalPlayersNumber
                   || getPlayerState() != ACTIVE);
            if (result)
                setPlayerState(TEST_PASSED, 0);
            else
                setPlayerState(OUT_OF_TURN, 0);
        }
    }
    printScore();
    closeIoInterface();

    return EXIT_SUCCESS;
}