Make sure that tiles are loaded before tilegroups are requested. This fixed a bug...
[supertux.git] / src / leveleditor.cpp
index ff053a0..a45405d 100644 (file)
@@ -246,7 +246,6 @@ int leveleditor(char* filename)
           break;
 
         default:
-          //show_menu = true;
           break;
         }
       }
@@ -258,8 +257,7 @@ int leveleditor(char* filename)
         default:
           if(it >= 0)
           {
-            cur_tilegroup
-            = select_tilegroup_menu->get_item_by_id(it).text;
+            cur_tilegroup = select_tilegroup_menu->get_item_by_id(it).text;
             Menu::set_current(0);
             cur_objects = "";
 
@@ -447,6 +445,7 @@ void le_init_menus()
   select_tilegroup_menu->arrange_left = true;
   select_tilegroup_menu->additem(MN_LABEL,"Tilegroup",0,0);
   select_tilegroup_menu->additem(MN_HL,"",0,0);
+  select_tilegroup_menu->additem(MN_ACTION,"asd",0,0);
   std::set<TileGroup>* tilegroups = TileManager::tilegroups();
   int tileid = 1;
   for(std::set<TileGroup>::iterator it = tilegroups->begin();
@@ -643,7 +642,7 @@ void apply_level_settings_menu()
   le_world->get_level()->song_title = string_list_active(level_settings_menu->get_item_by_id(MNID_SONG).list);
 
   le_world->get_level()->change_size(atoi(level_settings_menu->get_item_by_id(MNID_LENGTH).input));
-  le_world->get_level()->time_left = atoi(level_settings_menu->get_item_by_id(MNID_BGIMG).input);
+  le_world->get_level()->time_left = atoi(level_settings_menu->get_item_by_id(MNID_TIME).input);
   le_world->get_level()->gravity = atof(level_settings_menu->get_item_by_id(MNID_GRAVITY).input);
   le_world->get_level()->bkgd_speed = atoi(level_settings_menu->get_item_by_id(MNID_BGSPEED).input);
   le_world->get_level()->bkgd_top.red = atoi(level_settings_menu->get_item_by_id(MNID_TopRed).input);
@@ -902,7 +901,7 @@ void le_drawlevel()
 
       /* draw whats inside stuff when cursor is selecting those */
       /* (draw them all the time - is this the right behaviour?) */
-      if(TileManager::instance()->get(le_world->get_level()->ia_tiles[y][x + (int)(pos_x / 32)])->editor_images.size() > 0)
+      if(!TileManager::instance()->get(le_world->get_level()->ia_tiles[y][x + (int)(pos_x / 32)])->editor_images.empty())
         TileManager::instance()->get(le_world->get_level()->ia_tiles[y][x + (int)(pos_x / 32)])->editor_images[0]->draw( x * 32 - ((int)pos_x % 32), y*32);
 
     }
@@ -1311,6 +1310,11 @@ void le_checkevents()
           {
             Menu::set_current(0);
           }
+          le_objects_bt->event(event);
+          if(le_objects_bt->get_state() == BUTTON_CLICKED)
+          {
+            Menu::set_current(0);
+          }      
         }
       }
 
@@ -1422,7 +1426,7 @@ void le_change(float x, float y, int tm, unsigned int c)
   {
     int xx,yy;
     int x1, x2, y1, y2;
-    unsigned int i;
+    unsigned int i = 0;
 
     /*  level_changed = true; */
 
@@ -1438,11 +1442,13 @@ void le_change(float x, float y, int tm, unsigned int c)
       cursor_base.height = 32;
 
       /* if there is a bad guy over there, remove it */
-      for(std::list<BadGuy*>::iterator it = le_world->bad_guys.begin(); it != le_world->bad_guys.end(); ++it)
+      for(std::list<BadGuy*>::iterator it = le_world->bad_guys.begin(); it != le_world->bad_guys.end(); ++it, ++i)
         if(rectcollision(cursor_base,(*it)->base))
         {
-          le_world->bad_guys.erase(le_world->bad_guys.begin(),it);
+         delete (*it);
+          le_world->bad_guys.erase(it);
           le_world->get_level()->badguy_data.erase(le_world->get_level()->badguy_data.begin() + i);
+         break;
         }
 
       break;
@@ -1480,11 +1486,14 @@ void le_change(float x, float y, int tm, unsigned int c)
         if((*it)->base.x/32 >= x1 && (*it)->base.x/32 <= x2
             && (*it)->base.y/32 >= y1 && (*it)->base.y/32 <= y2)
         {
+         delete (*it);
           it = le_world->bad_guys.erase(it);
+         le_world->get_level()->badguy_data.erase(le_world->get_level()->badguy_data.begin() + i);
           continue;
         }
         else
         {
+         ++i;
           ++it;
         }
       }