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); }
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); }
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); } } } }
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); }
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 ); } }
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; } }
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 ); }
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 ); } }
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] ) { } }
void DataStore::playPlayer(){ setPlayerState(getPlayingState()); }
void DataStore::pausePlayer(){ setPlayerState(getPausedState()); }
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; }