From a2893e1c1cd4cbd5cc3f14234c4633d40c2922cd Mon Sep 17 00:00:00 2001 From: OverloadedOrama <35376950+OverloadedOrama@users.noreply.github.com> Date: Sun, 19 Jan 2020 20:03:32 +0200 Subject: [PATCH] Store layer visibility on Global.layers instead This way, toggling visibility in a layers works for all frames in that layer. --- Prefabs/AnimationTimeline.tscn | 1 + Scripts/AnimationTimeline.gd | 14 +++++++------- Scripts/Dialogs/ImportSprites.gd | 4 ++-- Scripts/FrameButton.gd | 4 ++-- Scripts/Global.gd | 18 +++++++++--------- Scripts/LayerContainer.gd | 8 ++++---- Scripts/Main.gd | 4 +++- 7 files changed, 28 insertions(+), 25 deletions(-) diff --git a/Prefabs/AnimationTimeline.tscn b/Prefabs/AnimationTimeline.tscn index 44724c746..e401a853d 100644 --- a/Prefabs/AnimationTimeline.tscn +++ b/Prefabs/AnimationTimeline.tscn @@ -188,6 +188,7 @@ margin_bottom = 32.0 [node name="Line2D" type="Line2D" parent="AnimationContainer/TimelineContainer/LayerButtons/AnimationTags"] points = PoolVector2Array( 0, 32, 0, 0, 110, 0, 110, 32 ) width = 1.0 +texture_mode = 1313163520 [node name="Label" type="Label" parent="AnimationContainer/TimelineContainer/LayerButtons/AnimationTags"] margin_right = 110.0 diff --git a/Scripts/AnimationTimeline.gd b/Scripts/AnimationTimeline.gd index eaa8a3be4..56131079a 100644 --- a/Scripts/AnimationTimeline.gd +++ b/Scripts/AnimationTimeline.gd @@ -24,7 +24,7 @@ func add_frame() -> void: Global.undo_redo.add_do_property(Global, "canvas", new_canvas) Global.undo_redo.add_do_property(Global, "current_frame", new_canvases.size() - 1) for i in range(Global.layers.size()): - for child in Global.layers[i][1].get_children(): + for child in Global.layers[i][2].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: @@ -149,15 +149,15 @@ func add_layer(is_new := true) -> void: new_layer.create(Global.canvas.size.x, Global.canvas.size.y, false, Image.FORMAT_RGBA8) else: # clone layer new_layer.copy_from(Global.canvas.layers[Global.current_layer][0]) - layer_name = Global.canvas.layers[Global.current_layer][2] + " (" + tr("copy") + ")" + layer_name = Global.layers[Global.current_layer][1] + " (" + tr("copy") + ")" new_layer.lock() var new_layer_tex := ImageTexture.new() new_layer_tex.create_from_image(new_layer, 0) var new_layers : Array = Global.layers.duplicate() - # Store [layer name, frame container] - new_layers.append([layer_name, HBoxContainer.new()]) + # Store [Layer name, Layer visibility boolean, Frame container] + new_layers.append([layer_name, true, HBoxContainer.new()]) Global.undos += 1 Global.undo_redo.create_action("Add Layer") @@ -166,8 +166,8 @@ func add_layer(is_new := true) -> void: for c in Global.canvases: var new_canvas_layers : Array = c.layers.duplicate() - # Store [Image, ImageTexture, Visibity boolean, Opacity] - new_canvas_layers.append([new_layer, new_layer_tex, true, 1]) + # Store [Image, ImageTexture, Opacity] + new_canvas_layers.append([new_layer, new_layer_tex, 1]) Global.undo_redo.add_do_property(c, "layers", new_canvas_layers) Global.undo_redo.add_undo_property(c, "layers", c.layers) @@ -236,7 +236,7 @@ func _on_MergeDownLayer_pressed() -> void: Global.undo_redo.commit_action() func _on_OpacitySlider_value_changed(value) -> void: - Global.canvas.layers[Global.current_layer][3] = value / 100 + Global.canvas.layers[Global.current_layer][2] = value / 100 Global.layer_opacity_slider.value = value Global.layer_opacity_spinbox.value = value Global.canvas.update() diff --git a/Scripts/Dialogs/ImportSprites.gd b/Scripts/Dialogs/ImportSprites.gd index 62cdeab5e..c0f2e4822 100644 --- a/Scripts/Dialogs/ImportSprites.gd +++ b/Scripts/Dialogs/ImportSprites.gd @@ -55,8 +55,8 @@ func _on_ImportSprites_files_selected(paths : PoolStringArray) -> void: image.lock() var tex := ImageTexture.new() tex.create_from_image(image, 0) - # Store [Image, ImageTexture, Layer Name, Visibity boolean, Opacity] - canvas.layers.append([image, tex, "Layer 0", true, 1]) + # Store [Image, ImageTexture, Opacity] + canvas.layers.append([image, tex, 1]) canvas.frame = i Global.canvases.append(canvas) Global.canvas_parent.add_child(canvas) diff --git a/Scripts/FrameButton.gd b/Scripts/FrameButton.gd index c2a5c0293..2e344bee7 100644 --- a/Scripts/FrameButton.gd +++ b/Scripts/FrameButton.gd @@ -44,13 +44,13 @@ func _on_PopupMenu_id_pressed(ID : int) -> void: var new_hidden_canvases := Global.hidden_canvases.duplicate() new_hidden_canvases.append(new_canvas) - for layer in canvas.layers: #Copy every layer + for layer in canvas.layers: # Copy every layer var sprite := Image.new() sprite.copy_from(layer[0]) sprite.lock() var tex := ImageTexture.new() tex.create_from_image(sprite, 0) - new_canvas.layers.append([sprite, tex, layer[2], layer[3], layer[4]]) + new_canvas.layers.append([sprite, tex, layer[2]]) Global.undos += 1 Global.undo_redo.create_action("Add Frame") diff --git a/Scripts/Global.gd b/Scripts/Global.gd index 00d967e9a..a52a6af72 100644 --- a/Scripts/Global.gd +++ b/Scripts/Global.gd @@ -373,9 +373,9 @@ func _ready() -> void: error_dialog = find_node_by_name(root, "ErrorDialog") - # Store [layer name, frame container] - layers.append([tr("Layer") + " 0", HBoxContainer.new()]) - frames_container.add_child(layers[0][1]) + # Store [Layer name, Layer visibility boolean, Frame container] + layers.append([tr("Layer") + " 0", true, HBoxContainer.new()]) + frames_container.add_child(layers[0][2]) # 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: @@ -457,22 +457,22 @@ func redo(_canvases : Array, layer_index : int = -1) -> void: c.camera_zoom() if action_name == "Add Layer": var layer_container = load("res://Prefabs/LayerContainer.tscn").instance() - _canvases[0].layers[current_layer][2] = tr("Layer") + " %s" % current_layer + layers[current_layer][0] = tr("Layer") + " %s" % current_layer layer_container.i = current_layer - layer_container.get_child(0).get_child(1).text = _canvases[0].layers[current_layer][2] - layer_container.get_child(0).get_child(2).text = _canvases[0].layers[current_layer][2] + layer_container.get_child(0).get_child(1).text = layers[current_layer][0] + layer_container.get_child(0).get_child(2).text = layers[current_layer][0] layers_container.add_child(layer_container) layers_container.move_child(layer_container, 1) - frames_container.add_child(layers[current_layer][1]) - frames_container.move_child(layers[current_layer][1], 1) + frames_container.add_child(layers[current_layer][2]) + frames_container.move_child(layers[current_layer][2], 1) for i in range(canvases.size()): var frame_button = load("res://Prefabs/FrameButton.tscn").instance() frame_button.frame = i frame_button.layer = current_layer frame_button.pressed = true - layers[current_layer][1].add_child(frame_button) + layers[current_layer][2].add_child(frame_button) # if action_name == "Change Layer Order": diff --git a/Scripts/LayerContainer.gd b/Scripts/LayerContainer.gd index 8a2b4eef2..79c77bb3d 100644 --- a/Scripts/LayerContainer.gd +++ b/Scripts/LayerContainer.gd @@ -11,7 +11,7 @@ onready var line_edit := $HBoxContainer/LineEdit func _ready() -> void: #changed_selection() - if Global.canvas.layers[i][3]: + if Global.layers[i][1]: visibility_button.texture_normal = load("res://Assets/Graphics/%s Themes/Layers/Layer_Visible.png" % Global.theme_type) visibility_button.texture_hover = load("res://Assets/Graphics/%s Themes/Layers/Layer_Visible_Hover.png" % Global.theme_type) else: @@ -76,12 +76,12 @@ func changed_selection() -> void: child.pressed = false func _on_VisibilityButton_pressed() -> void: - if Global.canvas.layers[i][3]: - Global.canvas.layers[i][3] = false + if Global.layers[i][1]: + Global.layers[i][1] = false visibility_button.texture_normal = load("res://Assets/Graphics/%s Themes/Layers/Layer_Invisible.png" % Global.theme_type) visibility_button.texture_hover = load("res://Assets/Graphics/%s Themes/Layers/Layer_Invisible_Hover.png" % Global.theme_type) else: - Global.canvas.layers[i][3] = true + Global.layers[i][1] = true visibility_button.texture_normal = load("res://Assets/Graphics/%s Themes/Layers/Layer_Visible.png" % Global.theme_type) visibility_button.texture_hover = load("res://Assets/Graphics/%s Themes/Layers/Layer_Visible_Hover.png" % Global.theme_type) Global.canvas.update() diff --git a/Scripts/Main.gd b/Scripts/Main.gd index 4a61baf0d..f76fc7a1a 100644 --- a/Scripts/Main.gd +++ b/Scripts/Main.gd @@ -163,7 +163,9 @@ func _ready() -> void: Global.window_title = "(" + tr("untitled") + ") - Pixelorama" - Global.canvas.layers[0][2] = tr("Layer") + " 0" + Global.layers[0][0] = tr("Layer") + " 0" + Global.layers_container.get_child(1).label.text = Global.layers[0][0] + Global.layers_container.get_child(1).line_edit.text = Global.layers[0][0] Global.canvas.generate_layer_panels() Import.import_brushes("Brushes")