small fixes (timing and animation) on nolok
[supertux.git] / src / leveleditor.cpp
index 0578d37..d6d8a2e 100644 (file)
 #include "leveleditor.h"
 #include "resources.h"
 #include "tile.h"
-#include "tilemap.h"
 #include "tile_manager.h"
 #include "sector.h"
-#include "background.h"
 #include "gameloop.h"
-#include "gameobjs.h"
-#include "camera.h"
+#include "object/gameobjs.h"
+#include "object/camera.h"
+#include "object/tilemap.h"
+#include "object/background.h"
 
 LevelEditor::LevelEditor()
 {
@@ -288,7 +288,9 @@ while(SDL_PollEvent(&event))
         level_subset->description = create_subset_menu->get_item_by_id(MN_ID_DESCRIPTION_SUBSET).input;
         //FIXME: generate better level filenames
         level_subset->add_level(subset_name+'/'+"new_level.stl");
-        Level::create(level_subset->get_level_filename(0));
+        Level* newlevel = new Level();
+        newlevel->add_sector(create_sector("main", 25, 19));
+        newlevel->save(level_subset->get_level_filename(0));
         level_subset->save();
         
         load_level(0);
@@ -368,7 +370,9 @@ while(SDL_PollEvent(&event))
           if(confirm_dialog(NULL, str))
             {
             level_subset->add_level("new_level.stl");
-            Level::create(level_subset->get_level_filename(level_nb + 1));
+            Level* newlevel = new Level();
+            newlevel->add_sector(create_sector("main", 25, 19));
+            newlevel->save(level_subset->get_level_filename(level_nb + 1));
             level_subset->save();
             load_level(level_nb + 1);
             }
@@ -780,7 +784,7 @@ if(sector_ == NULL)
   {
   if(!confirm_dialog(NULL, _("No more sectors exist. Create another?")))
     return;
-  sector_ = Sector::create("new_sector",25,19);
+  sector_ = create_sector("new_sector",25,19);
   level->add_sector(sector_);
   }
 
@@ -855,6 +859,7 @@ void LevelEditor::test_level()
 
 void LevelEditor::change(int x, int y, int newtile, int layer)
 {  
+  (void) layer;
   // find the tilemap of the current layer, and then change the tile
   if(x < 0 || (unsigned int)x >= sector->solids->get_width()*32 ||
       y < 0 || (unsigned int)y >= sector->solids->get_height()*32)
@@ -934,7 +939,7 @@ mouse_cursor->set_state(MC_HIDE);
 
 
 char str[1024];
-char *text1[] = {
+const char *text1[] = {
          _("This is the built-in level editor. Its aim is to be intuitive\n"
          "and simple to use, so it should be pretty straightforward.\n"
          "\n"
@@ -970,7 +975,7 @@ char *text1[] = {
          "enemies and game objects in the bottom.\n")
                 };
 
-char *text2[] = {
+const char *text2[] = {
          _("The Foreground/Interactive/Background buttons may be used to\n"
          "see and edit the respective layer. Levels have three tiles layers:\n"
          "Foreground - tiles are drawn on top of everything and have no contact\n"
@@ -1003,7 +1008,7 @@ char *text2[] = {
          "Webpage: http://pingus.seul.org/~grumbel/flexlay/")
                 };
 
-char **text[] = { text1, text2 };
+const char **text[] = { text1, text2 };
 
 
 bool done;
@@ -1032,3 +1037,19 @@ for(unsigned int i = 0; i < sizeof(text) / sizeof(text[0]); i++)
 show_grid = show_grid_t;
 mouse_cursor->set_state(MC_NORMAL);
 }
+
+Sector*
+LevelEditor::create_sector(const std::string& name, size_t width, size_t height)
+{
+  Sector* sector = new Sector;
+  sector->set_name(name);
+  
+  sector->add_object(new TileMap(LAYER_BACKGROUNDTILES, false, width, height));
+  sector->add_object(new TileMap(LAYER_TILES, true, width, height));
+  sector->add_object(new TileMap(LAYER_FOREGROUNDTILES, false, width, height));
+  sector->add_object(new Camera(sector));
+  sector->update_game_objects();
+  
+  return sector;
+}
+