示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
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);
}