From: <js...@us...> - 2005-03-03 08:01:03
|
Update of /cvsroot/exult/exult In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26734 Modified Files: exult.cc gamerend.cc Log Message: Select chunks Index: exult.cc =================================================================== RCS file: /cvsroot/exult/exult/exult.cc,v retrieving revision 1.472 retrieving revision 1.473 diff -u -d -r1.472 -r1.473 --- exult.cc 27 Jan 2005 03:58:45 -0000 1.472 +++ exult.cc 3 Mar 2005 08:00:41 -0000 1.473 @@ -884,6 +884,37 @@ int chnum = cheat.get_edit_chunknum(); Drop_dragged_chunk(chnum, event.button.x, event.button.y, 0); } + +/* + * Select chunks. + */ + +static void Select_chunks + ( + SDL_Event& event, + bool dragging, // Painting terrain. + bool toggle + ) + { + static int lastcx = -1, lastcy = -1; + int scale = gwin->get_win()->get_scale(); + int x = event.button.x/scale, y = event.button.y/scale; + int cx = (gwin->get_scrolltx() + x/c_tilesize)/c_tiles_per_chunk; + int cy = (gwin->get_scrollty() + y/c_tilesize)/c_tiles_per_chunk; + if (dragging) // See if moving to a new chunk. + { + if (cx == lastcx && cy == lastcy) + return; + } + lastcx = cx; lastcy = cy; + Map_chunk *chunk = gwin->get_map()->get_chunk(cx, cy); + if (toggle) + chunk->set_selected(!chunk->is_selected()); + else + chunk->set_selected(true); + gwin->set_all_dirty(); + } + #endif /* @@ -1033,6 +1064,13 @@ Paint_with_chunk(event, false); break; } + else if (cheat.get_edit_mode() == + Cheat::select_chunks) + { + Select_chunks(event, false, + SDL_GetModState()&KMOD_CTRL); + break; + } // Don't drag if not in 'move' mode. else if (cheat.get_edit_mode() != Cheat::move) break; @@ -1186,6 +1224,13 @@ Paint_with_chunk(event, true); break; } + else if (cheat.get_edit_mode() == + Cheat::select_chunks) + { + Select_chunks(event, true, + SDL_GetModState()&KMOD_CTRL); + break; + } } #endif dragged = gwin->drag(event.motion.x / scale, Index: gamerend.cc =================================================================== RCS file: /cvsroot/exult/exult/gamerend.cc,v retrieving revision 1.68 retrieving revision 1.69 diff -u -d -r1.68 -r1.69 --- gamerend.cc 19 Apr 2004 05:03:52 -0000 1.68 +++ gamerend.cc 3 Mar 2005 08:00:51 -0000 1.69 @@ -133,6 +133,37 @@ x*c_tilesize - liftpixels, -liftpixels, xform); } +/* + * Highlight selected chunks. + */ + +static void Paint_selected_chunks + ( + Game_window *gwin, + Xform_palette& xform, // For transparency. + int start_chunkx, int start_chunky, + int stop_chunkx, int stop_chunky + ) + { + Game_map *map = gwin->get_map(); + Image_window8 *win = gwin->get_win(); + int cx, cy; // Chunk #'s. + // Paint all the flat scenery. + for (cy = start_chunky; cy != stop_chunky; cy = INCR_CHUNK(cy)) + { + int yoff = Figure_screen_offset(cy, gwin->get_scrollty()); + for (cx = start_chunkx; cx != stop_chunkx; cx = INCR_CHUNK(cx)) + { + Map_chunk *chunk = map->get_chunk(cx, cy); + if (!chunk->is_selected()) + continue; + int xoff = Figure_screen_offset( + cx, gwin->get_scrolltx()); + win->fill_translucent8(0, c_chunksize, c_chunksize, + xoff, yoff, xform); + } + } + } /* * Just paint terrain. This is for terrain_editing mode. @@ -276,9 +307,15 @@ obj->paint_outline(HIT_PIXEL); } // Paint tile grid if desired. - if (cheat.in_map_editor() && cheat.show_tile_grid()) - Paint_grid(gwin, sman->get_xform(10)); - + if (cheat.in_map_editor()) + { + if (cheat.show_tile_grid()) + Paint_grid(gwin, sman->get_xform(10)); + if (cheat.get_edit_mode() == Cheat::select_chunks) + Paint_selected_chunks(gwin, sman->get_xform(7), + start_chunkx, start_chunky, stop_chunkx, + stop_chunky); + } return light_sources; } |