void Level::initialize(Theme aTheme, DimLevel aDimLevel, uint32_t aUpdateFreq) { _updateFreq = aUpdateFreq; _timeElapsed = 0; setTheme(aTheme); setDimLevel(aDimLevel); clearLevel(); }
void Game::draw(sf::RenderWindow* window) { /*//if(playerLives==0) { // *///} switch (state) { case(LEVEL_ONE): if(levelLoaded==false) { LoadLevel(window,"level.dat"); } break; case(LEVEL_TWO): if(levelCleared==true) { clearLevel(); levelLoaded=false; } if(levelLoaded==false) { LoadLevel(window,"levelTwo.dat"); //levelLoaded=true; level2Cleared=true; } break; case(GAME_OVER): { endGame(window); printf("REACHED GAME OVER STAGE"); } } GameWindow->Clear( sf::Color( 255, 255, 255 ) ); GameWindow->Draw(backGroundSprite); Player1->draw(); beetle->draw(); for(vector<Block*>::iterator i= blockVec.begin();i!=blockVec.end();i++)//Iterator that goes through the vector of blocks { (*i)->draw(); } for(vector<Gem*>::iterator i= gemVec.begin();i!=gemVec.end();i++)//Iterator that goes through the vector of GEMS { (*i)->draw(); } exit->draw(); headsUpDisplay(); GameWindow->Display(); return;//Initialise sprites and draw them. }
bool World::loadNewLevel(std::string levelName, std::string tileset, bool doWeClearLevel) { privateLevelName = levelName; privateTileSet = tileset; //Clear the contents of our level. if (doWeClearLevel) { clearLevel(); } //Load new contents in its place. if (!processLevelData(levelName)) { return false; //bad level file } //Apply them to the engine. if (!load(tileset, sf::Vector2u(32, 32), 16, 16)) { return false; //Error no tile image } //Successfully loaded a new level. return true; }
void Game::update(sf::RenderWindow* window) { if(Clock.GetElapsedTime() > 10.F / FRAME_RATE) { beetle->update(); Player1->updatePlayer(); Player1->updateBoxes(); beetle->checkPlatforms( blockVec ); if((Player1->collidesWithExit(exit))) { if(state==LEVEL_ONE) { scoreLevel1=Player1->getPlayerHealth(); state = LEVEL_TWO; levelCleared=true;//clearLevel(); } } if((Player1->collidesWithExit(exit)) && (level2Cleared==true)) { //window->Close(); //printf("TEST"); state=GAME_OVER; } for(vector<Block*>::iterator it = blockVec.begin(); it != blockVec.end(); it++) { Player1->collidesWithBlock(*it); } for(vector<Gem*>::iterator it = gemVec.begin(); it != gemVec.end(); it++) { beetle->collidesWithGem(*it); } for(vector<Gem*>::iterator it = gemVec.begin(); it != gemVec.end();) { if( Player1->collidesWithGem(*it) ) { delete (*it); it = gemVec.erase(it); continue; } ++it; } if(Player1->playerHealth <0) { if(state==LEVEL_ONE) { clearLevel(); LoadLevel(window,"level.dat"); levelLoaded=false; state=LEVEL_ONE; } else if(state==LEVEL_TWO) { clearLevel(); LoadLevel(window,"level2.dat"); levelLoaded=false; state=LEVEL_TWO; } playerLives -=1; cout << "PLAYER LIVES " << playerLives << endl; } if(Player1->collidesWithBeetle(beetle)) { if(state==LEVEL_ONE) { clearLevel(); LoadLevel(window,"level.dat"); levelLoaded=false; state=LEVEL_ONE; } else if(state==LEVEL_TWO) { clearLevel(); LoadLevel(window,"level2.dat"); levelLoaded=false; state=LEVEL_TWO; } playerLives -=1; cout << "player LIVES : " << playerLives << endl; } if(playerLives==0) { state=GAME_OVER; } Player1->setCollisions(); Player1->attacked(beetle); getinput(); } return; }
void IslandGame::loadLevel( const char *filename ) { TiXmlDocument *xmlDoc = new TiXmlDocument( filename ); // clear the level clearLevel(); if (!xmlDoc->LoadFile() ) { errorMessage("ERR! Can't load %s\n", filename ); } TiXmlElement *xLevel; TiXmlNode *xText; xLevel = xmlDoc->FirstChildElement( "level" ); assert( xLevel ); m_mapName = xLevel->Attribute( "isleName" ); m_mapText = xLevel->Attribute( "intro" ); showHudText( m_mapName, m_mapText ); const char *waterTex = xLevel->Attribute( "water" ); if (waterTex) { char buff[200]; sprintf( buff, "gamedata/%s.png", waterTex ); m_waterTexId = loadTexture( buff ); } else { m_waterTexId = loadTexture( "gamedata/water.png", 4 ); } // Get width and height TiXmlElement *xTag; xTag = xLevel->FirstChildElement( "width" ); xText = xTag->FirstChild(); m_mapSizeX = atoi( xText->Value() ) / 16; xTag = xLevel->FirstChildElement( "height" ); xText = xTag->FirstChild(); m_mapSizeY = atoi( xText->Value() ) / 16; // Load elevations TiXmlElement *xTile; TiXmlElement *xElevTiles = xLevel->FirstChildElement( "elevTiles" ); xTile = xElevTiles->FirstChildElement( "tile" ); while (xTile) { int id, xpos, ypos; id = atoi( xTile->Attribute( "id" ) ); xpos = atoi( xTile->Attribute( "x" ) ) / 16; ypos = atoi( xTile->Attribute( "y" ) ) / 16; xTile = xTile->NextSiblingElement( "tile" ); MapSquare &m = m_map[xpos][ypos]; m.m_elevation = id; m.m_terrain = 0; // TODO get from terrain tileset } // Load terrain indices TiXmlElement *xTerrainTiles = xLevel->FirstChildElement( "terrainTiles" ); xTile = xTerrainTiles->FirstChildElement( "tile" ); while (xTile) { int id, xpos, ypos; id = atoi( xTile->Attribute( "id" ) ); xpos = atoi( xTile->Attribute( "x" ) ) / 16; ypos = atoi( xTile->Attribute( "y" ) ) / 16; _RPT3( _CRT_WARN, "loc %d %d id %d\n", xpos, ypos, id ); xTile = xTile->NextSiblingElement( "tile" ); MapSquare &m = m_map[xpos][ypos]; m.m_terrain = id; } // Load actors TiXmlElement *xActorLayer = xLevel->FirstChildElement( "actors" ); // Get the player start pos TiXmlElement *xActor = xActorLayer->FirstChildElement( "pstart" ); m_px = atoi( xActor->Attribute( "x" ) ) / 16; m_py = atoi( xActor->Attribute( "y" ) ) / 16; m_camTarg = vec3f( m_px + 0.5f, (m_map[m_px][m_py].m_elevation+1.0) * 0.3f, m_py + 0.5f ); m_camPos = m_camTarg; // first, make sure all master critters are loaded xActor = xActorLayer->FirstChildElement( "critter" ); while (xActor) { // If this is the master copy of the critter, load it if (!strcmp( xActor->Attribute("master"), "true" ) ) { Critter *mcrit = NULL; std::string critKey = xActor->Attribute("displayName" ); std::transform( critKey.begin(), critKey.end(), critKey.begin(), toupper ); // is it in the master list? if ( m_masterCritter.find( critKey ) == m_masterCritter.end() ) { // Nope, load it mcrit = new Critter(); mcrit->m_displayName = xActor->Attribute( "displayName" ); mcrit->m_level = atoi( xActor->Attribute( "level" ) ); mcrit->m_name = atoi( xActor->Attribute( "map" ) ); mcrit->m_behavior = atoi( xActor->Attribute( "behave" ) ); // DBG: mcrit->m_behavior = BEHAVIOR_SEEK_PLAYER; char buff[1000]; sprintf( buff, "gamedata/critter_%s.png", xActor->Attribute( "map" ) ); mcrit->m_critterTex = loadTexture( buff, 4 ); // store in master list m_masterCritter[ critKey ] = mcrit; } } xActor = xActor->NextSiblingElement( "critter" ); } // Now go through all the critters again and create them for (std::vector<Critter*>::iterator ci = m_critters.begin(); ci != m_critters.end(); ++ci ) { delete *ci; } //m_critters.clear( m_critters.begin(), m_critters.end() ); m_critters.clear(); xActor = xActorLayer->FirstChildElement( "critter" ); while (xActor) { Critter *mcrit = NULL; std::string critKey = xActor->Attribute("displayName" ); std::transform( critKey.begin(), critKey.end(), critKey.begin(), toupper ); std::map<std::string, Critter*>::iterator mcriti = m_masterCritter.find( critKey ); if ( mcriti == m_masterCritter.end() ) { DBG::warn( "Couldn't find master critter: %s\n", critKey.c_str() ); } else { mcrit = (*mcriti).second; Critter *crit = new Critter(); *crit = *mcrit; crit->m_x = atoi( xActor->Attribute( "x" ) ) / 16; crit->m_y = atoi( xActor->Attribute( "y" ) ) / 16; crit->m_dir = rand() % 4; m_critters.push_back( crit ); } xActor = xActor->NextSiblingElement( "critter" ); } // Now, load all the NPCs... npcs are simpler than critters for (std::vector<Npc*>::iterator ci = m_npcs.begin(); ci != m_npcs.end(); ++ci ) { delete *ci; } m_npcs.clear(); xActor = xActorLayer->FirstChildElement( "npc" ); while (xActor) { Npc *npc = new Npc(); npc->m_x = atoi( xActor->Attribute( "x" ) ) / 16; npc->m_y = atoi( xActor->Attribute( "y" ) ) / 16; npc->m_displayName = xActor->Attribute("displayName" ); npc->m_name = xActor->Attribute( "map" ); npc->m_speech = xActor->Attribute( "speech" ); char buff[1000]; sprintf( buff, "gamedata/npc_%s.png", xActor->Attribute( "map" ) ); npc->m_personTex = loadTexture( buff, 4 ); m_npcs.push_back( npc ); xActor = xActor->NextSiblingElement( "npc" ); } // Finally, fill in any portal info xActor = xActorLayer->FirstChildElement( "portal" ); while (xActor) { int x = atoi( xActor->Attribute( "x" ) ) / 16; int y = atoi( xActor->Attribute( "y" ) ) / 16; m_map[x][y].m_portal = strdup( xActor->Attribute("dest") ); xActor = xActor->NextSiblingElement( "portal" ); } // And finally, rebuild the graphics buildMap(); }