static int save_buttn(int b, int d) { if (d) { if (config_tst_d(CONFIG_JOYSTICK_BUTTON_A, b)) { int tok = gui_token(gui_active()); int val = gui_value(gui_active()); return save_action(tok, (tok == GUI_CHAR ? gui_keyboard_char(val) : val)); } if (config_tst_d(CONFIG_JOYSTICK_BUTTON_B, b)) return save_action(GUI_BACK, 0); } return 1; }
static int save_keybd(int c, int d) { if (d) { if (c == KEY_EXIT) return save_action(GUI_BACK, 0); if (c == '\b' || c == 0x7F) { gui_focus(enter_id); return save_action(GUI_BS, 0); } else { gui_focus(enter_id); return 1; } } return 1; }
Generator::Generator(Engine *engine) : OptionNode{"Generator"}, assetmanager{engine->get_data_dir()}, spec{std::make_shared<GameSpec>(this->assetmanager)} { // node settings this->set_parent(engine); this->add("generation_seed", 4321); this->add("terrain_size", 2); this->add("terrain_base_id", 0); this->add("player_area", 850); this->add("player_radius", 10); this->add("load_filename", "/tmp/default_save.oas"); this->add("player_names", options::option_list{"name1", "name2"}); // Save game functions options::OptionAction save_action("save_game", [this]() { Engine &engine = Engine::get(); if (!engine.get_game()) { return options::OptionValue("Error: no open game to save"); } auto filename = this->get_variable("load_filename").value<std::string>(); gameio::save(engine.get_game(), filename); return options::OptionValue("Game saved"); }); this->add_action(save_action); // Load game function options::OptionAction load_action("load_game", [this]() { Engine &engine = Engine::get(); if (engine.get_game()) { return options::OptionValue("Error: close existing game before loading"); } else if (!this->spec->load_complete()) { return options::OptionValue("Error: game data has not finished loading"); } auto filename = this->get_variable("load_filename").value<std::string>(); // create an empty game this->regions.clear(); engine.start_game(*this); gameio::load(engine.get_game(), filename); return options::OptionValue("Game loaded"); }); this->add_action(load_action); // create a game using this generator options::OptionAction start_action("generate_game", [this]() { if (this->create()) { return options::OptionValue("Game generated"); } return options::OptionValue("Error: game data has not finished loading"); }); this->add_action(start_action); // stop game options::OptionAction end_action("end_game", [this]() { Engine &engine = Engine::get(); engine.end_game(); return options::OptionValue("Game ended"); }); this->add_action(end_action); // reload all assets options::OptionAction reload_action("reload_assets", [this]() { if (!this->spec->load_complete()) { return options::OptionValue("Error: game data has not finished loading"); } this->assetmanager.check_updates(); this->spec = std::make_shared<GameSpec>(this->assetmanager); return options::OptionValue("Starting asset reload"); }); this->add_action(reload_action); }