Skip to content

Commit

Permalink
Add level resizing to undo/redo system
Browse files Browse the repository at this point in the history
  • Loading branch information
AllyTally authored and NyakoFox committed Aug 27, 2024
1 parent 27787fd commit 3a20ee2
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 17 deletions.
56 changes: 40 additions & 16 deletions desktop_version/src/Editor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3388,6 +3388,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)
Expand Down Expand Up @@ -3553,6 +3561,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++;
Expand All @@ -3562,23 +3572,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;

ed.levx = POS_MOD(ed.levx, cl.mapwidth);
ed.levy = POS_MOD(ed.levy, cl.mapheight);

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
);
if (old_width != cl.mapwidth || old_height != cl.mapheight)
{

ed.show_note(buffer);
ed.updatetiles = true;
ed.changeroom = true;
graphics.backgrounddrawn = false;
graphics.foregrounddrawn = false;

ed.levx = POS_MOD(ed.levx, cl.mapwidth);
ed.levy = POS_MOD(ed.levy, cl.mapheight);

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
{
Expand Down
4 changes: 3 additions & 1 deletion desktop_version/src/Editor.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -155,7 +156,8 @@ struct EditorUndoInfo
int entity_id;
CustomEntity entity;
RoomProperty room_data;

int level_width;
int level_height;
};

class editorclass
Expand Down

0 comments on commit 3a20ee2

Please sign in to comment.