X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fleveleditor.cpp;h=623a513552b3aa29e2fdb4aa9105487d2509ad04;hb=e4db6eb50cd6bcba607858b5e6c4c5d53531ed1f;hp=0a3ca2d88d3e2e263fbc28b6472b698298c8fde0;hpb=1390e7f397791aea58342ee80a5e71045060e79c;p=supertux.git diff --git a/src/leveleditor.cpp b/src/leveleditor.cpp index 0a3ca2d88..623a51355 100644 --- a/src/leveleditor.cpp +++ b/src/leveleditor.cpp @@ -49,6 +49,8 @@ frame_timer.init(true); level_name_timer.init(true); 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; @@ -63,10 +65,7 @@ subset_menu->additem(MN_LABEL,_("Load Subset"),0,0); subset_menu->additem(MN_HL,"",0,0); int i = 0; for(std::set::iterator it = level_subsets.begin(); it != level_subsets.end(); ++it, ++i) -{ -std::cerr << "adding entry level subset " << i << " entry: " << (*it) << std::endl; subset_menu->additem(MN_ACTION, (*it),0,0,i); -} subset_menu->additem(MN_HL,"",0,0); subset_menu->additem(MN_BACK,_("Back"),0,0); @@ -169,6 +168,9 @@ delete subset_menu; delete create_subset_menu; delete main_menu; delete settings_menu; + +delete level; +delete level_subset; } void LevelEditor::load_buttons_gfx() @@ -215,7 +217,10 @@ Menu::set_current(0); DrawingContext context; if(!filename.empty()) + { + level_nb = -1; load_level(filename); + } else Menu::set_current(main_menu); @@ -264,10 +269,13 @@ while(SDL_PollEvent(&event)) else if(create_subset_menu->check() == MN_ID_CREATE_SUBSET) { // applying settings: LevelSubset::create(create_subset_menu->get_item_by_id(MN_ID_FILENAME_SUBSET).input); - level_subset.load(create_subset_menu->get_item_by_id(MN_ID_FILENAME_SUBSET).input); - level_subset.title = create_subset_menu->item[MN_ID_TITLE_SUBSET].input; - level_subset.description = create_subset_menu->item[MN_ID_DESCRIPTION_SUBSET].input; + delete level_subset; + level_subset = new LevelSubset(); + level_subset->load(create_subset_menu->get_item_by_id(MN_ID_FILENAME_SUBSET).input); + + level_subset->title = create_subset_menu->item[MN_ID_TITLE_SUBSET].input; + level_subset->description = create_subset_menu->item[MN_ID_DESCRIPTION_SUBSET].input; load_level(1); @@ -284,7 +292,6 @@ while(SDL_PollEvent(&event)) std::set::iterator it = level_subsets.begin(); for(int t = 0; t < i; t++) it++; -std::cerr << "load subset level_subsets " << i << ": " << (*it) << std::endl; load_level_subset(*it); Menu::set_current(0); } @@ -295,8 +302,8 @@ std::cerr << "load subset level_subsets " << i << ": " << (*it) << std::endl; { // applying settings: level_changed = true; - level.name = settings_menu->get_item_by_id(MN_ID_NAME).input; - level.author = settings_menu->get_item_by_id(MN_ID_AUTHOR).input; + level->name = settings_menu->get_item_by_id(MN_ID_NAME).input; + level->author = settings_menu->get_item_by_id(MN_ID_AUTHOR).input; solids->resize(atoi(settings_menu->get_item_by_id(MN_ID_WIDTH).input.c_str()), atoi(settings_menu->get_item_by_id(MN_ID_HEIGHT).input.c_str())); @@ -338,33 +345,33 @@ std::cerr << "load subset level_subsets " << i << ": " << (*it) << std::endl; Menu::set_current(settings_menu); break; case BT_NEXT_LEVEL: - if(level_nb < level_subset.get_num_levels()) + if(level_nb+1 < level_subset->get_num_levels()) load_level(level_nb + 1); else { - Level new_lev; char str[1024]; sprintf(str,_("Level %d doesn't exist. Create it?"), level_nb + 1); if(confirm_dialog(NULL, str)) { - level_subset.add_level("new_level.stl"); - new_lev.save(level_subset.get_level_filename(level_nb + 1)); + Level new_lev; + level_subset->add_level("new_level.stl"); + new_lev.save(level_subset->get_level_filename(level_nb + 1)); load_level(level_nb); } } break; case BT_PREVIOUS_LEVEL: - if(level_nb > 1) + if(level_nb-1 > 0) load_level(level_nb - 1); break; case BT_NEXT_SECTOR: std::cerr << "next sector.\n"; -std::cerr << "total sectors: " << level.get_total_sectors() << std::endl; - load_sector(level.get_next_sector(sector)); +std::cerr << "total sectors: " << level->get_total_sectors() << std::endl; + load_sector(level->get_next_sector(sector)); break; case BT_PREVIOUS_SECTOR: std::cerr << "previous sector.\n"; - load_sector(level.get_previous_sector(sector)); + load_sector(level->get_previous_sector(sector)); break; } level_options->set_unselected(); @@ -542,6 +549,8 @@ if(sector) } } +#define FADING_TIME 600 + void LevelEditor::draw(DrawingContext& context) { context.draw_text(white_text, _("Level Editor"), Vector(10, 5), LEFT_ALLIGN, LAYER_GUI); @@ -552,10 +561,19 @@ context.draw_filled_rect(Vector(0,0), Vector(screen->w,screen->h), Color(60,60,6 if(level_name_timer.check()) { - context.draw_text(gold_text, level.name, Vector(screen->w/2, 30), CENTER_ALLIGN, LAYER_GUI); - char str[128]; - sprintf(str, "%i/%i", level_nb+1, level_subset.get_num_levels()); - context.draw_text(gold_text, str, Vector(screen->w/2, 50), CENTER_ALLIGN, LAYER_GUI); + context.push_transform(); + if(level_name_timer.get_left() < FADING_TIME) + context.set_alpha(level_name_timer.get_left() * 255 / FADING_TIME); + + context.draw_text(gold_text, level->name, Vector(screen->w/2, 30), CENTER_ALLIGN, LAYER_GUI); + if(level_nb != -1) + { + char str[128]; + sprintf(str, "%i/%i", level_nb+1, level_subset->get_num_levels()); + context.draw_text(gold_text, str, Vector(screen->w/2, 50), CENTER_ALLIGN, LAYER_GUI); + } + + context.pop_transform(); } if(sector) context.draw_text(white_small_text, _("F1 for help"), Vector(5, 510), LEFT_ALLIGN, LAYER_GUI-10); @@ -683,38 +701,49 @@ context.do_drawing(); void LevelEditor::load_level_subset(std::string filename) { -std::cerr << "loading subset...\n"; -std::cerr << "filename: " << filename << std::endl; -level_subset.load(filename.c_str()); +delete level_subset; +level_subset = new LevelSubset(); +level_subset->load(filename.c_str()); load_level(1); } void LevelEditor::load_level(std::string filename) { -if(!level_changed) - save_level(); +if(level_changed) + { + if(confirm_dialog(NULL, _("Level not saved. Wanna to?"))) + save_level(); + else + return; + } level_filename = filename; -level.load(filename); + +delete level; +level = new Level(); +level->load(filename); load_sector("main"); level_name_timer.start(3000); scroll.x = scroll.y = 0; level_changed = false; -settings_menu->get_item_by_id(MN_ID_NAME).change_input(level.name.c_str()); -settings_menu->get_item_by_id(MN_ID_AUTHOR).change_input(level.author.c_str()); +settings_menu->get_item_by_id(MN_ID_NAME).change_input(level->name.c_str()); +settings_menu->get_item_by_id(MN_ID_AUTHOR).change_input(level->author.c_str()); } void LevelEditor::load_level(int nb) { -if(!level_changed) - save_level(); +if(level_changed) + { + if(confirm_dialog(NULL, _("Level not saved. Wanna to?"))) + save_level(); + else + return; + } level_nb = nb; -std::cerr << "level_nb: " << level_nb << std::endl; -std::cerr << "level_subset.get_level_filename(level_nb): " << level_subset.get_level_filename(level_nb) << std::endl; -level_filename = level_subset.get_level_filename(level_nb); +level_filename = level_subset->get_level_filename(level_nb); load_level(level_filename); } @@ -722,7 +751,7 @@ load_level(level_filename); void LevelEditor::load_sector(std::string name) { sector_name = name; -sector = level.get_sector(sector_name); +sector = level->get_sector(sector_name); if(!sector) Termination::abort("Level has no " + sector_name + " sector.", ""); @@ -736,7 +765,7 @@ if(sector == NULL) if(confirm_dialog(NULL, _("No more sectors exist. Create another?"))) { Sector* nsector = new Sector(); - level.add_sector(nsector); + level->add_sector(nsector); sector = nsector; } return; @@ -790,7 +819,7 @@ settings_menu->get_item_by_id(MN_ID_HEIGHT).change_input(str); void LevelEditor::save_level() { -level.save(level_filename); +level->save(level_filename); level_changed = false; }