updated file format

This commit is contained in:
2025-03-31 19:22:52 +02:00
parent 5ea47ddd25
commit d5ac79559e
5 changed files with 78 additions and 30 deletions

View File

@@ -13,44 +13,54 @@ static const sf::Vector2u BASE_WINDOW_SIZE = {80, 50};
static const int WINDOW_SIZE_MULTIPLIERS[] = {4, 6, 10, 14, 20, 30, 40};
static const int WINDOW_SIZE_LAST_MODE = (sizeof(WINDOW_SIZE_MULTIPLIERS) / sizeof(int)) - 1;
static const int START_TIMER_MAX = 4;
static const int DISTRIBUTION_MAX = 10;
static const int DISTRIBUTION_MAX = 20;
Settings::Settings(int maximumPiecesSize) {
if (maximumPiecesSize < MINIMUM_PIECES_SIZE || maximumPiecesSize > LOADED_PIECES_SIZE) {
this->maximumPiecesSize = 0;
this->loadedPieces = false;
}
else {
bool loaded = true;
int i = 1;
while (loaded && (i <= maximumPiecesSize)) {
loaded = this->menu.getPiecesList().loadPieces(i);
i++;
}
if (loaded) {
this->maximumPiecesSize = maximumPiecesSize;
this->loadedPieces = true;
}
else {
this->maximumPiecesSize = 0;
this->loadedPieces = false;
}
}
Settings::Settings(bool loadPieces) {
this->keybinds.reserve(NUMBER_OF_KEYBINDS);
for (int i = 0; i < NUMBER_OF_KEYBINDS; i++) {
this->keybinds.emplace_back(i);
}
this->loadSettingsFromFile();
this->loadSettingsFromFile(loadPieces);
}
void Settings::loadSettingsFromFile() {
bool Settings::loadPieces(int maximumPiecesSizeRequest) {
if (maximumPiecesSizeRequest < MINIMUM_PIECES_SIZE) {
maximumPiecesSizeRequest = MINIMUM_PIECES_SIZE;
}
else if (maximumPiecesSizeRequest > LOADED_PIECES_SIZE || maximumPiecesSizeRequest > MAXIMUM_PIECES_SIZE) {
maximumPiecesSizeRequest = LOADED_PIECES_SIZE;
}
bool succeeded = true;
int i = 1;
while (succeeded && (i <= maximumPiecesSizeRequest)) {
succeeded = this->menu.getPiecesList().loadPieces(i);
i++;
}
this->maximumPiecesSize = (succeeded) ? maximumPiecesSizeRequest : 0;
return succeeded;
}
void Settings::loadSettingsFromFile(bool loadPieces) {
std::ifstream settingsFile("data/config/settings.bin", std::ios::binary);
char byte;
// file format version
settingsFile.get(byte);
// maximum pieces size
settingsFile.get(byte);
if (loadPieces) {
this->loadedPieces = this->loadPieces(byte);
}
else {
this->loadedPieces = false;
}
// keybind layout
settingsFile.get(byte);
this->chosenKeybinds = byte;
@@ -144,6 +154,14 @@ void Settings::saveSettingsToFile() const {
std::ofstream settingsFile("data/config/settings.bin", std::ios::trunc | std::ios::binary);
char byte;
// file format version
byte = CURRENT_FILE_FORMAT_VERSION;
settingsFile.write(&byte, 1);
// maximum pieces size
byte = this->maximumPiecesSize;
settingsFile.write(&byte, 1);
// keybind layout
byte = this->chosenKeybinds;
settingsFile.write(&byte, 1);