ff
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -5,7 +5,6 @@
|
||||
#include "Game.h"
|
||||
|
||||
static const int FRAMES_PER_SECOND = 60; // the number of frames per second, all the values in the app were choosen with this number in mind
|
||||
static const int MAXIMUM_PIECES_SIZE = 15; // the maximum size of available pieces
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -6,15 +6,18 @@
|
||||
#include <memory>
|
||||
#include <SFML/Graphics.hpp>
|
||||
|
||||
class AppMenu;
|
||||
using MenuStack = std::stack<std::shared_ptr<AppMenu>>;
|
||||
|
||||
|
||||
class AppMenu {
|
||||
protected:
|
||||
std::shared_ptr<std::stack<AppMenu>> menuStack;
|
||||
std::shared_ptr<MenuStack> menuStack;
|
||||
std::shared_ptr<Settings> settings;
|
||||
std::shared_ptr<sf::RenderWindow> renderWindow;
|
||||
|
||||
public:
|
||||
AppMenu(std::shared_ptr<std::stack<AppMenu>> menuStack, std::shared_ptr<Settings> settings, std::shared_ptr<sf::RenderWindow> renderWindow) :
|
||||
AppMenu(std::shared_ptr<MenuStack> menuStack, std::shared_ptr<Settings> settings, std::shared_ptr<sf::RenderWindow> renderWindow) :
|
||||
menuStack(menuStack),
|
||||
settings(settings),
|
||||
renderWindow(renderWindow)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
#include <SFML/Graphics.hpp>
|
||||
|
||||
|
||||
InGameAppMenu::InGameAppMenu(std::shared_ptr<std::stack<AppMenu>> menuStack, std::shared_ptr<Settings> settings, std::shared_ptr<sf::RenderWindow> renderWindow) :
|
||||
InGameAppMenu::InGameAppMenu(std::shared_ptr<MenuStack> menuStack, std::shared_ptr<Settings> settings, std::shared_ptr<sf::RenderWindow> renderWindow) :
|
||||
AppMenu(menuStack, settings, renderWindow),
|
||||
game(this->settings->getMenu().startGame(this->settings->getGamemode()))
|
||||
{
|
||||
|
||||
@@ -13,7 +13,7 @@ class InGameAppMenu : public AppMenu {
|
||||
bool paused;
|
||||
|
||||
public:
|
||||
InGameAppMenu(std::shared_ptr<std::stack<AppMenu>> menuStack, std::shared_ptr<Settings> settings, std::shared_ptr<sf::RenderWindow> renderWindow);
|
||||
InGameAppMenu(std::shared_ptr<MenuStack> menuStack, std::shared_ptr<Settings> settings, std::shared_ptr<sf::RenderWindow> renderWindow);
|
||||
|
||||
void computeFrame();
|
||||
|
||||
|
||||
@@ -8,14 +8,14 @@
|
||||
#include <SFML/Graphics.hpp>
|
||||
|
||||
|
||||
MainAppMenu::MainAppMenu(std::shared_ptr<std::stack<AppMenu>> menuStack, std::shared_ptr<Settings> settings, std::shared_ptr<sf::RenderWindow> renderWindow) :
|
||||
MainAppMenu::MainAppMenu(std::shared_ptr<MenuStack> menuStack, std::shared_ptr<Settings> settings, std::shared_ptr<sf::RenderWindow> renderWindow) :
|
||||
AppMenu(menuStack, settings, renderWindow) {
|
||||
|
||||
}
|
||||
|
||||
void MainAppMenu::computeFrame() {
|
||||
if (sf::Keyboard::isKeyPressed(sfKey::Enter)) {
|
||||
this->menuStack->push(InGameAppMenu(this->menuStack, this->settings, this->renderWindow));
|
||||
this->menuStack->push(std::make_shared<InGameAppMenu>(this->menuStack, this->settings, this->renderWindow));
|
||||
}
|
||||
else if (sf::Keyboard::isKeyPressed(sfKey::Escape)) {
|
||||
this->menuStack->pop();
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
class MainAppMenu : public AppMenu {
|
||||
public:
|
||||
MainAppMenu(std::shared_ptr<std::stack<AppMenu>> menuStack, std::shared_ptr<Settings> settings, std::shared_ptr<sf::RenderWindow> renderWindow);
|
||||
MainAppMenu(std::shared_ptr<MenuStack> menuStack, std::shared_ptr<Settings> settings, std::shared_ptr<sf::RenderWindow> renderWindow);
|
||||
|
||||
void computeFrame();
|
||||
|
||||
|
||||
@@ -13,19 +13,19 @@ static const double TIME_BETWEEN_FRAMES = (1000.f / FRAMES_PER_SECOND);
|
||||
|
||||
GraphApp::GraphApp() {
|
||||
this->settings = std::make_shared<Settings>();
|
||||
this->menuStack = std::make_shared<std::stack<AppMenu>>();
|
||||
this->window = std::make_shared<sf::RenderWindow>();
|
||||
this->menuStack = std::make_shared<MenuStack>();
|
||||
this->renderWindow = std::make_shared<sf::RenderWindow>();
|
||||
}
|
||||
|
||||
void GraphApp::run() {
|
||||
changeVideoMode(*this->window, this->settings->getVideoMode());
|
||||
this->menuStack->push(MainAppMenu(this->menuStack, this->settings, this->window));
|
||||
changeVideoMode(*this->renderWindow, this->settings->getVideoMode());
|
||||
this->menuStack->push(std::make_shared<MainAppMenu>(this->menuStack, this->settings, this->renderWindow));
|
||||
|
||||
bool quit = false;
|
||||
double timeAtNextFrame = 0;
|
||||
sf::Clock clock;
|
||||
while (!quit) {
|
||||
while (const std::optional event = this->window->pollEvent()) {
|
||||
while (const std::optional event = this->renderWindow->pollEvent()) {
|
||||
if (event->is<sf::Event::Closed>()) {
|
||||
quit = true;
|
||||
}
|
||||
@@ -34,16 +34,16 @@ void GraphApp::run() {
|
||||
if (!quit) {
|
||||
if (clock.getElapsedTime().asMilliseconds() > timeAtNextFrame) {
|
||||
timeAtNextFrame += TIME_BETWEEN_FRAMES;
|
||||
this->menuStack->top().computeFrame();
|
||||
this->menuStack->top()->computeFrame();
|
||||
|
||||
if (this->menuStack->empty()) {
|
||||
quit = true;
|
||||
}
|
||||
else {
|
||||
this->menuStack->top().drawFrame();
|
||||
this->menuStack->top()->drawFrame();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
window->close();
|
||||
renderWindow->close();
|
||||
}
|
||||
|
||||
@@ -11,8 +11,8 @@
|
||||
class GraphApp {
|
||||
private:
|
||||
std::shared_ptr<Settings> settings;
|
||||
std::shared_ptr<std::stack<AppMenu>> menuStack;
|
||||
std::shared_ptr<sf::RenderWindow> window;
|
||||
std::shared_ptr<MenuStack> menuStack;
|
||||
std::shared_ptr<sf::RenderWindow> renderWindow;
|
||||
|
||||
public:
|
||||
GraphApp();
|
||||
|
||||
81
src/GraphicalUI/Keybinds.cpp
Normal file
81
src/GraphicalUI/Keybinds.cpp
Normal file
@@ -0,0 +1,81 @@
|
||||
#include "Keybinds.h"
|
||||
|
||||
#include "../Core/Action.h"
|
||||
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <fstream>
|
||||
#include <SFML/Graphics.hpp>
|
||||
|
||||
|
||||
Keybinds::Keybinds(int layoutNumber) :
|
||||
layoutNumber(layoutNumber) {
|
||||
|
||||
for (Action action : ACTION_LIST_IN_ORDER) {
|
||||
this->keybinds.insert({action, std::set<sfKey>()});
|
||||
}
|
||||
|
||||
this->loadKeybindsFromFile();
|
||||
}
|
||||
|
||||
void Keybinds::loadKeybindsFromFile() {
|
||||
std::ifstream layoutFile("data/config/keybinds/layout" + std::to_string(this->layoutNumber) + ".bin", std::ios::binary);
|
||||
|
||||
for (Action action : ACTION_LIST_IN_ORDER) {
|
||||
this->keybinds.at(action).clear();
|
||||
}
|
||||
|
||||
char byte;
|
||||
while (layoutFile.get(&byte, 1)) {
|
||||
Action action = Action(byte);
|
||||
|
||||
do {
|
||||
layoutFile.get(&byte, 1);
|
||||
if (byte != 0xFF) {
|
||||
this->keybinds.at(action).insert(sfKey(byte));
|
||||
}
|
||||
} while (byte != 0xFF);
|
||||
}
|
||||
}
|
||||
|
||||
void Keybinds::saveKeybindsToFile() const {
|
||||
std::ofstream layoutFile("data/config/keybinds/layout" + std::to_string(this->layoutNumber) + ".bin", std::ios::trunc | std::ios::binary);
|
||||
|
||||
char byte;
|
||||
for (Action action : ACTION_LIST_IN_ORDER) {
|
||||
byte = action;
|
||||
layoutFile.write(&byte, 1);
|
||||
|
||||
for (sfKey key : this->keybinds.at(action)) {
|
||||
byte = (int) key;
|
||||
layoutFile.write(&byte, 1);
|
||||
}
|
||||
|
||||
byte = 0xFF;
|
||||
layoutFile.write(&byte, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void Keybinds::addKey(Action action, sfKey key) {
|
||||
this->keybinds.at(action).insert(key);
|
||||
}
|
||||
|
||||
void Keybinds::clearKeys(Action action) {
|
||||
this->keybinds.at(action).clear();
|
||||
}
|
||||
|
||||
const std::set<Action> Keybinds::getActions(sfKey key) const {
|
||||
std::set<Action> actions;
|
||||
|
||||
for (const auto& [action, keys] : this->keybinds) {
|
||||
if (keys.contains(key)) {
|
||||
actions.insert(action);
|
||||
}
|
||||
}
|
||||
|
||||
return actions;
|
||||
}
|
||||
|
||||
const std::set<sfKey>& Keybinds::getKeybinds(Action action) const {
|
||||
return this->keybinds.at(action);
|
||||
}
|
||||
@@ -3,7 +3,7 @@
|
||||
#include "../Core/Action.h"
|
||||
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include <set>
|
||||
#include <SFML/Graphics.hpp>
|
||||
|
||||
using sfKey = sf::Keyboard::Key;
|
||||
@@ -14,7 +14,7 @@ static const int CUSTOMIZABLE_KEYBINDS = NUMBER_OF_KEYBINDS - 1;
|
||||
|
||||
class Keybinds {
|
||||
private:
|
||||
std::map<Action, std::vector<sfKey>> keybinds;
|
||||
std::map<Action, std::set<sfKey>> keybinds;
|
||||
int layoutNumber;
|
||||
|
||||
public:
|
||||
@@ -28,7 +28,7 @@ class Keybinds {
|
||||
|
||||
void clearKeys(Action action);
|
||||
|
||||
const std::vector<Action>& getActions(sfKey key) const;
|
||||
const std::set<Action> getActions(sfKey key) const;
|
||||
|
||||
const std::vector<sfKey>& getKeybinds(Action action) const;
|
||||
const std::set<sfKey>& getKeybinds(Action action) const;
|
||||
};
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
static const int MAXIMUM_BOARD_WIDTH = 40;
|
||||
static const int MAXIMUM_BOARD_HEIGHT = 40;
|
||||
|
||||
static const int MAXIMUM_PIECES_SIZE = 10;
|
||||
|
||||
|
||||
class Settings {
|
||||
private:
|
||||
|
||||
@@ -137,17 +137,17 @@ void resetKeybindFile(int layout) {
|
||||
keybinds.insert({HOLD, sfKey::Z});
|
||||
}
|
||||
|
||||
char contentChar;
|
||||
char byte;
|
||||
for (Action action : ACTION_LIST_IN_ORDER) {
|
||||
contentChar = action;
|
||||
layoutFile.write(&contentChar, 1);
|
||||
byte = action;
|
||||
layoutFile.write(&byte, 1);
|
||||
|
||||
if (keybinds.contains(action)) {
|
||||
contentChar = (int) keybinds.at(action);
|
||||
layoutFile.write(&contentChar, 1);
|
||||
byte = (int) keybinds.at(action);
|
||||
layoutFile.write(&byte, 1);
|
||||
}
|
||||
|
||||
contentChar = 0xFF;
|
||||
layoutFile.write(&contentChar, 1);
|
||||
byte = 0xFF;
|
||||
layoutFile.write(&byte, 1);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user