diff --git a/src/GraphicalUI/AppMenus/AppMenu.h b/src/GraphicalUI/AppMenus/AppMenu.h index 57b7aec..079e261 100644 --- a/src/GraphicalUI/AppMenus/AppMenu.h +++ b/src/GraphicalUI/AppMenus/AppMenu.h @@ -15,6 +15,10 @@ class AppMenu { std::shared_ptr menuStack; std::shared_ptr settings; std::shared_ptr renderWindow; + bool enterPressed = false; + bool enterReleased = false; + bool escPressed = false; + bool escReleased = false; public: AppMenu(std::shared_ptr menuStack, std::shared_ptr settings, std::shared_ptr renderWindow) : @@ -25,6 +29,26 @@ class AppMenu { } + void updateMetaBinds() { + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Enter)) { + enterPressed = true; + enterReleased = false; + } + else { + enterReleased = enterPressed; + enterPressed = false; + } + + if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Escape)) { + escPressed = true; + escReleased = false; + } + else { + escReleased = escPressed; + escPressed = false; + } + } + virtual void computeFrame() = 0; virtual void drawFrame() const = 0; diff --git a/src/GraphicalUI/AppMenus/InGameAppMenu.cpp b/src/GraphicalUI/AppMenus/InGameAppMenu.cpp index 0c4057e..6e1b552 100644 --- a/src/GraphicalUI/AppMenus/InGameAppMenu.cpp +++ b/src/GraphicalUI/AppMenus/InGameAppMenu.cpp @@ -17,44 +17,50 @@ InGameAppMenu::InGameAppMenu(std::shared_ptr menuStack, std::shared_p } void InGameAppMenu::computeFrame() { - std::set actions; - for (Action action : ACTION_LIST_IN_ORDER) { - for (sfKey key : this->settings->getKeybinds().getKeybinds(action)) { - if (sf::Keyboard::isKeyPressed(key)) { - actions.insert(action); + this->updateMetaBinds(); + + if (this->escReleased) { + this->menuStack->pop(); + } + else { + std::set actions; + for (Action action : ACTION_LIST_IN_ORDER) { + for (sfKey key : this->settings->getKeybinds().getKeybinds(action)) { + if (sf::Keyboard::isKeyPressed(key)) { + actions.insert(action); + } } } - } - - if (actions.contains(RETRY)) { - this->game.reset(); - this->game.start(); - } - if (actions.contains(PAUSE)) { - this->paused = (!this->paused); - } - - if (!paused) { - this->game.nextFrame(actions); - } - - if (sf::Keyboard::isKeyPressed(sfKey::Escape)) { - this->menuStack->pop(); + + if (actions.contains(RETRY)) { + this->game.reset(); + this->game.start(); + } + if (actions.contains(PAUSE)) { + this->paused = (!this->paused); + } + + if (!paused) { + this->game.nextFrame(actions); + } } } void InGameAppMenu::drawFrame() const { this->renderWindow->clear(sf::Color::Black); - for (int y = this->game.getBoard().getBaseHeight() + 5; y >= 0; y--) { + int sizeMultiplier = this->settings->getWindowSizeMultiplier(); + sf::Vector2f cellSize((float) sizeMultiplier, (float) sizeMultiplier); + + for (int y = this->game.getBoard().getBaseHeight() + 10; y >= 0; y--) { for (int x = 0; x < this->game.getBoard().getWidth(); x++) { bool isActivePieceHere = (this->game.getActivePiece() != nullptr) && (this->game.getActivePiece()->getPositions().contains(Position{x, y} - this->game.getActivePiecePosition())); bool isGhostPieceHere = (this->game.getActivePiece() != nullptr) && (this->game.getActivePiece()->getPositions().contains(Position{x, y} - this->game.ghostPiecePosition())); Block block = (isActivePieceHere || isGhostPieceHere) ? this->game.getActivePiece()->getBlockType() : this->game.getBoard().getBlock(Position{x, y}); - sf::RectangleShape cell(sf::Vector2f(20.f, 20.f)); + sf::RectangleShape cell(cellSize); cell.setFillColor(sf::Color(BLOCKS_COLOR[block].red, BLOCKS_COLOR[block].green, BLOCKS_COLOR[block].blue, (isGhostPieceHere && !isActivePieceHere) ? 150 : 255)); - cell.setPosition(sf::Vector2f(x*20, (this->game.getBoard().getBaseHeight() + 10 - y)*20)); + cell.setPosition(sf::Vector2f(x * sizeMultiplier, (this->game.getBoard().getBaseHeight() + 10 - y) * sizeMultiplier)); this->renderWindow->draw(cell); } } diff --git a/src/GraphicalUI/AppMenus/MainAppMenu.cpp b/src/GraphicalUI/AppMenus/MainAppMenu.cpp index d9cad52..439cd8e 100644 --- a/src/GraphicalUI/AppMenus/MainAppMenu.cpp +++ b/src/GraphicalUI/AppMenus/MainAppMenu.cpp @@ -14,10 +14,12 @@ MainAppMenu::MainAppMenu(std::shared_ptr menuStack, std::shared_ptrupdateMetaBinds(); + + if (this->enterReleased) { this->menuStack->push(std::make_shared(this->menuStack, this->settings, this->renderWindow)); } - else if (sf::Keyboard::isKeyPressed(sfKey::Escape)) { + if (this->escReleased) { this->menuStack->pop(); } } diff --git a/src/GraphicalUI/GraphApp.cpp b/src/GraphicalUI/GraphApp.cpp index fbfde52..df35466 100644 --- a/src/GraphicalUI/GraphApp.cpp +++ b/src/GraphicalUI/GraphApp.cpp @@ -19,7 +19,6 @@ GraphApp::GraphApp() { void GraphApp::run() { changeVideoMode(*this->renderWindow, this->settings->getVideoMode()); - std::cout << renderWindow->getSize().x << " " << renderWindow->getSize().y << std::endl; this->menuStack->push(std::make_shared(this->menuStack, this->settings, this->renderWindow)); bool quit = false; @@ -34,7 +33,6 @@ void GraphApp::run() { if (!quit) { if (clock.getElapsedTime().asMilliseconds() > timeAtNextFrame) { - timeAtNextFrame += TIME_BETWEEN_FRAMES; this->menuStack->top()->computeFrame(); if (this->menuStack->empty()) { @@ -43,6 +41,10 @@ void GraphApp::run() { else { this->menuStack->top()->drawFrame(); } + + while (clock.getElapsedTime().asMilliseconds() > timeAtNextFrame) { + timeAtNextFrame += TIME_BETWEEN_FRAMES; + } } } } diff --git a/src/GraphicalUI/Keybinds.cpp b/src/GraphicalUI/Keybinds.cpp index f9e9f2a..a556a6e 100644 --- a/src/GraphicalUI/Keybinds.cpp +++ b/src/GraphicalUI/Keybinds.cpp @@ -26,19 +26,20 @@ void Keybinds::loadKeybindsFromFile() { } char byte; - while (layoutFile.get(byte)) { - if (layoutFile.eof()) break; - + while (layoutFile.peek() != EOF) { + layoutFile.get(byte); Action action = Action(byte); - do { + bool separatorMet = false; + while (!separatorMet) { layoutFile.get(byte); - if (layoutFile.eof()) break; - - if (byte != 0xFF) { + if (byte == (char) 0xFF) { + separatorMet = true; + } + else { this->keybinds.at(action).insert(sfKey(byte)); } - } while (byte != 0xFF); + } } } diff --git a/src/GraphicalUI/Settings.cpp b/src/GraphicalUI/Settings.cpp index ccbe65e..b25f93c 100644 --- a/src/GraphicalUI/Settings.cpp +++ b/src/GraphicalUI/Settings.cpp @@ -34,7 +34,6 @@ void Settings::loadSettingsFromFile() { // window size mode settingsFile.get(byte); - std::cout << (int) byte; this->windowSizeMode = byte; // gamemode @@ -43,7 +42,6 @@ void Settings::loadSettingsFromFile() { // board width settingsFile.get(byte); - std::cout << (int) byte; this->menu.setBoardWidth(byte); // board height @@ -64,6 +62,7 @@ void Settings::loadSettingsFromFile() { settingsFile.get(pieceValue); this->selectedPieces.push_back({PiecesType(pieceType), pieceValue}); } + this->confirmSelectedPieces(); } void Settings::saveSettingsToFile() const {