editor2: random map generation

This commit is contained in:
Tomasz Śniatowski 2008-08-17 19:24:02 +01:00
parent 24cf368c4b
commit 15eb3d54c9
5 changed files with 65 additions and 7 deletions

View file

@ -51,7 +51,7 @@
border_size = 5
horizontal_alignment = "right"
[button]
id = "generate"
id = "ok"
definition = "default"
label = _ "Generate"
[/button]

View file

@ -37,6 +37,7 @@
#include "../map_create.hpp"
#include "../mapgen.hpp"
#include "../preferences.hpp"
#include "../random.hpp"
#include "../wml_exception.hpp"
#include "SDL.h"
@ -53,13 +54,15 @@ namespace editor2 {
editor_controller::editor_controller(const config &game_config, CVideo& video)
: controller_base(SDL_GetTicks(), game_config, video)
, mouse_handler_base(get_map())
, mouse_handler_base(get_map()), rng_(NULL), rng_setter_(NULL)
, map_context_(editor_map(game_config, 44, 33, t_translation::GRASS_LAND))
, gui_(NULL), map_generator_(NULL), tooltip_manager_(video), floating_label_manager_(NULL)
, do_quit_(false), quit_mode_(EXIT_ERROR)
, toolbar_dirty_(true), auto_update_transitions_(true)
{
init(video);
rng_ = new rand_rng::rng();
rng_setter_ = new rand_rng::set_random_generator(rng_);
floating_label_manager_ = new font::floating_label_context();
size_specs_ = new size_specs();
adjust_sizes(gui(), *size_specs_);
@ -148,6 +151,8 @@ editor_controller::~editor_controller()
delete a.second;
}
delete prefs_disp_manager_;
delete rng_setter_;
delete rng_;
}
EXIT_STATUS editor_controller::main_loop()
@ -260,11 +265,23 @@ void editor_controller::generate_map_dialog()
map_generator_ = create_map_generator("", cfg);
}
}
if (!confirm_discard()) return;
gui2::teditor_generate_map dialog;
dialog.set_map_generator(map_generator_);
dialog.set_gui(&gui());
dialog.show(gui().video());
if (map_generator_->allow_user_config()) {
map_generator_->user_config(gui());
int res = dialog.get_retval();
if(res == gui2::twindow::OK) {
if (!confirm_discard()) return;
std::string map_string =
map_generator_->create_map(std::vector<std::string>());
if (map_string.empty()) {
gui::message_dialog(gui(), "",
_("Map creation failed.")).show();
} else {
editor_map new_map(game_config_, map_string);
set_map(new_map);
}
}
}

View file

@ -44,6 +44,11 @@ namespace font {
class floating_label_context;
}
namespace rand_rng {
class rng;
class set_random_generator;
}
namespace editor2 {
class brush_bar;
@ -266,6 +271,10 @@ class editor_controller : public controller_base,
*/
void redo();
rand_rng::rng* rng_;
rand_rng::set_random_generator* rng_setter_;
/** The current map object */
map_context map_context_;

View file

@ -14,6 +14,8 @@
#include "gui/dialogs/editor_generate_map.hpp"
#include "gui/dialogs/helper.hpp"
#include "gui/widgets/button.hpp"
#include "gui/widgets/widget.hpp"
#include "gui/widgets/window.hpp"
@ -21,26 +23,40 @@
#include "gui/widgets/settings.hpp"
#include "gui/widgets/text_box.hpp"
#include "log.hpp"
#include "mapgen.hpp"
#include "wml_exception.hpp"
#define DBG_GUI LOG_STREAM_INDENT(debug, gui)
#define LOG_GUI LOG_STREAM_INDENT(info, gui)
#define WRN_GUI LOG_STREAM_INDENT(warn, gui)
#define ERR_GUI LOG_STREAM_INDENT(err, gui)
#define ERR_ED LOG_STREAM_INDENT(err, editor)
namespace gui2 {
teditor_generate_map::teditor_generate_map()
: map_generator_(NULL), gui_(NULL)
{
}
void teditor_generate_map::do_settings(twindow& window)
{
if (map_generator_->allow_user_config()) {
map_generator_->user_config(*gui_);
}
}
twindow teditor_generate_map::build_window(CVideo& video)
{
return build(video, get_id(EDITOR_GENERATE_MAP));
}
void teditor_generate_map::pre_show(CVideo& /*video*/, twindow& /*window*/)
void teditor_generate_map::pre_show(CVideo& /*video*/, twindow& window)
{
assert(map_generator_);
assert(gui_);
tbutton& settings_button = window.get_widget<tbutton>("settings", false);
settings_button.set_callback_mouse_left_click(
dialog_callback<teditor_generate_map, &teditor_generate_map::do_settings>);
}
void teditor_generate_map::post_show(twindow& /*window*/)

View file

@ -17,6 +17,10 @@
#include "gui/dialogs/dialog.hpp"
class map_generator;
class display;
namespace gui2 {
class teditor_generate_map : public tdialog
@ -24,6 +28,14 @@ class teditor_generate_map : public tdialog
public:
teditor_generate_map();
void do_settings(twindow& window);
void set_map_generator(map_generator* mg) { map_generator_ = mg; }
map_generator* get_map_generator() { return map_generator_; }
void set_gui(display* d) { gui_ = d; }
display* get_gui() { return gui_; }
private:
/** Inherited from tdialog. */
twindow build_window(CVideo& video);
@ -33,6 +45,10 @@ private:
/** Inherited from tdialog. */
void post_show(twindow& window);
map_generator* map_generator_;
display* gui_;
};
} // namespace gui2