Example #1
0
void Game::Update(float deltaTime)
{
	currentScene->Update(deltaTime);

	if (Input::GetKeyDown(SDLK_k))
	{
		debugMode = !debugMode;
		if (debugMode)
			glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
		else
			glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
	}
	if (Input::GetKeyDown(SDLK_b))
		negMode = !negMode;

	fpsCounter++;
	if ((fpsTimer += deltaTime) > 1)
	{
		fpsDisplay = fpsCounter;
		fpsCounter = fpsTimer = 0;
	}

	char fpsBuffer[30];
	sprintf(fpsBuffer, "FPS: %d", fpsDisplay);
	string fpsString(fpsBuffer);
	resourceManager->GetFont("OratorStd.otf")->Render(fpsString, { 0, 0, 100, 25 });
}
Example #2
0
//MAIN GAME LOOP
void Game::GameLoop()
{
    //check time of last frame
    float frameTime = frameClock.getElapsedTime().asSeconds();
    frameClock.restart();



    //event loop
    sf::Event currentEvent;
    while(mainWindow.pollEvent(currentEvent))
    {
        //gotta handle resize things here
        if(currentEvent.type == sf::Event::Resized)
        {
            //std::cerr << "resized" << std::endl;
            float aspectRatio = float(currentEvent.size.width)/float(currentEvent.size.height);
            float newHeight = (1024.f*currentEvent.size.height)/currentEvent.size.width;
            float newWidth = (768.f*currentEvent.size.width)/currentEvent.size.height;
            if(aspectRatio > (4.f/3.f))
            {
                float displace = (newWidth - 1024.f)/(-2.f);
                View = sf::View(sf::FloatRect(displace, 0, newWidth, 768));
            }
            else if(aspectRatio < (4.f/3.f))
            {
                float displace = (newHeight - 768.f)/(-2.f);
                View = sf::View(sf::FloatRect(0, displace, 1024, newHeight));
            }
            mainWindow.setView(View);
        }
        //broken fullscreen stuff, do not touch
        else if(currentEvent.type == (sf::Event::KeyPressed) && currentEvent.key.code == (sf::Keyboard::F))
        {
            //mainWindow.close();
            //std::vector<sf::VideoMode> FullscreenModes = sf::VideoMode::getFullscreenModes();
            //mainWindow.create(FullscreenModes[0],"SHMUP Super Alpha", sf::Style::Fullscreen);
        }

        switch(gameState)
        {
        case GameOver:
        {
            if(currentEvent.type == (sf::Event::KeyPressed) && currentEvent.key.code == (sf::Keyboard::Return))
            {
                scoreboard.clear();
                gameState = Uninitialized;
            }
            if(currentEvent.type == sf::Event::Closed || (currentEvent.type == (sf::Event::KeyPressed) && (currentEvent.key.code == sf::Keyboard::Escape)))
            {
                gameState = Exiting;
            }
            break;
        }
        case Playing:
        {
            if(currentEvent.type == sf::Event::Closed || (currentEvent.type == (sf::Event::KeyPressed) && (currentEvent.key.code == sf::Keyboard::Escape)))
            {
                gameState = Exiting;
            }
            if(currentEvent.type == (sf::Event::KeyPressed) && currentEvent.key.code == (sf::Keyboard::P))
            {
                sounds[2].play();
                gameState = Paused;
            }
            break;
        }
        case Paused:
        {
            if(currentEvent.type == sf::Event::Closed || (currentEvent.type == (sf::Event::KeyPressed) && (currentEvent.key.code == sf::Keyboard::Escape)))
            {
                gameState = Exiting;
            }
            if(currentEvent.type == (sf::Event::KeyPressed) && currentEvent.key.code == (sf::Keyboard::P))
            {
                sounds[2].play();
                gameState = Playing;
            }
            break;
        }
	case Intro:
	{
	    if(currentEvent.type == (sf::Event::KeyPressed) && currentEvent.key.code == (sf::Keyboard::Return))
            {
		storyScreen++;
		sounds[1].play();
		unsigned pos = 0;
		for(int i = 0; i < 10; i++)
		{
			pos = story.find_first_of('\n',pos+1);
		}
		buffer.assign(story,0,pos);
		story.erase(0,pos);

            }
            if(currentEvent.type == sf::Event::Closed || (currentEvent.type == (sf::Event::KeyPressed) && (currentEvent.key.code == sf::Keyboard::Escape)))
            {
                gameState = Exiting;
            }
            break;

	}

	}
        }

    //non event-triggered state stuff (every frame updates)
    switch(gameState)
    {
    case Uninitialized:
    {
        mainWindow.clear();

        background0.Load("images/acespacebg0.png");
        background1.Load("images/acespacebg1.png");
        background0.sprite.setTextureRect(sf::Rect<int>(0,(2500-768),576,768));
        background1.sprite.setTextureRect(sf::Rect<int>(0,(2500-768),576,768));
        bgMove0 = 0;
        bgMove1 = 0;

        player1.Load("images/Player.png");
        player1.SetPosition(576/2,700);
        player1.revive();

        scoreboard.updatePower(0);
        scoreboard.updateLives(0);
        scoreboard.updateScore(-1);
	scoreboard.updateTargetHP(0,0);

        scoreboard.updateFont(&datagoth);
        scoreboard.clear();
    }
    case ShowingSplash:
    {
        if(!ShowSplashScreen())
            gameState = Exiting;
        else
        {
           gameState = Intro;
		unsigned pos = 0;
		for(int i = 0; i < 10; i++)
		{
			pos = story.find_first_of('\n',pos+1);
		}
		buffer.assign(story,0,pos);
		story.erase(0,pos);
	}
        break;
    }
    case Intro:
    {

	    if(storyScreen == 5) 
	    {
                music[0].stop();
		music[1].play();    
		gameState = Playing;

		scoreboard.updateLives(1);
		scoreboard.updatePower(5);
		scoreboard.updateScore(000000);
		scoreboard.updateTargetHP(0,0);

		//intial wave to seed the enemy list
		Enemy* newEnemy2 = new Enemy(2, 0, -100);
		newEnemy2->setDestination(200, 300);
		enemyList.push_front(*newEnemy2);

		Enemy* newEnemy3 = new Enemy(2, 576, -100);
		newEnemy3->setDestination(350, 300);
		enemyList.push_front(*newEnemy3);

		Enemy* newEnemy4 = new Enemy(2, 60, -100);
		newEnemy4->setDestination(200, 300);
		enemyList.push_front(*newEnemy4);

		Enemy* newEnemy5 = new Enemy(2, 536, -100);
		newEnemy5->setDestination(350, 300);
		enemyList.push_front(*newEnemy5);

		frameClock.restart();
	    }
    }
    case Playing:
    {
        //check movement
        CheckMovement(5, frameTime);
        if(player1.destroyCheck())
        {
            enemyList.clear();
            mainWindow.clear();
            player1.clearProjectiles();
            music[1].stop();
            sounds[4].play();
            scoreboard.updateLives(-1);
            gameState = GameOver;
            break;
        }

        UpdateProj();
        UpdateEnemies();

        //update paralaxed backgrounds
        if(bgMove0 > (2500-768))
            bgMove0 = 0;
        bgMove0 += 1;
        background0.sprite.setTextureRect(sf::Rect<int>(0,(2500-768)-bgMove0,576,768));
        break;
    }
    }

    if(bgMove1 > (2500-768))
        bgMove1 = 0;
    bgMove1 += 3;
    background1.sprite.setTextureRect(sf::Rect<int>(0,(2500-768)-bgMove1,576,768));

    //clean up sprites to be deleted
    CleanUp();

    //draw game
    mainWindow.clear(sf::Color(0,0,0));
    mainWindow.draw(wholeArea);
    background0.Draw(mainWindow);

    char fps[60];
    sprintf(fps,"%.2f\nESC to Quit\nP to Pause\nSPACE to Fire\nWASD to Move",(float(1)/frameTime));
    sf::String fpsString(fps);
    sf::Text text(fpsString, datagoth);
    text.setCharacterSize(20);
    text.setColor(sf::Color::White);
    text.setPosition(596, 650);

    sf::String sidebar(buffer+"\n\nPress Enter");
    sf::Text textBox(sidebar,datagoth);

    if(gameState == GameOver)
    {
        sf::String gameOver("GAME OVER");
        sf::Text endingMessage(gameOver, datagoth);
        endingMessage.setCharacterSize(50);
        //endingMessage.setStyle(sf::Text::Bold);
        endingMessage.setColor(sf::Color::Red);
        endingMessage.setPosition(288-(endingMessage.getGlobalBounds().width/2), 300);

        sf::String authors("Developed by:\nJohn New\nDevon Gardner\nJon Forcht\nDanny Krulick\n\n\n\n\n\n\nPress Enter to Restart");
        sf::Text credits(authors, datagoth);
        credits.setCharacterSize(20);
        credits.setColor(sf::Color::White);
        credits.setPosition(288-(credits.getGlobalBounds().width/2), 500);
        mainWindow.draw(credits);
        mainWindow.draw(endingMessage);
    }

    DrawProj();
    DrawEnemies();

    if(player1.destroyCheck() == false)
        player1.Draw(mainWindow);

    background1.Draw(mainWindow);

    mainWindow.draw(spawnArea);
    mainWindow.draw(rightBound);
    mainWindow.draw(leftBound);
    mainWindow.draw(bottomBound);
    mainWindow.draw(text);
    if(gameState == Intro && storyScreen < 5)
    {
    	textBox.setCharacterSize(20);
    	textBox.setColor(sf::Color::White);
    	textBox.setPosition(596, 250);
	mainWindow.draw(textBox);
    }
    scoreboard.drawScoreboard(mainWindow, player1.sprite);

    //finally, render the frame
    mainWindow.display();
}
Example #3
0
//show splash screen (BLOCKING)
bool Game::ShowSplashScreen()
{

    sf::String titleText("Ace SPACE Pilot");
    sf::Text title(titleText, datagoth);
    title.setCharacterSize(50);
    //title.setStyle(sf::Text::Bold);
    title.setColor(sf::Color::White);
    title.setPosition(288-(title.getGlobalBounds().width/2), 280);

    sf::String prompt("Press Enter to Begin");
    sf::Text text(prompt, datagoth);
    text.setCharacterSize(24);
    text.setColor(sf::Color::White);
    text.setPosition(288-text.getGlobalBounds().width/2, 725);

    sf::String fpsString("\nESC to Quit\nP to Pause\nSPACE to Fire\nWASD to Move");
    sf::Text text2(fpsString, datagoth);
    text2.setCharacterSize(20);
    text2.setColor(sf::Color::White);
    text2.setPosition(596, 650);

    music[0].openFromFile("sounds/menu_bgm.ogg");
    music[0].play();

    music[1].openFromFile("sounds/stage_bgm.ogg");
    music[1].setVolume(60);

    sf::Event event;
    while(true)
    {
        while(mainWindow.pollEvent(event))
        {
           if(event.type == sf::Event::Resized)
           {
                float aspectRatio = float(event.size.width)/float(event.size.height);
                float newHeight = (1024.f*event.size.height)/event.size.width;
                float newWidth = (768.f*event.size.width)/event.size.height;
                if(aspectRatio > (4.f/3.f))
                {
                    float displace = (newWidth - 1024.f)/(-2.f);
                    View = sf::View(sf::FloatRect(displace, 0, newWidth, 768));
                }
                else if(aspectRatio < (4.f/3.f))
                {
                    float displace = (newHeight - 768.f)/(-2.f);
                    View = sf::View(sf::FloatRect(0, displace, 1024, newHeight));
                }
                mainWindow.setView(View);
           }
           if((event.type == (sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Return)))
           {
               sounds[1].play();
                return 1;
           }
           if((event.type == (sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Escape)) || event.type == sf::Event::Closed )
           {
             return 0;
           }
        }

        //update paralaxed backgrounds
        if(bgMove1 > (2500-768))
            bgMove1 = 0;
        bgMove1 += 2;
        background1.sprite.setTextureRect(sf::Rect<int>(0,(2500-768)-bgMove1,576,768));

        mainWindow.draw(wholeArea);
        mainWindow.draw(spawnArea);
        background0.Draw(mainWindow);
        background1.Draw(mainWindow);
        mainWindow.draw(rightBound);
        mainWindow.draw(leftBound);
        mainWindow.draw(bottomBound);
        mainWindow.draw(title);
        mainWindow.draw(text);
        mainWindow.draw(text2);
        scoreboard.drawScoreboard(mainWindow, player1.sprite);
        mainWindow.display();
    }
}