+++ /dev/null
-#include <memory>
-#include <iostream>
-
-#include "States.h"
-#include "Context.h"
-#include "constants.h"
-
-
-// Start menu --------------------------------------------
-Start_menu::Start_menu() : texture{}, texture2{}, sprite{}, mouse_l{}, mouse_r{}, starttext{}, scoreboardtext{},
- quittext{}, font{}, start_game{false}, exit_game{false}, scoreboard{false}, menu_index{1}
-{
- //sprite
- texture.loadFromFile("assets/meny_bild.png");
- sprite.setTexture(texture);
-
- sprite.setScale(S_SCALE_KOEFF, S_SCALE_KOEFF);
- sf::FloatRect gb {sprite.getGlobalBounds()};
- sprite.setPosition(0, 0);
-
- //mouse
- texture2.loadFromFile("assets/muspekareGul.png");
- mouse_l.setTexture(texture2);
-
- mouse_l.setScale(0.1, 0.1);
- mouse_l.setRotation(180);
- sf::FloatRect gbm {mouse_l.getGlobalBounds()};
-
- mouse_r.setTexture(texture2);
- mouse_r.setScale(0.1, 0.1);
-
-
- //load textfont
- if ( !font.loadFromFile ("assets/fonts/Philosopher-Regular.ttf") )
- throw std::invalid_argument ("Unable to load font");
-
- //start
- starttext = sf::Text{ "Start Game", font, 24 };
- sf::FloatRect gbts {starttext.getGlobalBounds()};
- starttext.setOrigin(gbts.width / 2, gbts.height / 2);
- starttext.setPosition ((S_WIDTH) / 2, ((S_HEIGHT / 2) - 100));
-
- //score
- scoreboardtext = sf::Text{ "Scoreboard", font, 24 };
- sf::FloatRect gbtb {scoreboardtext.getGlobalBounds()};
- scoreboardtext.setOrigin(gbtb.width / 2, gbtb.height / 2);
- scoreboardtext.setPosition (S_WIDTH / 2, ((S_HEIGHT / 2) - 50));
-
- //quit
- quittext = sf::Text{ "Quit", font, 24 };
- sf::FloatRect gbtq {quittext.getGlobalBounds()};
- quittext.setOrigin(gbtq.width / 2, gbtq.height / 2);
- quittext.setPosition (S_WIDTH / 2, S_HEIGHT / 2);
-}
-
-void Start_menu::update(Context& context)
-{
- if (start_game)
- {
- context.next_state = std::make_unique<Game_state>();
- }
-
- if (scoreboard)
- {
- context.next_state = std::make_unique<Scoreboard_menu>();
- scoreboard = false;
- return;
- }
-
- // changes color on text depending on selection
- if( menu_index == 1)
- {
- starttext.setFillColor(sf::Color::Yellow);
- scoreboardtext.setFillColor(sf::Color::Black);
- quittext.setFillColor(sf::Color::Black);
- }
- else if( menu_index == 2)
- {
- starttext.setFillColor(sf::Color::Black);
- scoreboardtext.setFillColor(sf::Color::Yellow);
- quittext.setFillColor(sf::Color::Black);
- }
- else if( menu_index == 3)
- {
- starttext.setFillColor(sf::Color::Black);
- scoreboardtext.setFillColor(sf::Color::Black);
- quittext.setFillColor(sf::Color::Yellow);
- }
-
- // mouse placement
- mouse_r.setPosition(((S_WIDTH / 2) + 60), ((S_HEIGHT / 2) - 115 + 50*(menu_index - 1)));
- mouse_l.setPosition(((S_WIDTH / 2) - 58), ((S_HEIGHT / 2) - 68 + 50*(menu_index - 1)));
-
-}
-
-void Start_menu::render(sf::RenderWindow& window) const
-{
- window.draw(sprite);
- window.draw(mouse_l);
- window.draw(mouse_r);
-
- window.draw(starttext);
- window.draw(scoreboardtext);
- window.draw(quittext);
-
- if (exit_game)
- {
- window.close();
- }
-}
-
-void Start_menu::handle_input(sf::Event& event)
-{
- switch (event.type)
- {
- case sf::Event::JoystickButtonPressed:
- switch (event.joystickButton.button)
- {
- case 0: // A
- if(menu_index == 1)
- {
- start_game = true;
- menu_index = 1;
- }
-
- else if(menu_index == 2)
- {
- scoreboard = true;
- menu_index = 1;
- }
-
- else if(menu_index == 3)
- {
- exit_game = true;
- menu_index = 1;
- }
- break;
- default:
-
- break;
- }
-
- break;
- case sf::Event::JoystickMoved:
- switch(event.joystickMove.axis)
- {
- case sf::Joystick::Y:
- case sf::Joystick::PovY:
- if (event.joystickMove.position <= -50)
- {
- if(menu_index == 1)
- {
- break;
- }
-
- else
- {
- menu_index -= 1;
- }
- break;
- }
- else if (event.joystickMove.position >= 50)
- {
- if(menu_index == 3)
- {
- break;
- }
-
- else
- {
- menu_index += 1;
- }
- break;
- }
- break;
- }
- break;
-
- case sf::Event::KeyPressed:
-
- switch(event.key.code)
- {
- case sf::Keyboard::Enter:
- if(menu_index == 1)
- {
- start_game = true;
- menu_index = 1;
- }
-
- else if(menu_index == 2)
- {
- scoreboard = true;
- menu_index = 1;
- }
-
- else if(menu_index == 3)
- {
- exit_game = true;
- menu_index = 1;
- }
- break;
-
-
- case sf::Keyboard::Up:
- if(menu_index == 1)
- {
- break;
- }
-
- else
- {
- menu_index -= 1;
- }
- break;
-
- case sf::Keyboard::Down:
- if(menu_index == 3)
- {
- break;
- }
-
- else
- {
- menu_index += 1;
- }
- break;
-
- default:
- break;
- }
-
- break;
- default:
- break;
- }
-}
-
-
-// Pause menu --------------------------------------------
-Pause_menu::Pause_menu() : texture{}, texture2{}, sprite{}, mouse_l{}, mouse_r{}, resumetext{}, startmenutext{},
- quittext{}, font{}, resume_game{false}, exit_game{false}, menu{false}, menu_index{1}
-{
- texture.loadFromFile("assets/Pause_bild.png");
- sprite.setTexture(texture);;
-
- sprite.setScale(S_SCALE_KOEFF, S_SCALE_KOEFF);
- sf::FloatRect gb {sprite.getGlobalBounds()};
- sprite.setPosition(0, 0);
-
- // mouse
- texture2.loadFromFile("assets/muspekareGul.png");
- mouse_l.setTexture(texture2);
-
- mouse_l.setScale(0.1, 0.1);
- mouse_l.setRotation(180);
- sf::FloatRect gbm {mouse_l.getGlobalBounds()};
-
- mouse_r.setTexture(texture2);
- mouse_r.setScale(0.1, 0.1);
-
-
- // load textfont
- if ( !font.loadFromFile ("assets/fonts/Philosopher-Regular.ttf") )
- {
- throw std::invalid_argument ("Unable to load font");
- }
-
-
- // Resume text
- resumetext = sf::Text{ "Resume", font, 24 };
- sf::FloatRect gbr {resumetext.getGlobalBounds()};
- resumetext.setOrigin(gbr.width / 2, gbr.height / 2);
- resumetext.setPosition (S_WIDTH / 2, ((S_HEIGHT / 2) - 30));
-
- // Start menu text
- startmenutext = sf::Text{ "Start menu", font, 24 };
- sf::FloatRect gbs {startmenutext.getGlobalBounds()};
- startmenutext.setOrigin(gbs.width / 2, gbs.height / 2);
- startmenutext.setPosition (S_WIDTH / 2, ((S_HEIGHT / 2) + 20));
-
- //quit text
- quittext = sf::Text{ "Quit", font, 24 };
- sf::FloatRect gbq {quittext.getGlobalBounds()};
- quittext.setOrigin(gbq.width / 2, gbq.height / 2 );
- quittext.setPosition (S_WIDTH / 2, ((S_HEIGHT / 2) + 70));
-}
-
-void Pause_menu::update(Context& context)
-{
- if (resume_game)
- {
- context.next_state = std::move(context.saved_game);
- }
- else if (menu)
- {
- context.next_state = std::make_unique<Start_menu>();
- context.saved_game.release();
- }
-
- // changes color on text depending on selection
- if( menu_index == 1)
- {
- resumetext.setFillColor(sf::Color::Yellow);
- startmenutext.setFillColor(sf::Color::Black);
- quittext.setFillColor(sf::Color::Black);
- }
- else if( menu_index == 2)
- {
- resumetext.setFillColor(sf::Color::Black);
- startmenutext.setFillColor(sf::Color::Yellow);
- quittext.setFillColor(sf::Color::Black);
- }
- else if( menu_index == 3)
- {
- resumetext.setFillColor(sf::Color::Black);
- startmenutext.setFillColor(sf::Color::Black);
- quittext.setFillColor(sf::Color::Yellow);
- }
-
- // mouse placement
- mouse_r.setPosition(((S_WIDTH / 2) + 60), ((S_HEIGHT / 2) - 45 + 50*(menu_index - 1)));
- mouse_l.setPosition(((S_WIDTH / 2) - 58), ((S_HEIGHT / 2) + 2 + 50*(menu_index - 1)));
-}
-
-void Pause_menu::render(sf::RenderWindow& window) const
-{
- window.draw(sprite);
- window.draw(mouse_l);
- window.draw(mouse_r);
-
- window.draw(resumetext);
- window.draw(startmenutext);
- window.draw(quittext);
-
- if (exit_game)
- {
- window.close();
- }
-}
-
-void Pause_menu::handle_input(sf::Event& event)
-{
- switch (event.type)
- {
- case sf::Event::JoystickButtonPressed:
- switch (event.joystickButton.button)
- {
- case 0: // A
- if(menu_index == 1)
- {
- resume_game = true;
- menu_index = 1;
- }
-
- else if(menu_index == 2)
- {
- menu = true;
- menu_index = 1;
- }
-
- else if(menu_index == 3)
- {
- exit_game = true;
- menu_index = 1;
- }
- break;
- default:
-
- break;
- }
-
- break;
- case sf::Event::JoystickMoved:
- switch(event.joystickMove.axis)
- {
- case sf::Joystick::Y:
- case sf::Joystick::PovY:
- if (event.joystickMove.position <= -50)
- {
- if(menu_index == 1)
- {
- break;
- }
-
- else
- {
- menu_index -= 1;
- }
- break;
- }
- else if (event.joystickMove.position >= 50)
- {
- if(menu_index == 3)
- {
- break;
- }
-
- else
- {
- menu_index += 1;
- }
- break;
- }
- break;
- }
- break;
- case sf::Event::KeyPressed:
- switch(event.key.code)
- {
- case sf::Keyboard::Enter:
- if(menu_index == 1)
- {
- resume_game = true;
- menu_index = 1;
- }
-
- else if(menu_index == 2)
- {
- menu = true;
- menu_index = 1;
- }
-
- else if(menu_index == 3)
- {
- exit_game = true;
- menu_index = 1;
- }
- break;
-
-
- case sf::Keyboard::Up:
- if(menu_index == 1)
- {
- break;
- }
-
- else
- {
- menu_index -= 1;
- }
- break;
-
- case sf::Keyboard::Down:
- if(menu_index == 3)
- {
- break;
- }
-
- else
- {
- menu_index += 1;
- }
- break;
-
- default:
- break;
- }
-
- break;
- default:
- break;
- }
-}
-
-
-// Scoreboard menu --------------------------------------------
-Scoreboard_menu::Scoreboard_menu() : texture{}, texture2{}, sprite{}, menu{false}, exit_game{false},
- startmenutext{}, quittext{}, mouse_r{}, mouse_l{}, font{}, menu_index{1}
-{
- texture.loadFromFile("assets/scoreboard.png");
- sprite.setTexture(texture);;
-
- sprite.setScale(S_SCALE_KOEFF, S_SCALE_KOEFF);
- sf::FloatRect gb {sprite.getGlobalBounds()};
- sprite.setPosition(0, 0);
-
-
- // mouse
- texture2.loadFromFile("assets/muspekare2.png");
- mouse_l.setTexture(texture2);
-
- mouse_l.setScale(0.1, 0.1);
- mouse_l.setRotation(180);
- sf::FloatRect gbm {mouse_l.getGlobalBounds()};
-
- mouse_r.setTexture(texture2);
- mouse_r.setScale(0.1, 0.1);
-
-
- // load textfont
- if ( !font.loadFromFile ("assets/fonts/Philosopher-Regular.ttf") )
- throw std::invalid_argument ("Unable to load font");
-
-
- // Scoreboard text
- scoreboardtext = sf::Text{ "Scoreboard:", font, 39 };
- sf::FloatRect gbs {scoreboardtext.getGlobalBounds()};
- scoreboardtext.setOrigin(gbs.width / 2, gbs.height / 2);
- scoreboardtext.setPosition (S_WIDTH / 2 - 15, ((S_HEIGHT / 2) - 120));
- scoreboardtext.setFillColor(sf::Color::Red);
-
- // -----------------------------------------------------------------------
- // First place text
- firstplacetext = sf::Text{ "1. NAME 100p\n 2. NAME 39p" , font, 18 };
- sf::FloatRect gbfp {firstplacetext.getGlobalBounds()};
- firstplacetext.setOrigin(gbfp.width / 2, gbfp.height / 2);
- firstplacetext.setPosition (S_WIDTH / 2 - 15, ((S_HEIGHT / 2) - 70));
- firstplacetext.setFillColor(sf::Color::Red);
- // -----------------------------------------------------------------------
-
- // Start menu text
- startmenutext = sf::Text{ "Start menu", font, 24 };
- sf::FloatRect gbr {startmenutext.getGlobalBounds()};
- startmenutext.setOrigin(gbr.width / 2, gbr.height / 2);
- startmenutext.setPosition (S_WIDTH / 2 - 15, ((S_HEIGHT / 2) + 80));
-
- // Quit text
- quittext = sf::Text{ "Quit", font, 24 };
- sf::FloatRect gbq {quittext.getGlobalBounds()};
- quittext.setOrigin(gbq.width / 2, gbq.height / 2);
- quittext.setPosition (S_WIDTH / 2 - 15, ((S_HEIGHT / 2) + 130));
-}
-
-
-void Scoreboard_menu::update(Context& context)
-{
- if (menu)
- {
- context.next_state = std::make_unique<Start_menu>();
- }
-
- // changes color on text depending on selection
- if( menu_index == 1)
- {
- startmenutext.setFillColor(sf::Color::Black);
- quittext.setFillColor(sf::Color::Red);
- }
- else if( menu_index == 2)
- {
- startmenutext.setFillColor(sf::Color::Red);
- quittext.setFillColor(sf::Color::Black);
- }
-
- // mouse placement
- mouse_r.setPosition(((S_WIDTH / 2) + 45), ((S_HEIGHT / 2) + 65 + 50*(menu_index - 1)));
- mouse_l.setPosition(((S_WIDTH / 2) - 73), ((S_HEIGHT / 2) + 112 + 50*(menu_index - 1)));
-}
-
-
-void Scoreboard_menu::render(sf::RenderWindow& window) const
-{
- window.draw(sprite);
- window.draw(mouse_l);
- window.draw(mouse_r);
-
- window.draw(scoreboardtext);
- window.draw(firstplacetext);
- window.draw(startmenutext);
- window.draw(quittext);
-
- if (exit_game)
- {
- window.close();
- }
-}
-
-
-void Scoreboard_menu::handle_input(sf::Event& event)
-{
- switch (event.type)
- {
- case sf::Event::KeyPressed:
- switch(event.key.code)
- {
- case sf::Keyboard::Enter:
-
- if(menu_index == 1)
- {
- menu = true;
- menu_index = 1;
- }
-
- else if(menu_index == 2)
- {
- exit_game = true;
- menu_index = 1;
- }
- break;
-
-
- case sf::Keyboard::Up:
- if(menu_index == 1)
- {
- break;
- }
-
- else
- {
- menu_index -= 1;
- }
- break;
-
- case sf::Keyboard::Down:
- if(menu_index == 2)
- {
- break;
- }
-
- else
- {
- menu_index += 1;
- }
- break;
-
- default:
- break;
- }
-
- break;
- default:
- break;
- }
-}
-
-
-// GameOver menu --------------------------------------------
-GameOver_menu::GameOver_menu() : texture{}, texture2{}, sprite{}, mouse_l{}, mouse_r{}, startmenutext{},
- quittext{}, font{}, exit_game{false}, menu{false}, menu_index{1}
-{
- texture.loadFromFile("assets/game_over.png");
- sprite.setTexture(texture);;
-
- sprite.setScale(S_SCALE_KOEFF, S_SCALE_KOEFF);
- sf::FloatRect gb {sprite.getGlobalBounds()};
- sprite.setPosition(0, 0);
-
-
- // mouse
- texture2.loadFromFile("assets/muspekareGul.png");
- mouse_l.setTexture(texture2);
-
- mouse_l.setScale(0.1, 0.1);
- mouse_l.setRotation(180);
- sf::FloatRect gbm {mouse_l.getGlobalBounds()};
-
- mouse_r.setTexture(texture2);
- mouse_r.setScale(0.1, 0.1);
-
-
- // load textfont
- if ( !font.loadFromFile ("assets/fonts/Philosopher-Regular.ttf") )
- throw std::invalid_argument ("Unable to load font");
-
-
- // Start menu text
- startmenutext = sf::Text{ "Start menu", font, 24 };
- sf::FloatRect gbr {startmenutext.getGlobalBounds()};
- startmenutext.setOrigin(gbr.width / 2, gbr.height / 2);
- startmenutext.setPosition (S_WIDTH / 2, ((S_HEIGHT / 2) - 30));
-
- // Quit text
- quittext = sf::Text{ "Quit", font, 24 };
- sf::FloatRect gbs {quittext.getGlobalBounds()};
- quittext.setOrigin(gbs.width / 2, gbs.height / 2);
- quittext.setPosition (S_WIDTH / 2, ((S_HEIGHT / 2) + 20));
-}
-
-
-void GameOver_menu::update(Context& context)
-{
- if (menu)
- {
- context.next_state = std::make_unique<Start_menu>();
- }
-
- // changes color on text depending on selection
- if( menu_index == 1)
- {
- startmenutext.setFillColor(sf::Color::Yellow);
- quittext.setFillColor(sf::Color::Black);
- }
- else if( menu_index == 2)
- {
- startmenutext.setFillColor(sf::Color::Black);
- quittext.setFillColor(sf::Color::Yellow);
- }
-
- // mouse placement
- mouse_r.setPosition(((S_WIDTH / 2) + 60), ((S_HEIGHT / 2) - 45 + 50*(menu_index - 1)));
- mouse_l.setPosition(((S_WIDTH / 2) - 58), ((S_HEIGHT / 2) + 2 + 50*(menu_index - 1)));
-}
-
-
-void GameOver_menu::render(sf::RenderWindow& window) const
-{
- window.draw(sprite);
- window.draw(mouse_l);
- window.draw(mouse_r);
-
- window.draw(startmenutext);
- window.draw(quittext);
-
- if (exit_game)
- {
- window.close();
- }
-}
-
-
-void GameOver_menu::handle_input(sf::Event& event)
-{
- switch (event.type)
- {
- case sf::Event::KeyPressed:
- switch(event.key.code)
- {
- case sf::Keyboard::Enter:
-
- if(menu_index == 1)
- {
- menu = true;
- menu_index = 1;
- }
-
- else if(menu_index == 2)
- {
- exit_game = true;
- menu_index = 1;
- }
- break;
-
-
- case sf::Keyboard::Up:
- if(menu_index == 1)
- {
- break;
- }
-
- else
- {
- menu_index -= 1;
- }
- break;
-
- case sf::Keyboard::Down:
- if(menu_index == 2)
- {
- break;
- }
-
- else
- {
- menu_index += 1;
- }
- break;
-
- default:
- break;
- }
-
- break;
- default:
- break;
- }
-}