#include <memory>
#include <iostream>
+#include <string>
+#include <fstream>
+#include <vector>
#include "States.h"
#include "Context.h"
#include "constants.h"
+#include "json.hpp"
+
+using json = nlohmann::json;
// Start menu --------------------------------------------
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);
+ scoreboardtext.setFillColor(sf::Color(153, 0, 0));
// -----------------------------------------------------------------------
// First place text
- firstplacetext = sf::Text{ "1. NAME 100p\n 2. NAME 39p" , font, 18 };
+ firstplacetext = sf::Text{ "1. NAME 100p\n2. 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);
+ firstplacetext.setFillColor(sf::Color(153, 0, 0));
// -----------------------------------------------------------------------
// Start menu text
if( menu_index == 1)
{
startmenutext.setFillColor(sf::Color::Black);
- quittext.setFillColor(sf::Color::Red);
+ quittext.setFillColor(sf::Color(153, 0, 0));
}
else if( menu_index == 2)
{
- startmenutext.setFillColor(sf::Color::Red);
+ startmenutext.setFillColor(sf::Color(153, 0, 0));
quittext.setFillColor(sf::Color::Black);
}
// GameOver menu --------------------------------------------
-GameOver_menu::GameOver_menu() : texture{}, texture2{}, sprite{}, mouse_l{}, mouse_r{}, startmenutext{},
- quittext{}, font{}, exit_game{false}, menu{false}, menu_index{1}
+GameOver_menu::GameOver_menu(int const points, json& params) : texture{}, texture2{}, sprite{}, rectangle{}, mouse_l{}, mouse_r{}, pointstext{},
+ playerInput{}, data{}, playerText{}, savetext{}, quittext{}, font{}, exit_game{false}, menu{false}, menu_index{1}, points{points}
{
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);
-
+
+ // load textfont
+ if ( !font.loadFromFile ("assets/fonts/Philosopher-Regular.ttf") )
+ throw std::invalid_argument ("Unable to load font");
+
+
+ // transparent box
+ rectangle = sf::CircleShape{200};
+ rectangle.setFillColor(sf::Color(255, 255, 0, 128));
+ rectangle.setOutlineThickness(7);
+ rectangle.setOutlineColor(sf::Color( 0, 0, 0, 200));
+ sf::FloatRect gbrs {rectangle.getGlobalBounds()};
+ rectangle.setOrigin(gbrs.width / 2, gbrs.height / 2);
+ rectangle.setPosition (S_WIDTH / 2, ((S_HEIGHT / 2)));
+
+
+ // Points text
+ pointstext = sf::Text{ "Your points: " + std::to_string(points), font, 30 };
+ sf::FloatRect gbp {pointstext.getGlobalBounds()};
+ pointstext.setOrigin(gbp.width / 2, gbp.height / 2);
+ pointstext.setPosition (S_WIDTH / 2 - 70, ((S_HEIGHT / 2) - 150));
+ pointstext.setFillColor(sf::Color::Black);
+
+
+ //player text input
+ playerText.setFont( font );
+ playerText.setCharacterSize( 24 );
+ sf::FloatRect gbpt {playerText.getGlobalBounds()};
+ playerText.setOrigin(gbpt.width / 2, gbpt.height / 2);
+ playerText.setPosition (S_WIDTH / 2, ((S_HEIGHT / 2)));
+ playerText.setFillColor(sf::Color::Black);
+
// mouse
texture2.loadFromFile("assets/muspekareGul.png");
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));
+ savetext = sf::Text{ "Save Game", font, 24 };
+ sf::FloatRect gbr {savetext.getGlobalBounds()};
+ savetext.setOrigin(gbr.width / 2, gbr.height / 2);
+ savetext.setPosition (S_WIDTH / 2, ((S_HEIGHT / 2) + 100));
// 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));
+ quittext.setPosition (S_WIDTH / 2, ((S_HEIGHT / 2) + 150));
}
// changes color on text depending on selection
if( menu_index == 1)
{
- startmenutext.setFillColor(sf::Color::Yellow);
+ savetext.setFillColor(sf::Color::Yellow);
quittext.setFillColor(sf::Color::Black);
}
else if( menu_index == 2)
{
- startmenutext.setFillColor(sf::Color::Black);
+ savetext.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)));
+
+ //spara namn till fil
+ std::string current_line{"Gorilla," + std::to_string(points)};
+
+ std::ifstream highscore_file_r{"assets/highscore.csv"};
+ std::vector<std::string> lines_read;
+ std::vector<std::string> lines_write;
+ for (std::string one_line; std::getline(highscore_file_r, one_line);lines_read.push_back(one_line));
+
+ bool added {false};
+ for (std::string::size_type line_count{0}; line_count < lines_read.size(); line_count++)
+ {
+ if (!added && points > std::stoi(lines_read[line_count].substr(lines_read[line_count].find_first_of(',') + 1)))
+ {
+ std::cout << "i loop" << std::endl;
+ lines_write.push_back(current_line);
+ added = true;
+ }
+ lines_write.push_back(lines_read[line_count]);
+ }
+
+ if (!added) lines_write.push_back(current_line);
+
+
+
+ if (lines_write.size() > data["game_constants"]["scoreboard"]) lines_write.pop_back();
+
+ highscore_file_r.close();
+
+ std::ofstream highscore_file_w{"assets/highscore.csv"};
+ for (std::string::size_type line_count{0}; line_count < lines_write.size(); highscore_file_w << lines_write[line_count++] << std::endl);
+ highscore_file_w.close();
}
void GameOver_menu::render(sf::RenderWindow& window) const
{
window.draw(sprite);
+
+ window.draw(rectangle);
window.draw(mouse_l);
window.draw(mouse_r);
- window.draw(startmenutext);
+ window.draw(playerText);
+ window.draw(pointstext);
+ window.draw(savetext);
window.draw(quittext);
if (exit_game)
default:
break;
}
+
+ // enter name
+ if (event.type == sf::Event::TextEntered)
+ {
+ playerInput += event.text.unicode;
+ playerText.setString(playerInput);
+ }
}