From 992ac643945e846fa07ba5da813cbe1b9ed209fd Mon Sep 17 00:00:00 2001 From: AllyTally Date: Wed, 20 Dec 2023 20:29:51 -0400 Subject: [PATCH] Add level resizing to undo/redo system --- desktop_version/src/Editor.cpp | 52 +++++++++++++++++++++++++--------- desktop_version/src/Editor.h | 4 ++- 2 files changed, 41 insertions(+), 15 deletions(-) diff --git a/desktop_version/src/Editor.cpp b/desktop_version/src/Editor.cpp index 174152c0..a4162e04 100644 --- a/desktop_version/src/Editor.cpp +++ b/desktop_version/src/Editor.cpp @@ -3371,6 +3371,14 @@ void process_editor_buffer(const bool undo) graphics.foregrounddrawn = false; ed.updatetiles = true; break; + case EditorUndoType_LEVEL_SIZE: + // Restore the level size + new_info.level_width = cl.mapwidth; + new_info.level_height = cl.mapheight; + + cl.mapwidth = info.level_width; + cl.mapheight = info.level_height; + break; } if (undo) @@ -3536,6 +3544,8 @@ void editorinput(void) } else if (shift_down) { + int old_width = cl.mapwidth; + int old_height = cl.mapheight; if (up_pressed) cl.mapheight--; if (down_pressed) cl.mapheight++; @@ -3545,23 +3555,37 @@ void editorinput(void) cl.mapwidth = SDL_clamp(cl.mapwidth, 1, cl.maxwidth); cl.mapheight = SDL_clamp(cl.mapheight, 1, cl.maxheight); - ed.updatetiles = true; - ed.changeroom = true; - graphics.backgrounddrawn = false; - graphics.foregrounddrawn = false; + if (old_width != cl.mapwidth || old_height != cl.mapheight) + { - ed.levx = POS_MOD(ed.levx, cl.mapwidth); - ed.levy = POS_MOD(ed.levy, cl.mapheight); + ed.updatetiles = true; + ed.changeroom = true; + graphics.backgrounddrawn = false; + graphics.foregrounddrawn = false; - char buffer[3 * SCREEN_WIDTH_CHARS + 1]; - vformat_buf( - buffer, sizeof(buffer), - loc::gettext("Mapsize is now [{width},{height}]"), - "width:int, height:int", - cl.mapwidth, cl.mapheight - ); + ed.levx = POS_MOD(ed.levx, cl.mapwidth); + ed.levy = POS_MOD(ed.levy, cl.mapheight); - ed.show_note(buffer); + char buffer[3 * SCREEN_WIDTH_CHARS + 1]; + vformat_buf( + buffer, sizeof(buffer), + loc::gettext("Mapsize is now [{width},{height}]"), + "width:int, height:int", + cl.mapwidth, cl.mapheight + ); + + ed.show_note(buffer); + + EditorUndoInfo info; + info.type = EditorUndoType_LEVEL_SIZE; + info.level_width = old_width; + info.level_height = old_height; + info.room_x = ed.levx; + info.room_y = ed.levy; + + ed.undo_buffer.push_back(info); + ed.redo_buffer.clear(); + } } else { diff --git a/desktop_version/src/Editor.h b/desktop_version/src/Editor.h index a1875bc0..28f78f44 100644 --- a/desktop_version/src/Editor.h +++ b/desktop_version/src/Editor.h @@ -142,6 +142,7 @@ enum EditorUndoTypes EditorUndoType_ENTITY_ADDED, // Entity added EditorUndoType_ENTITY_REMOVED, // Entity removed EditorUndoType_ENTITY_MODIFIED, // Entity properties modified + EditorUndoType_LEVEL_SIZE // Level size modified }; struct EditorUndoInfo @@ -155,7 +156,8 @@ struct EditorUndoInfo int entity_id; CustomEntity entity; RoomProperty room_data; - + int level_width; + int level_height; }; class editorclass