From a9ca8583038393205fa868dfea2bd5d224061915 Mon Sep 17 00:00:00 2001 From: OverloadedOrama <35376950+OverloadedOrama@users.noreply.github.com> Date: Mon, 1 Jun 2020 16:42:53 +0300 Subject: [PATCH] Use a new Layer class to handle layer information This replaces the old Global.layers nested array mess, and makes the code easier to read and to understand. --- project.godot | 6 +++++ src/Autoload/Global.gd | 38 +++++++++++++--------------- src/Autoload/OpenSave.gd | 22 ++++++++-------- src/Canvas.gd | 12 ++++----- src/Layer.gd | 18 +++++++++++++ src/Main.gd | 8 +++--- src/SelectionRectangle.gd | 2 +- src/UI/Dialogs/CreateNewImage.gd | 4 +-- src/UI/Dialogs/ExportDialog.gd | 2 +- src/UI/Dialogs/ImportSprites.gd | 2 +- src/UI/Timeline/AnimationTimeline.gd | 34 +++++++++++-------------- src/UI/Timeline/CelButton.gd | 18 ++++++------- src/UI/Timeline/LayerButton.gd | 20 +++++++-------- 13 files changed, 100 insertions(+), 86 deletions(-) create mode 100644 src/Layer.gd diff --git a/project.godot b/project.godot index 90c82a9d5..1a241a6c4 100644 --- a/project.godot +++ b/project.godot @@ -19,6 +19,11 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://src/UI/Rulers/Guides.gd" }, { +"base": "Reference", +"class": "Layer", +"language": "GDScript", +"path": "res://src/Layer.gd" +}, { "base": "Button", "class": "LayerButton", "language": "GDScript", @@ -37,6 +42,7 @@ _global_script_classes=[ { _global_script_class_icons={ "Canvas": "", "Guide": "", +"Layer": "", "LayerButton": "", "Palette": "", "PaletteColor": "" diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd index 7f3b2a341..7ea5794bb 100644 --- a/src/Autoload/Global.gd +++ b/src/Autoload/Global.gd @@ -366,13 +366,11 @@ func _ready() -> void: error_dialog = find_node_by_name(root, "ErrorDialog") - # Store [Layer name (0), Layer visibility boolean (1), Layer lock boolean (2), Frame container (3), - # will new cels be linked boolean (4), Array of linked cels (5)] - layers.append([tr("Layer") + " 0", true, false, HBoxContainer.new(), false, []]) + layers.append(Layer.new()) # Thanks to https://godotengine.org/qa/17524/how-to-find-an-instanced-scene-by-its-name -func find_node_by_name(root, node_name) -> Node: +func find_node_by_name(root : Node, node_name : String) -> Node: if root.get_name() == node_name: return root for child in root.get_children(): @@ -488,7 +486,7 @@ func canvases_changed(value : Array) -> void: frame_id.queue_free() for i in range(layers.size() - 1, -1, -1): - frames_container.add_child(layers[i][3]) + frames_container.add_child(layers[i].frame_container) for j in range(canvases.size()): var label := Label.new() @@ -503,7 +501,7 @@ func canvases_changed(value : Array) -> void: cel_button.layer = i cel_button.get_child(0).texture = Global.canvases[j].layers[i][1] - layers[i][3].add_child(cel_button) + layers[i].frame_container.add_child(cel_button) # This is useful in case tagged frames get deleted DURING the animation is playing # otherwise, this code is useless in this context, since these values are being set @@ -556,27 +554,27 @@ func layers_changed(value : Array) -> void: for i in range(layers.size() - 1, -1, -1): var layer_container = load("res://src/UI/Timeline/LayerButton.tscn").instance() layer_container.i = i - if !layers[i][0]: - layers[i][0] = tr("Layer") + " %s" % i + if !layers[i].name: + layers[i].name = tr("Layer") + " %s" % i layers_container.add_child(layer_container) - layer_container.label.text = layers[i][0] - layer_container.line_edit.text = layers[i][0] + layer_container.label.text = layers[i].name + layer_container.line_edit.text = layers[i].name - frames_container.add_child(layers[i][3]) + frames_container.add_child(layers[i].frame_container) for j in range(canvases.size()): var cel_button = load("res://src/UI/Timeline/CelButton.tscn").instance() cel_button.frame = j cel_button.layer = i cel_button.get_child(0).texture = Global.canvases[j].layers[i][1] - layers[i][3].add_child(cel_button) + layers[i].frame_container.add_child(cel_button) var layer_button = layers_container.get_child(layers_container.get_child_count() - 1 - current_layer) layer_button.pressed = true self.current_frame = current_frame # Call frame_changed to update UI - if layers[current_layer][2]: + if layers[current_layer].locked: disable_button(remove_layer_button, true) if layers.size() == 1: @@ -584,7 +582,7 @@ func layers_changed(value : Array) -> void: disable_button(move_up_layer_button, true) disable_button(move_down_layer_button, true) disable_button(merge_down_layer_button, true) - elif !layers[current_layer][2]: + elif !layers[current_layer].locked: disable_button(remove_layer_button, false) @@ -602,20 +600,20 @@ func frame_changed(value : int) -> void: text_color = Color.black frame_ids.get_child(i).add_color_override("font_color", text_color) for layer in layers: - if i < layer[3].get_child_count(): - layer[3].get_child(i).pressed = false + if i < layer.frame_container.get_child_count(): + layer.frame_container.get_child(i).pressed = false i += 1 # Select the new canvas/frame canvas = canvases[current_frame] canvas.visible = true frame_ids.get_child(current_frame).add_color_override("font_color", control.theme.get_color("Selected Color", "Label")) - if current_frame < layers[current_layer][3].get_child_count(): - layers[current_layer][3].get_child(current_frame).pressed = true + if current_frame < layers[current_layer].frame_container.get_child_count(): + layers[current_layer].frame_container.get_child(current_frame).pressed = true if canvases.size() == 1: disable_button(remove_frame_button, true) - elif !layers[current_layer][2]: + elif !layers[current_layer].locked: disable_button(remove_frame_button, false) Global.transparent_checker._ready() # To update the rect size @@ -646,7 +644,7 @@ func layer_changed(value : int) -> void: disable_button(merge_down_layer_button, true) if current_layer < layers.size(): - if layers[current_layer][2]: + if layers[current_layer].locked: disable_button(remove_layer_button, true) else: if layers.size() > 1: diff --git a/src/Autoload/OpenSave.gd b/src/Autoload/OpenSave.gd index f95a0ab0a..daab39fb4 100644 --- a/src/Autoload/OpenSave.gd +++ b/src/Autoload/OpenSave.gd @@ -60,9 +60,8 @@ func open_pxo_file(path : String, untitled_backup : bool = false) -> void: var layer_new_cels_linked := file.get_8() linked_cels.append(file.get_var()) - # Store [Layer name (0), Layer visibility boolean (1), Layer lock boolean (2), Frame container (3), - # will new cels be linked boolean (4), Array of linked cels (5)] - Global.layers.append([layer_name, layer_visibility, layer_lock, HBoxContainer.new(), layer_new_cels_linked, []]) + var l := Layer.new(layer_name, layer_visibility, layer_lock, HBoxContainer.new(), layer_new_cels_linked, []) + Global.layers.append(l) global_layer_line = file.get_line() var frame_line := file.get_line() @@ -80,9 +79,8 @@ func open_pxo_file(path : String, untitled_backup : bool = false) -> void: if file_major_version == 0 and file_minor_version < 7: var layer_name_old_version = file.get_line() if frame == 0: - # Store [Layer name (0), Layer visibility boolean (1), Layer lock boolean (2), Frame container (3), - # will new frames be linked boolean (4), Array of linked frames (5)] - Global.layers.append([layer_name_old_version, true, false, HBoxContainer.new(), false, []]) + var l := Layer.new(layer_name_old_version) + Global.layers.append(l) var layer_transparency := 1.0 if file_major_version >= 0 and file_minor_version > 5: layer_transparency = file.get_float() @@ -94,7 +92,7 @@ func open_pxo_file(path : String, untitled_backup : bool = false) -> void: canvas.layers.append([image, tex, layer_transparency]) if file_major_version >= 0 and file_minor_version >= 7: if frame in linked_cels[layer_i]: - Global.layers[layer_i][5].append(canvas) + Global.layers[layer_i].linked_cels.append(canvas) layer_i += 1 layer_line = file.get_line() @@ -185,12 +183,12 @@ func save_pxo_file(path : String, autosave : bool) -> void: # Store Global layers for layer in Global.layers: file.store_line(".") - file.store_line(layer[0]) # Layer name - file.store_8(layer[1]) # Layer visibility - file.store_8(layer[2]) # Layer lock - file.store_8(layer[4]) # Future cels linked + file.store_line(layer.name) + file.store_8(layer.visible) + file.store_8(layer.locked) + file.store_8(layer.new_cels_linked) var linked_cels := [] - for canvas in layer[5]: + for canvas in layer.linked_cels: linked_cels.append(canvas.frame) file.store_var(linked_cels) # Linked cels as cel numbers diff --git a/src/Canvas.gd b/src/Canvas.gd index a3bed5640..eaa8c49f2 100644 --- a/src/Canvas.gd +++ b/src/Canvas.gd @@ -53,7 +53,7 @@ func _ready() -> void: # Store [Image, ImageTexture, Opacity] layers.append([sprite, tex, 1]) - if self in l[5]: + if self in l.linked_cels: # If the linked button is pressed, set as the Image & ImageTexture # to be the same as the first linked cel layers[layer_i][0] = l[5][0].layers[layer_i][0] @@ -80,7 +80,7 @@ func _draw() -> void: # Draw current frame layers for i in range(layers.size()): var modulate_color := Color(1, 1, 1, layers[i][2]) - if Global.layers[i][1]: # if it's visible + if Global.layers[i].visible: # if it's visible draw_texture(layers[i][1], location, modulate_color) if Global.tile_mode: @@ -143,7 +143,7 @@ func _input(event : InputEvent) -> void: can_undo = true current_pixel = get_local_mouse_position() + location - if Global.current_frame != frame || Global.layers[Global.current_layer][2]: + if Global.current_frame != frame || Global.layers[Global.current_layer].locked: previous_mouse_pos = current_pixel previous_mouse_pos.x = clamp(previous_mouse_pos.x, location.x, location.x + size.x) previous_mouse_pos.y = clamp(previous_mouse_pos.y, location.y, location.y + size.y) @@ -482,7 +482,7 @@ func update_texture(layer_index : int) -> void: layers[layer_index][1].create_from_image(layers[layer_index][0], 0) var frame_texture_rect : TextureRect - frame_texture_rect = Global.find_node_by_name(Global.layers[layer_index][3].get_child(frame), "CelTexture") + frame_texture_rect = Global.find_node_by_name(Global.layers[layer_index].frame_container.get_child(frame), "CelTexture") frame_texture_rect.texture = layers[layer_index][1] @@ -498,7 +498,7 @@ func onion_skinning() -> void: if Global.current_frame >= i: var layer_i := 0 for layer in Global.canvases[Global.current_frame - i].layers: - if Global.layers[layer_i][1]: # If it's visible + if Global.layers[layer_i].visible: color.a = 0.6 / i draw_texture(layer[1], location, color) layer_i += 1 @@ -514,7 +514,7 @@ func onion_skinning() -> void: if Global.current_frame < Global.canvases.size() - i: var layer_i := 0 for layer in Global.canvases[Global.current_frame + i].layers: - if Global.layers[layer_i][1]: # If it's visible + if Global.layers[layer_i].visible: color.a = 0.6 / i draw_texture(layer[1], location, color) layer_i += 1 diff --git a/src/Layer.gd b/src/Layer.gd new file mode 100644 index 000000000..b6af188af --- /dev/null +++ b/src/Layer.gd @@ -0,0 +1,18 @@ +class_name Layer +extends Reference + + +var name := "" +var visible := true +var locked := false +var frame_container : HBoxContainer +var new_cels_linked := false +var linked_cels := [] + +func _init(_name := tr("Layer") + " 0", _visible := true, _locked := false, _frame_container := HBoxContainer.new(), _new_cels_linked := false, _linked_cels := []) -> void: + self.name = _name + self.visible = _visible + self.locked = _locked + self.frame_container = _frame_container + self.new_cels_linked = _new_cels_linked + self.linked_cels = _linked_cels diff --git a/src/Main.gd b/src/Main.gd index 1249dd0fd..0b4a42098 100644 --- a/src/Main.gd +++ b/src/Main.gd @@ -21,9 +21,9 @@ func _ready() -> void: Global.window_title = "(" + tr("untitled") + ") - Pixelorama " + Global.current_version - Global.layers[0][0] = tr("Layer") + " 0" - Global.layers_container.get_child(0).label.text = Global.layers[0][0] - Global.layers_container.get_child(0).line_edit.text = Global.layers[0][0] + Global.layers[0].name = tr("Layer") + " 0" + Global.layers_container.get_child(0).label.text = Global.layers[0].name + Global.layers_container.get_child(0).line_edit.text = Global.layers[0].name Import.import_brushes(Global.directory_module.get_brushes_search_path_in_order()) Import.import_patterns(Global.directory_module.get_patterns_search_path_in_order()) @@ -500,7 +500,7 @@ func show_hsv_configuration_popup() -> void: func image_menu_id_pressed(id : int) -> void: - if Global.layers[Global.current_layer][2]: # No changes if the layer is locked + if Global.layers[Global.current_layer].locked: # No changes if the layer is locked return match id: 0: # Scale Image diff --git a/src/SelectionRectangle.gd b/src/SelectionRectangle.gd index 7af5f81cd..5a4f898c7 100644 --- a/src/SelectionRectangle.gd +++ b/src/SelectionRectangle.gd @@ -20,7 +20,7 @@ func _ready() -> void: func _process(_delta : float) -> void: - if Global.layers[Global.current_layer][2]: + if Global.layers[Global.current_layer].locked: return var mouse_pos: Vector2 = get_local_mouse_position() - Global.canvas.location var mouse_pos_floored := mouse_pos.floor() diff --git a/src/UI/Dialogs/CreateNewImage.gd b/src/UI/Dialogs/CreateNewImage.gd index 3975ffca6..2612a9e3e 100644 --- a/src/UI/Dialogs/CreateNewImage.gd +++ b/src/UI/Dialogs/CreateNewImage.gd @@ -75,9 +75,7 @@ func _on_CreateNewImage_confirmed() -> void: var fill_color : Color = fill_color_node.color Global.clear_canvases() Global.layers.clear() - # Store [Layer name (0), Layer visibility boolean (1), Layer lock boolean (2), Frame container (3), - # will new frames be linked boolean (4), Array of linked frames (5)] - Global.layers.append([tr("Layer") + " 0", true, false, HBoxContainer.new(), false, []]) + Global.layers.append(Layer.new()) Global.canvas = load("res://src/Canvas.tscn").instance() Global.canvas.size = Vector2(width, height).floor() diff --git a/src/UI/Dialogs/ExportDialog.gd b/src/UI/Dialogs/ExportDialog.gd index fc36187af..d7d305770 100644 --- a/src/UI/Dialogs/ExportDialog.gd +++ b/src/UI/Dialogs/ExportDialog.gd @@ -365,7 +365,7 @@ func blend_layers(image: Image, canvas: Canvas, origin: Vector2 = Vector2(0, 0)) image.lock() var layer_i := 0 for layer in canvas.layers: - if Global.layers[layer_i][1]: + if Global.layers[layer_i].visible: var layer_image := Image.new() layer_image.copy_from(layer[0]) layer_image.lock() diff --git a/src/UI/Dialogs/ImportSprites.gd b/src/UI/Dialogs/ImportSprites.gd index 15b4fb112..4f8285c00 100644 --- a/src/UI/Dialogs/ImportSprites.gd +++ b/src/UI/Dialogs/ImportSprites.gd @@ -41,7 +41,7 @@ func _on_ImportSprites_files_selected(paths : PoolStringArray) -> void: Global.layers.clear() # Store [Layer name (0), Layer visibility boolean (1), Layer lock boolean (2), Frame container (3), # will new frames be linked boolean (4), Array of linked frames (5)] - Global.layers.append([tr("Layer") + " 0", true, false, HBoxContainer.new(), false, []]) + Global.layers.append(Layer.new()) Global.current_layer = 0 var first_path : String = paths[0] diff --git a/src/UI/Timeline/AnimationTimeline.gd b/src/UI/Timeline/AnimationTimeline.gd index 89a52b70b..88b05e649 100644 --- a/src/UI/Timeline/AnimationTimeline.gd +++ b/src/UI/Timeline/AnimationTimeline.gd @@ -4,7 +4,7 @@ var fps := 6.0 var animation_loop := 1 # 0 is no loop, 1 is cycle loop, 2 is ping-pong loop var animation_forward := true var first_frame := 0 -var last_frame := Global.canvases.size() - 1 +var last_frame : int = Global.canvases.size() - 1 var timeline_scroll : ScrollContainer var tag_scroll_container : ScrollContainer @@ -28,7 +28,7 @@ func add_frame() -> void: new_canvas.size = Global.canvas.size new_canvas.frame = Global.canvases.size() - var new_canvases: Array = Global.canvases.duplicate() + var new_canvases : Array = Global.canvases.duplicate() new_canvases.append(new_canvas) Global.undos += 1 @@ -45,8 +45,8 @@ func add_frame() -> void: Global.undo_redo.add_undo_property(c, "visible", c.visible) for l_i in range(Global.layers.size()): - if Global.layers[l_i][4]: # If the link button is pressed - Global.layers[l_i][5].append(new_canvas) + if Global.layers[l_i].new_cels_linked: # If the link button is pressed + Global.layers[l_i].linked_cels.append(new_canvas) Global.undo_redo.add_undo_property(Global, "canvases", Global.canvases) Global.undo_redo.add_undo_property(Global, "canvas", Global.canvas) @@ -61,7 +61,7 @@ func _on_DeleteFrame_pressed(frame := -1) -> void: frame = Global.current_frame var canvas : Canvas = Global.canvases[frame] - var new_canvases := Global.canvases.duplicate() + var new_canvases : Array = Global.canvases.duplicate() new_canvases.erase(canvas) var current_frame := Global.current_frame if current_frame > 0 && current_frame == new_canvases.size(): # If it's the last frame @@ -82,11 +82,11 @@ func _on_DeleteFrame_pressed(frame := -1) -> void: # Check if one of the cels of the frame is linked # if they are, unlink them too # this prevents removed cels being kept in linked memory - var new_layers := Global.layers.duplicate(true) + var new_layers : Array = Global.layers.duplicate(true) for layer in new_layers: - for linked in layer[5]: + for linked in layer.linked_cels: if linked == Global.canvases[frame]: - layer[5].erase(linked) + layer.linked_cels.erase(linked) Global.undos += 1 Global.undo_redo.create_action("Remove Frame") @@ -152,7 +152,7 @@ func _on_CopyFrame_pressed(frame := -1) -> void: Global.undo_redo.add_do_property(Global, "current_frame", frame + 1) Global.undo_redo.add_do_property(Global, "animation_tags", new_animation_tags) for i in range(Global.layers.size()): - for child in Global.layers[i][3].get_children(): + for child in Global.layers[i].frame_container.get_children(): Global.undo_redo.add_do_property(child, "pressed", false) Global.undo_redo.add_undo_property(child, "pressed", child.pressed) for c in Global.canvases: @@ -336,15 +336,11 @@ func _on_BlueRedMode_toggled(button_pressed : bool) -> void: # Layer buttons func add_layer(is_new := true) -> void: - var layer_name = null - if !is_new: # Clone layer - layer_name = Global.layers[Global.current_layer][0] + " (" + tr("copy") + ")" - var new_layers : Array = Global.layers.duplicate() - - # Store [Layer name (0), Layer visibility boolean (1), Layer lock boolean (2), Frame container (3), - # will new frames be linked boolean (4), Array of linked frames (5)] - new_layers.append([layer_name, true, false, HBoxContainer.new(), false, []]) + var l := Layer.new() + if !is_new: # Clone layer + l.name = Global.layers[Global.current_layer].name + " (" + tr("copy") + ")" + new_layers.append(l) Global.undos += 1 Global.undo_redo.create_action("Add Layer") @@ -449,8 +445,8 @@ func _on_MergeDownLayer_pressed() -> void: new_layer.lock() DrawingAlgos.blend_rect(new_layer, selected_layer, Rect2(c.position, c.size), Vector2.ZERO) new_layers_canvas.remove(Global.current_layer) - if !selected_layer.is_invisible() and Global.layers[Global.current_layer - 1][5].size() > 1 and (c in Global.layers[Global.current_layer - 1][5]): - new_layers[Global.current_layer - 1][5].erase(c) + if !selected_layer.is_invisible() and Global.layers[Global.current_layer - 1].linked_cels.size() > 1 and (c in Global.layers[Global.current_layer - 1].linked_cels): + new_layers[Global.current_layer - 1].linked_cels.erase(c) var tex := ImageTexture.new() tex.create_from_image(new_layer, 0) new_layers_canvas[Global.current_layer - 1][0] = new_layer diff --git a/src/UI/Timeline/CelButton.gd b/src/UI/Timeline/CelButton.gd index 2755c67e9..22c5c65b7 100644 --- a/src/UI/Timeline/CelButton.gd +++ b/src/UI/Timeline/CelButton.gd @@ -8,7 +8,7 @@ onready var popup_menu : PopupMenu = $PopupMenu func _ready() -> void: hint_tooltip = "Frame: %s, Layer: %s" % [frame + 1, layer] - if Global.canvases[frame] in Global.layers[layer][5]: + if Global.canvases[frame] in Global.layers[layer].linked_cels: get_node("LinkedIndicator").visible = true popup_menu.set_item_text(4, "Unlink Cel") popup_menu.set_item_metadata(4, "Unlink Cel") @@ -53,13 +53,13 @@ func _on_PopupMenu_id_pressed(ID : int) -> void: 3: # Move Right change_frame_order(1) 4: # Unlink Cel - var cel_index : int = Global.layers[layer][5].find(Global.canvases[frame]) + var cel_index : int = Global.layers[layer].linked_cels.find(Global.canvases[frame]) var c = Global.canvases[frame] - var new_layers := Global.layers.duplicate(true) + var new_layers : Array = Global.layers.duplicate(true) var new_canvas_layers : Array = c.layers.duplicate(true) if popup_menu.get_item_metadata(4) == "Unlink Cel": - new_layers[layer][5].remove(cel_index) + new_layers[layer].linked_cels.remove(cel_index) var sprite := Image.new() sprite.copy_from(Global.canvases[frame].layers[layer][0]) sprite.lock() @@ -78,14 +78,14 @@ func _on_PopupMenu_id_pressed(ID : int) -> void: Global.undo_redo.add_do_method(Global, "redo", [Global.canvases[frame]], layer) Global.undo_redo.commit_action() elif popup_menu.get_item_metadata(4) == "Link Cel": - new_layers[layer][5].append(Global.canvases[frame]) + new_layers[layer].linked_cels.append(Global.canvases[frame]) Global.undo_redo.create_action("Link Cel") Global.undo_redo.add_do_property(Global, "layers", new_layers) - if new_layers[layer][5].size() > 1: + if new_layers[layer].linked_cels.size() > 1: # If there are already linked cels, set the current cel's image # to the first linked cel's image - new_canvas_layers[layer][0] = new_layers[layer][5][0].layers[layer][0] - new_canvas_layers[layer][1] = new_layers[layer][5][0].layers[layer][1] + new_canvas_layers[layer][0] = new_layers[layer].linked_cels[0].layers[layer][0] + new_canvas_layers[layer][1] = new_layers[layer].linked_cels[0].layers[layer][1] Global.undo_redo.add_do_property(c, "layers", new_canvas_layers) Global.undo_redo.add_undo_property(c, "layers", c.layers) @@ -97,7 +97,7 @@ func _on_PopupMenu_id_pressed(ID : int) -> void: func change_frame_order(rate : int) -> void: var change = frame + rate - var new_canvases := Global.canvases.duplicate() + var new_canvases : Array = Global.canvases.duplicate() var temp = new_canvases[frame] new_canvases[frame] = new_canvases[change] new_canvases[change] = temp diff --git a/src/UI/Timeline/LayerButton.gd b/src/UI/Timeline/LayerButton.gd index 8e65b5d1d..16d2bf96a 100644 --- a/src/UI/Timeline/LayerButton.gd +++ b/src/UI/Timeline/LayerButton.gd @@ -16,7 +16,7 @@ func _ready() -> void: label = Global.find_node_by_name(self, "Label") line_edit = Global.find_node_by_name(self, "LineEdit") - if Global.layers[i][1]: + if Global.layers[i].visible: Global.change_button_texturerect(visibility_button.get_child(0), "layer_visible.png") visibility_button.get_child(0).rect_size = Vector2(24, 14) visibility_button.get_child(0).rect_position = Vector2(4, 9) @@ -25,12 +25,12 @@ func _ready() -> void: visibility_button.get_child(0).rect_size = Vector2(24, 8) visibility_button.get_child(0).rect_position = Vector2(4, 12) - if Global.layers[i][2]: + if Global.layers[i].locked: Global.change_button_texturerect(lock_button.get_child(0), "lock.png") else: Global.change_button_texturerect(lock_button.get_child(0), "unlock.png") - if Global.layers[i][4]: # If new layers will be linked + if Global.layers[i].new_cels_linked: # If new layers will be linked Global.change_button_texturerect(linked_button.get_child(0), "linked_layer.png") else: Global.change_button_texturerect(linked_button.get_child(0), "unlinked_layer.png") @@ -59,20 +59,20 @@ func save_layer_name(new_name : String) -> void: line_edit.editable = false label.text = new_name Global.layers_changed_skip = true - Global.layers[i][0] = new_name + Global.layers[i].name = new_name func _on_VisibilityButton_pressed() -> void: - Global.layers[i][1] = !Global.layers[i][1] + Global.layers[i].visible = !Global.layers[i].visible Global.canvas.update() func _on_LockButton_pressed() -> void: - Global.layers[i][2] = !Global.layers[i][2] + Global.layers[i].locked = !Global.layers[i].locked func _on_LinkButton_pressed() -> void: - Global.layers[i][4] = !Global.layers[i][4] - if Global.layers[i][4] && !Global.layers[i][5]: - Global.layers[i][5].append(Global.canvas) - Global.layers[i][3].get_child(Global.current_frame)._ready() + Global.layers[i].new_cels_linked = !Global.layers[i].new_cels_linked + if Global.layers[i].new_cels_linked && !Global.layers[i].linked_cels: + Global.layers[i].linked_cels.append(Global.canvas) + Global.layers[i].frame_container.get_child(Global.current_frame)._ready()