int main() { // Init GLFW glfwInit(); // Create a GLFWwindow object that we can use for GLFW's functions Window window = Window(WIDTH, HEIGHT, TITLE); window.DefineViewport(); //glfwSetInputMode(window.getWindowPtr(), GLFW_CURSOR, GLFW_CURSOR_DISABLED); /// ^(Maybe use this later) // Callback functions glfwSetKeyCallback(window.getWindowPtr() , key_callback); // Init GLEW glewExperimental = GL_TRUE; glewInit(); // Enable alpha channel transparency glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Load and compile shaders to a program Shader ShaderProgram = Shader("../deps/shaders/shadervert.vs", "../deps/shaders/shaderfrag.fs"); // Load explosion graphics extern_Explosion.Init(ShaderProgram.GetProgramID()); // Load texture/Game objects Texture2D texture_background1 = Texture2D("../deps/textures/backgroundSpace_01.1.png", PNG_RGB); SpriteMap Background = SpriteMap(texture_background1, 1.0f, 1.0f, glm::vec3(0.0f, 0.0f, 0.0f), 1.0f, BACKGROUND); Player PlayerShip; PlayerShip.Init(moveSpeed); Enemy Enemies; Enemies.Init(); // Projection matrix: ortho for 2D glm::mat4 proj = glm::ortho(0, window.getWidth(), 0, window.getHeight()); // Game loop while (!window.ShouldClose()) { double startFrame = glfwGetTime(); ///< for FPS limiting // Check if any events have been activiated and call callback function (via GLFW) glfwPollEvents(); // Clear the colorbuffer glClearColor(0.6f, 0.8f, 0.8f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* Drawing */ ShaderProgram.Use(); // Background position and drawing calculations - just identity matrix glm::mat4 model; GLint modelLoc = glGetUniformLocation(ShaderProgram.GetProgramID(), "model"); glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model)); Background.BackgroundScroll(scrollSpeed); Background.Draw(); Collision::EnemyHit(&PlayerShip, &Enemies); Collision::PlayerHit(&PlayerShip, &Enemies); Collision::ShipsCollide(&PlayerShip, &Enemies); PlayerShip.Move(keys); PlayerShip.AddShots(keys); PlayerShip.Draw(ShaderProgram.GetProgramID()); Enemies.Move(); Enemies.Shoot(PlayerShip.GetPosition()); Enemies.Draw(ShaderProgram.GetProgramID()); extern_Explosion.Draw(); // FPS Calculation/Limiting float fps = CalculateFPS(); static int printFPS = 0; if (printFPS == 100) { Enemies.Add(EN_0, PlayerShip.GetPosition()); Enemies.Add(EN_1, PlayerShip.GetPosition()); std::cout << fps << std::endl; printFPS = 0; } else { printFPS++; } LimitFPS(FPS, startFrame); if (PlayerShip.GetLives() <= 0) { window.Close(); } // Swap the screen buffers window.SwapBuffers(); } Background.Delete(); PlayerShip.Delete(); Enemies.DeleteAll(); extern_Explosion.DeleteAll(); // Close GLFW glfwTerminate(); return 0; }
int main() { int shotsFired = 0; fstream out; out.open("shotsFired.txt"); fstream in; string filename = "GameName.txt"; in.open(filename.c_str()); string windowName; if(!in.fail()){ windowName = accessStream(in, true); } World world; Player * player = new Player(); PlayerProjectile projectile; PlayerProjectile chargePro(1); Enemy * enemy = new Enemy(); sf::Music music; if(!music.openFromFile("assets/sound/level0.wav")){ cout << "Failed to open music file" << endl; } music.setVolume(25); music.play(); //Floor* street = new Floor("street"); sf::Sprite background; sf::Texture bgScene; bgScene.loadFromFile("assets/art/background.png"); bgScene.setSmooth(false); background.setTexture(bgScene); background.scale(bgScaleFactor, bgScaleFactor); sf::RenderWindow window(sf::VideoMode(screenWidth, screenHeight), windowName); //window.setVerticalSyncEnabled(true); window.setFramerateLimit(60); sf::Sprite EnemyObject; EnemyObject.scale(scaleFactor, scaleFactor); sf::Sprite PlayerObject; PlayerObject.scale(scaleFactor, scaleFactor); EnemyObject.setTexture(enemy->Update()); sf::Vector2f pStart(400, 50); sf::Vector2f eStart(200, 230); EnemyObject.move(eStart); PlayerObject.setTexture(player->Update()); PlayerObject.move(pStart); vector<sf::Sprite> ObjsInView; vector<PlayerProjectile> ProjsInView; vector<Enemy*> EnemiesInView; //vector<Floor*> TilesInView; ObjsInView.push_back(PlayerObject); for(unsigned i = 0; i < world.TileMap.size(); i++){ for(unsigned j = 0; j < world.TileMap[i].length(); ++j){ if(world.TileMap[i][j] == 'S') { Floor* f = new Floor("street", j, i); world.TilesInView.push_back(f); } } } sf::RectangleShape floorCollider(sf::Vector2f(800.f, 45.f)); floorCollider.setPosition(0.f, 370.f); floorCollider.setFillColor(sf::Color::Transparent); floorCollider.setOutlineColor(sf::Color::Red); // Start the game loop while (window.isOpen()) { window.clear(); // Process events sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) { window.close(); } } if(sf::Keyboard::isKeyPressed(sf::Keyboard::X)){ if(player->Shoot()){ PlayerProjectile lemon = projectile; if(player->getPlayerState() == Player::idleRight || player->getPlayerState() == Player::jumpRight || player->getPlayerState() == Player::runRight || player->getPlayerState() == Player::fallRight) { lemon.setVelocity(7); lemon.setSprite(PlayerProjectile::right); } else { //lemonSprite.setTexture(projectile.lemonLeft); lemon.setVelocity(-7); lemon.setSprite(PlayerProjectile::left); } lemon.setPosition(PlayerObject.getPosition()); ProjsInView.push_back(lemon); } } if(sf::Keyboard::isKeyPressed(sf::Keyboard::C)){ if(player->Shoot()){ PlayerProjectile lemon = chargePro; if(player->getPlayerState() == Player::idleRight || player->getPlayerState() == Player::jumpRight || player->getPlayerState() == Player::runRight || player->getPlayerState() == Player::fallRight) { lemon.setVelocity(7); lemon.setSprite(PlayerProjectile::right); } else { //lemonSprite.setTexture(projectile.lemonLeft); lemon.setVelocity(-7); lemon.setSprite(PlayerProjectile::left); } lemon.setPosition(PlayerObject.getPosition()); ProjsInView.push_back(lemon); } } if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) { player->setDirection(Player::left); } else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) { player->setDirection(Player::right); } if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left) && sf::Keyboard::isKeyPressed(sf::Keyboard::X)) { player->setDirection(Player::left); player->Shoot(); shotsFired++; } else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right) && sf::Keyboard::isKeyPressed(sf::Keyboard::X)) { player->setDirection(Player::right); player->Shoot(); shotsFired++; } if(player->boundingBox.getGlobalBounds().intersects(floorCollider.getGlobalBounds())){ if (sf::Keyboard::isKeyPressed(sf::Keyboard::Z)) { player->Jump(); } if (sf::Keyboard::isKeyPressed(sf::Keyboard::Z) && sf::Keyboard::isKeyPressed(sf::Keyboard::X)){ player->Jump(); player->Shoot(); shotsFired++; } } if (!sf::Keyboard::isKeyPressed(sf::Keyboard::Right) && !sf::Keyboard::isKeyPressed(sf::Keyboard::Left)){ player->setDirection(Player::none); } PlayerObject.move(player->getVelocity(), player->getGravity(floorCollider)); enemy->positionBounds(EnemyObject); if(!enemy->checkCollision(player->boundingBox)){ EnemyObject.move(enemy->Move(EnemyObject), 0); } player->positionBounds(PlayerObject); window.draw(background); window.draw(floorCollider); for(unsigned i = 0; i < world.TilesInView.size(); ++i){ RenderTiles(world.TilesInView[i]->getTiles(), world.TilesInView[i], window); } sf::Texture playerTex = player->Update(); sf::Texture enemyTex = enemy->Update(); //playerTex.setSmooth(false); PlayerObject.setTexture(playerTex, true); EnemyObject.setTexture(enemyTex, true); RenderProjectiles(ProjsInView, window, projectile, player); window.draw(EnemyObject); window.draw(player->boundingBox); window.draw(PlayerObject); // Update the window window.display(); } if(!out.fail()){ accessStream(out, false, shotsFired); //out << shotsFired; //out << std::flush; } return 0; }