From 2a5dfa7ea28c2b529c4cb138d6c8a9df8bb2e47e Mon Sep 17 00:00:00 2001 From: OverloadedOrama <35376950+OverloadedOrama@users.noreply.github.com> Date: Thu, 5 Mar 2020 01:53:48 +0200 Subject: [PATCH] The selected cel (?) is now pressed, based on current layer and frame All the other buttons are pressed = false. Also removed some legacy code. --- Scripts/AnimationTimeline.gd | 5 +---- Scripts/Canvas.gd | 42 +++--------------------------------- Scripts/FrameButton.gd | 2 -- Scripts/Global.gd | 33 +++++++++++++++++----------- 4 files changed, 25 insertions(+), 57 deletions(-) diff --git a/Scripts/AnimationTimeline.gd b/Scripts/AnimationTimeline.gd index eaf7fa2ea..cf7337e00 100644 --- a/Scripts/AnimationTimeline.gd +++ b/Scripts/AnimationTimeline.gd @@ -23,10 +23,7 @@ func add_frame() -> void: Global.undo_redo.add_do_property(Global, "hidden_canvases", Global.hidden_canvases) 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][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: Global.undo_redo.add_do_property(c, "visible", false) Global.undo_redo.add_undo_property(c, "visible", c.visible) diff --git a/Scripts/Canvas.gd b/Scripts/Canvas.gd index e7d082d4a..180d9e8dd 100644 --- a/Scripts/Canvas.gd +++ b/Scripts/Canvas.gd @@ -417,7 +417,7 @@ func _input(event : InputEvent) -> void: 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) if sprite_changed_this_frame: - update_texture(Global.current_layer, (Input.is_action_just_released("left_mouse") || Input.is_action_just_released("right_mouse"))) + update_texture(Global.current_layer) func camera_zoom() -> void: # Set camera zoom based on the sprite size @@ -489,25 +489,12 @@ func handle_redo(action : String) -> void: Global.undo_redo.add_do_method(Global, "redo", canvases, layer_index) Global.undo_redo.commit_action() -func update_texture(layer_index : int, update_frame_tex := true) -> void: +func update_texture(layer_index : int) -> void: layers[layer_index][1].create_from_image(layers[layer_index][0], 0) -# var layer_container := get_layer_container(layer_index) -# if layer_container: -# layer_container.get_child(1).get_child(0).texture = layers[layer_index][1] + var frame_texture_rect : TextureRect frame_texture_rect = Global.find_node_by_name(Global.layers[layer_index][2].get_child(frame),"FrameTexture") frame_texture_rect.texture = layers[layer_index][1] -# if update_frame_tex: -# # This code is used to update the texture in the animation timeline frame button -# # but blend_rect causes major performance issues on large images -# var whole_image := Image.new() -# whole_image.create(size.x, size.y, false, Image.FORMAT_RGBA8) -# for layer in layers: -# whole_image.blend_rect(layer[0], Rect2(position, size), Vector2.ZERO) -# layer[0].lock() -# var whole_image_texture := ImageTexture.new() -# whole_image_texture.create_from_image(whole_image, 0) -# frame_texture_rect.texture = whole_image_texture func frame_changed(value : int) -> void: frame = value @@ -521,29 +508,6 @@ func get_layer_container(layer_index : int) -> LayerContainer: return container return null -func generate_layer_panels() -> void: - return - for child in Global.layers_container.get_children(): - if child is LayerContainer: - child.queue_free() - - current_layer_index = layers.size() - 1 - if layers.size() == 1: - Global.remove_layer_button.disabled = true - Global.remove_layer_button.mouse_default_cursor_shape = Control.CURSOR_FORBIDDEN - else: - Global.remove_layer_button.disabled = false - Global.remove_layer_button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND - - for i in range(layers.size() -1, -1, -1): - var layer_container = load("res://Prefabs/LayerContainer.tscn").instance() -# if !layers[i][2]: -# layers[i][2] = tr("Layer") + " %s" % i - layer_container.i = i - layer_container.get_child(0).get_child(1).text = layers[i][2] - layer_container.get_child(0).get_child(2).text = layers[i][2] - Global.layer_and_frame_container.add_child(layer_container) - func pencil_and_eraser(sprite : Image, mouse_pos : Vector2, color : Color, current_mouse_button : String, current_action := "None") -> void: if made_line: return diff --git a/Scripts/FrameButton.gd b/Scripts/FrameButton.gd index fbc5d4c81..3dbfa87fc 100644 --- a/Scripts/FrameButton.gd +++ b/Scripts/FrameButton.gd @@ -12,8 +12,6 @@ func _on_FrameButton_pressed() -> void: if Input.is_action_just_released("left_mouse"): Global.current_frame = frame Global.current_layer = layer - print(str(frame), str(layer)) - print("Current layer: %s" % Global.current_layer) elif Input.is_action_just_released("right_mouse"): if Global.canvases.size() == 1: popup_menu.set_item_disabled(0, true) diff --git a/Scripts/Global.gd b/Scripts/Global.gd index a31ec3f55..0ef82b5d5 100644 --- a/Scripts/Global.gd +++ b/Scripts/Global.gd @@ -473,10 +473,12 @@ func canvases_changed(value : Array) -> void: canvases = value for container in frames_container.get_children(): for button in container.get_children(): + container.remove_child(button) button.queue_free() frames_container.remove_child(container) for frame_id in frame_ids.get_children(): + frame_ids.remove_child(frame_id) frame_id.queue_free() for i in range(layers.size() - 1, -1, -1): @@ -506,6 +508,7 @@ func layers_changed(value : Array) -> void: for container in frames_container.get_children(): for button in container.get_children(): + container.remove_child(button) button.queue_free() frames_container.remove_child(container) @@ -524,13 +527,13 @@ func layers_changed(value : Array) -> void: var frame_button = load("res://Prefabs/FrameButton.tscn").instance() frame_button.frame = j frame_button.layer = i - frame_button.pressed = true frame_button.get_child(0).texture = Global.canvases[j].layers[i][1] layers[i][2].add_child(frame_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.size() == 1: remove_layer_button.disabled = true @@ -549,23 +552,26 @@ func frame_changed(value : int) -> void: current_frame = value current_frame_label.text = tr("Current frame:") + " %s/%s" % [str(current_frame + 1), canvases.size()] - for c in canvases: + var i := 0 + for c in canvases: # De-select all the other canvases/frames c.visible = false c.is_making_line = false c.line_2d.set_point_position(1, c.line_2d.points[0]) - canvas = canvases[current_frame] - canvas.visible = true - #canvas.generate_layer_panels() - # Make all frame buttons unpressed - for c in canvases: var text_color := Color.white if theme_type == "Gold" || theme_type == "Light": text_color = Color.black - #c.frame_button.pressed = false - #c.frame_button.get_node("FrameID").add_color_override("font_color", text_color) - # Make only the current frame button pressed - #canvas.frame_button.pressed = true - #canvas.frame_button.get_node("FrameID").add_color_override("font_color", Color("#3c5d75")) + frame_ids.get_child(i).add_color_override("font_color", text_color) + for layer in layers: + if i < layer[2].get_child_count(): + layer[2].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", Color("#3c5d75")) + if current_frame < layers[current_layer][2].get_child_count(): + layers[current_layer][2].get_child(current_frame).pressed = true func layer_changed(value : int) -> void: current_layer = value @@ -597,6 +603,9 @@ func layer_changed(value : int) -> void: merge_down_layer_button.disabled = true merge_down_layer_button.mouse_default_cursor_shape = Control.CURSOR_FORBIDDEN + yield(get_tree().create_timer(0.01), "timeout") + self.current_frame = current_frame # Call frame_changed to update UI + func create_brush_button(brush_img : Image, brush_type := Brush_Types.CUSTOM, hint_tooltip := "") -> void: var brush_container var brush_button = load("res://Prefabs/BrushButton.tscn").instance()