Esempio n. 1
0
void Level::initialize(Theme aTheme, DimLevel aDimLevel, uint32_t aUpdateFreq) {
	_updateFreq = aUpdateFreq;
	_timeElapsed = 0;
	setTheme(aTheme);
	setDimLevel(aDimLevel);
	clearLevel();
}
Esempio n. 2
0
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.
}
Esempio n. 3
0
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;
}
Esempio n. 4
0
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();
}