+#include "tile.h"
+#include "tile_manager.h"
+#include "sector.h"
+#include "gameloop.h"
+#include "object_factory.h"
+#include "object/gameobjs.h"
+#include "object/camera.h"
+#include "object/tilemap.h"
+#include "object/background.h"
+
+LevelEditor::LevelEditor()
+{
+ show_grid = true;
+
+ selection.clear();
+ selection_end = selection_ini = Vector(0,0);
+ left_button = middle_button = mouse_moved = false;
+ level = 0;
+ level_subset = 0;
+
+ cur_layer = LAYER_TILES;
+ level_changed = false;
+
+ sector = 0;
+ zoom = 1.0;
+
+ /* Creating menus */
+ level_subsets = FileSystem::dsubdirs("/levels", "info");
+ subset_menu = new Menu();
+ subset_menu->additem(MN_LABEL,_("Load Subset"),0,0);
+ subset_menu->additem(MN_HL,"",0,0);
+ int i = 0;
+ for(std::set<std::string>::iterator it = level_subsets.begin(); it != level_subsets.end(); ++it, ++i)
+ subset_menu->additem(MN_ACTION, (*it),0,0,i);
+ subset_menu->additem(MN_HL,"",0,0);
+ subset_menu->additem(MN_BACK,_("Back"),0,0);
+
+ create_subset_menu = new Menu();
+ create_subset_menu->additem(MN_LABEL,_("New Level Subset"),0,0);
+ create_subset_menu->additem(MN_HL,"",0,0);
+ create_subset_menu->additem(MN_TEXTFIELD,_("Filename "),0,0,MN_ID_FILENAME_SUBSET);
+ create_subset_menu->additem(MN_TEXTFIELD,_("Title "),0,0,MN_ID_TITLE_SUBSET);
+ create_subset_menu->additem(MN_TEXTFIELD,_("Description"),0,0,MN_ID_DESCRIPTION_SUBSET);
+ create_subset_menu->additem(MN_ACTION,_("Create"),0,0, MN_ID_CREATE_SUBSET);
+ create_subset_menu->additem(MN_HL,"",0,0);
+ create_subset_menu->additem(MN_BACK,_("Back"),0,0);
+
+ main_menu = new Menu();
+ main_menu->additem(MN_LABEL,_("Level Editor Menu"),0,0);
+ main_menu->additem(MN_HL,"",0,0);
+ main_menu->additem(MN_ACTION,_("Return to Level Editor"),0,0,MN_ID_RETURN);
+ main_menu->additem(MN_GOTO,_("Create Level Subset"),0,create_subset_menu);
+ main_menu->additem(MN_GOTO,_("Load Level Subset"),0,subset_menu);
+ main_menu->additem(MN_HL,"",0,0);
+ main_menu->additem(MN_ACTION,_("Quit Level Editor"),0,0,MN_ID_QUIT);
+
+ settings_menu = new Menu();
+ settings_menu->additem(MN_LABEL,_("Level Settings"),0,0);
+ settings_menu->additem(MN_HL,"",0,0);
+ settings_menu->additem(MN_TEXTFIELD,_("Name "),0,0,MN_ID_NAME);
+ settings_menu->additem(MN_TEXTFIELD,_("Author "),0,0,MN_ID_AUTHOR);
+ settings_menu->additem(MN_NUMFIELD, _("Width "),0,0,MN_ID_WIDTH);
+ settings_menu->additem(MN_NUMFIELD, _("Height "),0,0,MN_ID_HEIGHT);
+ settings_menu->additem(MN_HL,"",0,0);
+ settings_menu->additem(MN_ACTION,_("Apply"),0,0,MN_ID_APPLY_SETTINGS);
+
+ /* Creating button groups */
+ load_buttons_gfx();
+
+ tiles_board = new ButtonGroup(Vector(screen->w - 140, 100),
+ Vector(32,32), Vector(4,8));
+
+ tiles_board->add_button(Button(img_rubber_bt, _("Eraser"), SDLKey(SDLK_DELETE)), 0);
+ unsigned int id;
+ for(id = 1; id < tile_manager->get_max_tileid(); id++)
+ {
+ const Tile* tile = tile_manager->get(id);
+ if(!tile)
+ continue;
+
+ Surface* surface = tile->get_editor_image();
+ if(!surface)
+ continue;
+
+ Button button = Button(surface, "", SDLKey(0));
+ tiles_board->add_button(button, id);
+ }
+ gameobjs_first_id = id;
+
+ for(Factories::iterator i = object_factories->begin();
+ i != object_factories->end(); ++i) {
+
+// Surface *img = badguy.get_image();
+// FIXME: get image from object. Using the rubber in the meanwhile.
+ tiles_board->add_button(Button(img_rubber_bt, i->first,
+ SDLKey(SDLK_1+id)), id++);
+ }
+
+ tiles_layer = new ButtonGroup(Vector(12, screen->h-64), Vector(80,20), Vector(1,3));
+ tiles_layer->add_button(Button(img_foreground_bt, _("Edtit foreground tiles"),
+ SDLK_F10), LAYER_FOREGROUNDTILES);
+ tiles_layer->add_button(Button(img_interactive_bt, _("Edit interactive tiles"),
+ SDLK_F11), LAYER_TILES, true);
+ tiles_layer->add_button(Button(img_background_bt, _("Edit background tiles"),
+ SDLK_F12), LAYER_BACKGROUNDTILES);
+
+ level_options = new ButtonGroup(Vector(screen->w-164, screen->h-36), Vector(32,32), Vector(5,1));
+ level_options->add_pair_of_buttons(Button(img_next_sector_bt, _("Next sector"), SDLKey(0)), BT_NEXT_SECTOR,
+ Button(img_previous_sector_bt, _("Prevous sector"), SDLKey(0)), BT_PREVIOUS_SECTOR);
+ level_options->add_pair_of_buttons(Button(img_next_level_bt, _("Next level"), SDLKey(0)), BT_NEXT_LEVEL,
+ Button(img_previous_level_bt, _("Prevous level"), SDLKey(0)), BT_PREVIOUS_LEVEL);
+ level_options->add_button(Button(img_save_level_bt, _("Save level"), SDLK_F5), BT_LEVEL_SAVE);
+ level_options->add_button(Button(img_test_level_bt, _("Test level"), SDLK_F6), BT_LEVEL_TEST);
+ level_options->add_button(Button(img_setup_level_bt, _("Setup level"), SDLK_F7), BT_LEVEL_SETUP);
+}
+
+LevelEditor::~LevelEditor()