void onUpdate() {
			if (worldnametb.pressed && !worldnametbChanged) {
				worldnametb.text = "";
				worldnametbChanged = true;
			}
			if (worldnametb.text == "" || !worldnametbChanged) okbtn.enabled = false;
			else okbtn.enabled = true;
			if (okbtn.clicked) {
				if (worldnametb.text != "") {
					World::worldname = worldnametb.text;
					GUI::ClearStack();
					GameView();
				}
				else {
					GUI::PopPage();
				}
			}
			AudioSystem::SpeedOfSound = AudioSystem::Air_SpeedOfSound;
			EFX::EAXprop = Generic;
			EFX::UpdateEAXprop();
			float Pos[] = { 0.0f,0.0f,0.0f };
			AudioSystem::Update(Pos, false, false, Pos, false, false);
			if (backbtn.clicked) GUI::PopPage();
			inputstr = "";
		}
Exemple #2
0
bool LoadGameView::Run()
{
	LastSelected=0;
	CurrentlySelected=0;
	Exit=false;
	Draw(true);
	while(true)
	{
		Draw(false);
		if(!Update())
		{
			// Escape has been pressed
			if(Exit)
			{
				return true;
			}
			// If there are available saves
			if(FileNames.size()>0)
			{
				// Create a new game
				GameView Game=GameView();
				// Load the data
				if(!LoadGameData(&Game, FileNames[CurrentlySelected]))
				{
					// Loading failed
					SetColour(GREY, BLACK);
					Clear();
					// Display error message
					std::cout<<"The game failed to load."<<std::endl;
					std::cout<<"Press any key to continue...";
					_getch();

					Draw(true); // Redraw loading window
				}
				else
				{
					// Run the loaded game
					return Game.Run();
				}
			}
		}
	}
}
Exemple #3
0
		void onUpdate() {

			AudioSystem::SpeedOfSound = AudioSystem::Air_SpeedOfSound;
			EFX::EAXprop = Generic;
			EFX::UpdateEAXprop();
			float Pos[] = { 0.0f,0.0f,0.0f };
			AudioSystem::Update(Pos, false, false, Pos, false, false);


			worldcount = (int)worldnames.size();
			leftp = static_cast<int>(windowwidth / 2.0 / stretch - 250);
			midp = static_cast<int>(windowwidth / 2.0 / stretch);
			rightp = static_cast<int>(windowwidth / 2.0 / stretch + 250);
			downp = static_cast<int>(windowheight / stretch - 20);

			vscroll.barheight = (downp - 72 - 48)*(downp - 36 - 40) / (64 * worldcount + 64);
			if (vscroll.barheight > downp - 36 - 40) {
				vscroll.enabled = false;
				vscroll.barheight = downp - 36 - 40;
			}
			else vscroll.enabled = true;

			trs = vscroll.barpos*(64 * worldcount + 64) / (downp - 36 - 40);
			mouseon = -1;
			if (mx >= midp - 250 && mx <= midp + 250 && my >= 48 && my <= downp - 72) {
				for (int i = 0; i < worldcount; i++) {
					if (my >= 48 + i * 64 - trs&&my <= 48 + i * 64 + 60 - trs) {
						if (mb == 1 && mbl == 0) {
							chosenWorldName = worldnames[i];
							selected = i;
						}
						mouseon = i;
					}
				}
				if (my >= 48 + worldcount * 64 - trs&&my <= 48 + worldcount * 64 + 60 - trs) {
					if (mb == 0 && mbl == 1) {
						createworldmenu();
						refresh = true;
					}
					mouseon = worldcount;
				}
			}
			if (enterbtn.clicked) {
				World::worldname = chosenWorldName;
				GUI::ClearStack();
				GameView();
			}
			if (deletebtn.clicked) {
				//删除世界文件
				system((string("rd /s/q \"Worlds\\") + chosenWorldName + "\"").c_str());
				deletebtn.clicked = false;
				World::worldname = "";
				enterbtn.enabled = false;
				deletebtn.enabled = false;
				refresh = true;
			}
			if (refresh) {
				worldnames.clear();
				thumbnails.clear();
				texSizeX.clear();
				texSizeY.clear();
				worldcount = 0;
				selected = -1;
				mouseon = -1;
				vscroll.barpos = 0;
				chosenWorldName = "";
				//查找所有世界存档
				Textures::TEXTURE_RGB tmb;
				long hFile = 0;
				_finddata_t fileinfo;
				if ((hFile = _findfirst("Worlds\\*", &fileinfo)) != -1) {
					do {
						if ((fileinfo.attrib &  _A_SUBDIR)) {
							if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0) {
								worldnames.push_back(fileinfo.name);
								std::fstream file;
								file.open(("Worlds\\" + string(fileinfo.name) + "\\Thumbnail.bmp").c_str(), std::ios::in);
								thumbnails.push_back(0);
								texSizeX.push_back(0);
								texSizeY.push_back(0);
								if (file.is_open()) {
									Textures::LoadRGBImage(tmb, "Worlds\\" + string(fileinfo.name) + "\\Thumbnail.bmp");
									glGenTextures(1, &thumbnails[thumbnails.size() - 1]);
									glBindTexture(GL_TEXTURE_2D, thumbnails[thumbnails.size() - 1]);
									glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
									glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
									glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, tmb.sizeX, tmb.sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, tmb.buffer.get());
									texSizeX[texSizeX.size() - 1] = tmb.sizeX;
									texSizeY[texSizeY.size() - 1] = tmb.sizeY;
								}
								file.close();
							}
						}
					} while (_findnext(hFile, &fileinfo) == 0);
					_findclose(hFile);
				}
				refresh = false;
			}
			enterbtn.enabled = chosenWorldName != "";
			deletebtn.enabled = chosenWorldName != "";
			if (backbtn.clicked) GUI::PopPage();
		}
static GameView new_gameview(int width, int height) {
	return GameView(width, height);
}
int main(int argc, char** argv)
{
    sf::RenderWindow App(sf::VideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 32), "Breakout Clone");
    GAME_STATE state = START;
  
    sf::View GameView(sf::FloatRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
  
    // Set the view
    App.setView(GameView);

    // Create level
    game::Level level;
    
    sf::Clock clock;
    clock.restart();

    sf::Clock gameOverClock;
  
    while(App.isOpen())
    {
	sf::Time time = clock.getElapsedTime();
	clock.restart();
	
	sf::Event evt;
	while(App.pollEvent(evt))
	{
	    if(evt.type == sf::Event::Closed)
		App.close();
	    
	    if(evt.type == sf::Event::KeyPressed)
	    {
		if(evt.key.code == sf::Keyboard::Escape) App.close();
		if(evt.key.code == sf::Keyboard::Return) 
		{
		    if(state == START)
		    {
			state = RUNNING; 
			level.SetupScene(&App);
		    }
		}
	    }
	    
	    if(evt.type == sf::Event::Resized)
	    {
		std::cout << "width:" << evt.size.width << " height:" << evt.size.height << std::endl;
		resizeWindow(&App);
		sf::FloatRect viewRect = App.getView().getViewport();
		std::cout << "vp.left:" << viewRect.left << " vp.top:" << viewRect.top << " vp.width:" << viewRect.width << " vp.height:" << viewRect.height << std::endl;
	    }

	    level.HandleEvents(&evt);
	}
	
	if(state == START)
	{
	    writeScreen(&App, "Press \"return\" to start");
	    continue;
	}

	if(state == LOSE || state == WIN)
	{
	    if(state == LOSE)
		writeScreen(&App, "Game Over");
	    else
		writeScreen(&App, "You Won");

	    if(gameOverClock.getElapsedTime().asSeconds() > 10)
	    {
		state = START;
	    } 

	    continue;
	}

	if(level.HasPlayerLost())
	{
	    state = LOSE;
	    gameOverClock.restart();
	}

	if(level.HasPlayerWon())
	{
	    state = WIN;
	    gameOverClock.restart();
	}

	level.UpdatePosition(&App, &time);
	
	App.clear();
	level.Draw(&App);
	App.display();
    }
    
    return 0;
}