1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 05:47:34 +00:00

2048: Intialize settings window with current values

Currently, each time you open the settings window in 2048, it displays
the default values rather than the current values. This is confusing, so
display the current values instead.
This commit is contained in:
Timothy Flynn 2021-05-18 08:47:52 -04:00 committed by Andreas Kling
parent 63a1be1406
commit f02a13c884
3 changed files with 17 additions and 8 deletions

View file

@ -11,9 +11,13 @@
#include <LibGUI/CheckBox.h>
#include <LibGUI/Label.h>
#include <LibGUI/SpinBox.h>
#include <math.h>
GameSizeDialog::GameSizeDialog(GUI::Window* parent)
GameSizeDialog::GameSizeDialog(GUI::Window* parent, size_t board_size, size_t target, bool evil_ai)
: GUI::Dialog(parent)
, m_board_size(board_size)
, m_target_tile_power(log2(target))
, m_evil_ai(evil_ai)
{
set_rect({ 0, 0, 200, 150 });
set_title("New Game");

View file

@ -12,16 +12,16 @@
class GameSizeDialog : public GUI::Dialog {
C_OBJECT(GameSizeDialog)
public:
GameSizeDialog(GUI::Window* parent);
size_t board_size() const { return m_board_size; }
u32 target_tile() const { return 1u << m_target_tile_power; }
bool evil_ai() const { return m_evil_ai; }
bool temporary() const { return m_temporary; }
private:
size_t m_board_size { 4 };
size_t m_target_tile_power { 11 };
bool m_evil_ai { false };
GameSizeDialog(GUI::Window* parent, size_t board_size, size_t target_tile, bool evil_ai);
size_t m_board_size;
size_t m_target_tile_power;
bool m_evil_ai;
bool m_temporary { true };
};

View file

@ -39,9 +39,14 @@ int main(int argc, char** argv)
auto config = Core::ConfigFile::get_for_app("2048");
size_t board_size = config->read_num_entry("", "board_size", 4);
u32 target_tile = config->read_num_entry("", "target_tile", 0);
u32 target_tile = config->read_num_entry("", "target_tile", 2048);
bool evil_ai = config->read_bool_entry("", "evil_ai", false);
if ((target_tile & (target_tile - 1)) != 0) {
// If the target tile is not a power of 2, reset to its default value.
target_tile = 2048;
}
config->write_num_entry("", "board_size", board_size);
config->write_num_entry("", "target_tile", target_tile);
config->write_bool_entry("", "evil_ai", evil_ai);
@ -94,7 +99,7 @@ int main(int argc, char** argv)
Vector<Game> redo_stack;
auto change_settings = [&] {
auto size_dialog = GameSizeDialog::construct(window);
auto size_dialog = GameSizeDialog::construct(window, board_size, target_tile, evil_ai);
if (size_dialog->exec() || size_dialog->result() != GUI::Dialog::ExecOK)
return;