From 09d226505617bf0f1747bb775ff66e91359166d0 Mon Sep 17 00:00:00 2001 From: OverloadedOrama <35376950+OverloadedOrama@users.noreply.github.com> Date: Tue, 21 Apr 2020 21:34:45 +0300 Subject: [PATCH] Made Unlink Cel work with UndoRedo --- Scripts/Canvas.gd | 2 ++ Scripts/FrameButton.gd | 21 ++++++++++++++++----- Scripts/Global.gd | 4 ++-- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/Scripts/Canvas.gd b/Scripts/Canvas.gd index 686bb2a08..caea3965b 100644 --- a/Scripts/Canvas.gd +++ b/Scripts/Canvas.gd @@ -54,6 +54,8 @@ func _ready() -> void: layers.append([sprite, tex, 1]) if self in l[5]: + # If the linked button is pressed, set as the Image & ImageTexture + # to be the same as the first linked cel var current_layer := layers.size() - 1 layers[current_layer][0] = l[5][0].layers[current_layer][0] layers[current_layer][1] = l[5][0].layers[current_layer][1] diff --git a/Scripts/FrameButton.gd b/Scripts/FrameButton.gd index 08a17d852..0ca971c35 100644 --- a/Scripts/FrameButton.gd +++ b/Scripts/FrameButton.gd @@ -52,17 +52,28 @@ func _on_PopupMenu_id_pressed(ID : int) -> void: change_frame_order(1) 4: # Unlink Cel var cel_index : int = Global.layers[layer][5].find(Global.canvases[frame]) - Global.layers[layer][5].remove(cel_index) - _ready() + var c = Global.canvases[frame] + var new_layers := Global.layers.duplicate(true) + var new_canvas_layers : Array = c.layers.duplicate(true) + new_layers[layer][5].remove(cel_index) var sprite := Image.new() sprite.copy_from(Global.canvases[frame].layers[layer][0]) sprite.lock() - Global.canvases[frame].layers[layer][0] = sprite var tex := ImageTexture.new() tex.create_from_image(sprite, 0) - Global.canvases[frame].layers[layer][1] = tex - Global.canvases[frame].update() + new_canvas_layers[layer][0] = sprite + new_canvas_layers[layer][1] = tex + + Global.undo_redo.create_action("Unlink Cel") + Global.undo_redo.add_do_property(Global, "layers", new_layers) + Global.undo_redo.add_do_property(c, "layers", new_canvas_layers) + Global.undo_redo.add_undo_property(Global, "layers", Global.layers) + Global.undo_redo.add_undo_property(c, "layers", c.layers) + + Global.undo_redo.add_undo_method(Global, "undo", [Global.canvases[frame]], layer) + Global.undo_redo.add_do_method(Global, "redo", [Global.canvases[frame]], layer) + Global.undo_redo.commit_action() func change_frame_order(rate : int) -> void: diff --git a/Scripts/Global.gd b/Scripts/Global.gd index 6e85ad907..2705134a5 100644 --- a/Scripts/Global.gd +++ b/Scripts/Global.gd @@ -460,7 +460,7 @@ func general_redo() -> void: func undo(_canvases : Array, layer_index : int = -1) -> void: general_undo() var action_name := undo_redo.get_current_action_name() - if action_name == "Draw" || action_name == "Rectangle Select" || action_name == "Scale" || action_name == "Merge Layer": + if action_name == "Draw" or action_name == "Rectangle Select" or action_name == "Scale" or action_name == "Merge Layer" or action_name == "Unlink Cel": for c in _canvases: if layer_index > -1: c.update_texture(layer_index) @@ -493,7 +493,7 @@ func undo(_canvases : Array, layer_index : int = -1) -> void: func redo(_canvases : Array, layer_index : int = -1) -> void: general_redo() var action_name := undo_redo.get_current_action_name() - if action_name == "Draw" || action_name == "Rectangle Select" || action_name == "Scale" || action_name == "Merge Layer": + if action_name == "Draw" or action_name == "Rectangle Select" or action_name == "Scale" or action_name == "Merge Layer" or action_name == "Unlink Cel": for c in _canvases: if layer_index > -1: c.update_texture(layer_index)