Major UI changes - including new icons!

- New UI icons for the tools, layer and frame buttons.
- Removed clone, remove and move frame buttons. You can now right click on a frame button to do these actions instead.
- Added first, previous, next and last frame buttons to the timeline.
- Added rulers for the main canvas viewport.
- Window size bumped to 1152x648.
- Default FPS is now 6 instead of 1.
- Fill tool renamed to Bucket.
- Mouse default cursor shape for the canvas is the arrow instead of cross.
- Mouse default cursor shape for the mirror and onion skinning buttons is the pointing hand.
This commit is contained in:
OverloadedOrama 2019-11-19 23:23:43 +02:00
parent 22c57a1b36
commit 7318db30ab
127 changed files with 2761 additions and 651 deletions

View file

@ -54,9 +54,6 @@ func _ready() -> void:
camera_zoom()
func camera_zoom() -> void:
#Set camera offset to the center of canvas
Global.camera.offset = size / 2
Global.camera2.offset = size / 2
#Set camera zoom based on the sprite size
var bigger = max(size.x, size.y)
var zoom_max := Vector2(bigger, bigger) * 0.01
@ -70,6 +67,12 @@ func camera_zoom() -> void:
Global.camera2.zoom = Vector2(bigger, bigger) * 0.002
Global.zoom_level_label.text = "Zoom: x%s" % [stepify(1 / Global.camera.zoom.x, 0.01)]
#Set camera offset to the center of canvas
Global.camera.offset = size / 2
#Global.camera.offset.x = size.x / 2 + Global.main_viewport.rect_size.x / 2 * -Global.camera.zoom.x
#Global.camera.offset.y = size.y / 2 + Global.main_viewport.rect_size.y / 2 * -Global.camera.zoom.y
Global.camera2.offset = size / 2
# warning-ignore:unused_argument
func _process(delta) -> void:
sprite_changed_this_frame = false
@ -131,7 +134,7 @@ func _process(delta) -> void:
pencil_and_eraser(mouse_pos, current_color, current_mouse_button)
"Eraser":
pencil_and_eraser(mouse_pos, Color(0, 0, 0, 0), current_mouse_button)
"Fill":
"Bucket":
if mouse_in_canvas && Global.can_draw && Global.has_focus && Global.current_frame == frame:
var current_color : Color
var horizontal_mirror := false
@ -244,9 +247,8 @@ func _process(delta) -> void:
func handle_undo(action : String) -> void:
var canvases := []
var animation_timer := $"../../../../../../AnimationTimer"
var layer_index := -1
if animation_timer.is_stopped(): #if we're not animating, store only the current canvas
if Global.animation_timer.is_stopped(): #if we're not animating, store only the current canvas
canvases = [self]
layer_index = current_layer_index
else: #If we're animating, store all canvases
@ -270,9 +272,8 @@ func handle_redo(action : String) -> void:
if Global.undos < Global.undo_redo.get_version():
return
var canvases := []
var animation_timer := $"../../../../../../AnimationTimer"
var layer_index := -1
if animation_timer.is_stopped():
if Global.animation_timer.is_stopped():
canvases = [self]
layer_index = current_layer_index
else:

View file

@ -1,6 +1,122 @@
extends Button
var frame := 0
onready var popup_menu := $PopupMenu
func _on_FrameButton_pressed() -> void:
Global.current_frame = frame
if Input.is_action_just_released("left_mouse"):
Global.current_frame = frame
else:
if Global.canvases.size() == 1:
popup_menu.set_item_disabled(0, true)
popup_menu.set_item_disabled(2, true)
popup_menu.set_item_disabled(3, true)
else:
popup_menu.set_item_disabled(0, false)
if frame > 0:
popup_menu.set_item_disabled(2, false)
if frame < Global.canvases.size() - 1:
popup_menu.set_item_disabled(3, false)
popup_menu.popup(Rect2(get_global_mouse_position(), Vector2.ONE))
pressed = !pressed
func _on_PopupMenu_id_pressed(ID : int) -> void:
match ID:
0: #Remove Frame
var canvas : Canvas = Global.canvases[frame]
var new_canvases := Global.canvases.duplicate()
new_canvases.erase(canvas)
var new_hidden_canvases := Global.hidden_canvases.duplicate()
new_hidden_canvases.append(canvas)
var current_frame := Global.current_frame
if current_frame > 0 && current_frame == new_canvases.size(): #If it's the last frame
current_frame -= 1
Global.undos += 1
Global.undo_redo.create_action("Remove Frame")
Global.undo_redo.add_do_property(Global, "canvases", new_canvases)
Global.undo_redo.add_do_property(Global, "hidden_canvases", new_hidden_canvases)
Global.undo_redo.add_do_property(Global, "canvas", new_canvases[current_frame])
Global.undo_redo.add_do_property(Global, "current_frame", current_frame)
for i in range(frame, new_canvases.size()):
var c : Canvas = new_canvases[i]
Global.undo_redo.add_do_property(c, "frame", i)
Global.undo_redo.add_undo_property(c, "frame", c.frame)
Global.undo_redo.add_undo_property(Global, "canvases", Global.canvases)
Global.undo_redo.add_undo_property(Global, "hidden_canvases", Global.hidden_canvases)
Global.undo_redo.add_undo_property(Global, "canvas", canvas)
Global.undo_redo.add_undo_property(Global, "current_frame", Global.current_frame)
Global.undo_redo.add_do_method(Global, "redo", [canvas])
Global.undo_redo.add_undo_method(Global, "undo", [canvas])
Global.undo_redo.commit_action()
1: #Clone Layer
var canvas : Canvas = Global.canvases[frame]
var new_canvas : Canvas = load("res://Prefabs/Canvas.tscn").instance()
new_canvas.size = Global.canvas.size
new_canvas.frame = Global.canvases.size()
var new_canvases := Global.canvases.duplicate()
new_canvases.append(new_canvas)
var new_hidden_canvases := Global.hidden_canvases.duplicate()
new_hidden_canvases.append(new_canvas)
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]])
Global.undos += 1
Global.undo_redo.create_action("Add Frame")
Global.undo_redo.add_do_method(Global, "redo", [new_canvas])
Global.undo_redo.add_undo_method(Global, "undo", [new_canvas])
Global.undo_redo.add_do_property(Global, "canvases", new_canvases)
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 child in Global.frame_container.get_children():
var frame_button = child.get_node("FrameButton")
Global.undo_redo.add_do_property(frame_button, "pressed", false)
Global.undo_redo.add_undo_property(frame_button, "pressed", frame_button.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)
Global.undo_redo.add_undo_property(Global, "canvases", Global.canvases)
Global.undo_redo.add_undo_property(Global, "hidden_canvases", new_hidden_canvases)
Global.undo_redo.add_undo_property(Global, "canvas", Global.canvas)
Global.undo_redo.add_undo_property(Global, "current_frame", Global.current_frame)
Global.undo_redo.commit_action()
2: #Move Left
change_frame_order(-1)
3: #Move Right
change_frame_order(1)
func change_frame_order(rate : int) -> void:
var change = frame + rate
var new_canvases := Global.canvases.duplicate()
var temp = new_canvases[frame]
new_canvases[frame] = new_canvases[change]
new_canvases[change] = temp
Global.undo_redo.create_action("Change Frame Order")
Global.undo_redo.add_do_property(Global, "canvases", new_canvases)
Global.undo_redo.add_do_property(Global.canvases[frame], "frame", change)
Global.undo_redo.add_do_property(Global.canvases[change], "frame", frame)
Global.undo_redo.add_undo_property(Global, "canvases", Global.canvases)
Global.undo_redo.add_undo_property(Global.canvases[frame], "frame", frame)
Global.undo_redo.add_undo_property(Global.canvases[change], "frame", change)
Global.undo_redo.add_undo_method(Global, "undo", [Global.canvases[frame]])
Global.undo_redo.add_do_method(Global, "redo", [Global.canvases[frame]])
Global.undo_redo.commit_action()

View file

@ -23,6 +23,7 @@ var hidden_canvases := []
var control : Node
var canvas : Canvas
var canvas_parent : Node
var main_viewport : ViewportContainer
var second_viewport : ViewportContainer
var viewport_separator : VSeparator
var split_screen_button : Button
@ -41,8 +42,6 @@ var file_menu : MenuButton
var edit_menu : MenuButton
var view_menu : MenuButton
var help_menu : MenuButton
var left_indicator : Sprite
var right_indicator : Sprite
var left_color_picker : ColorPickerButton
var right_color_picker : ColorPickerButton
var left_brush_size_edit : SpinBox
@ -52,18 +51,16 @@ var right_interpolate_slider : HSlider
var left_brush_indicator : Sprite
var right_brush_indicator : Sprite
var loop_animation_button : Button
var play_forward : Button
var play_backwards : Button
var loop_animation_button : BaseButton
var play_forward : BaseButton
var play_backwards : BaseButton
var frame_container : HBoxContainer
var remove_frame_button : Button
var move_left_frame_button : Button
var move_right_frame_button : Button
var vbox_layer_container : VBoxContainer
var remove_layer_button : Button
var move_up_layer_button : Button
var move_down_layer_button : Button
var merge_down_layer_button : Button
var remove_layer_button : BaseButton
var move_up_layer_button : BaseButton
var move_down_layer_button : BaseButton
var merge_down_layer_button : BaseButton
var animation_timer : Timer
var cursor_position_label : Label
var zoom_level_label : Label
var current_frame_label : Label
@ -114,11 +111,12 @@ func _ready() -> void:
canvas = find_node_by_name(root, "Canvas")
canvases.append(canvas)
canvas_parent = canvas.get_parent()
main_viewport = find_node_by_name(root, "ViewportContainer")
second_viewport = find_node_by_name(root, "ViewportContainer2")
viewport_separator = find_node_by_name(root, "ViewportSeparator")
split_screen_button = find_node_by_name(root, "SplitScreenButton")
camera = find_node_by_name(canvas_parent, "Camera2D")
camera2 = find_node_by_name(canvas_parent.get_parent().get_parent(), "Camera2D2")
camera2 = find_node_by_name(root, "Camera2D2")
selection_rectangle = find_node_by_name(root, "SelectionRectangle")
image_clipboard = Image.new()
@ -127,8 +125,6 @@ func _ready() -> void:
edit_menu = find_node_by_name(root, "EditMenu")
view_menu = find_node_by_name(root, "ViewMenu")
help_menu = find_node_by_name(root, "HelpMenu")
left_indicator = find_node_by_name(root, "LeftIndicator")
right_indicator = find_node_by_name(root, "RightIndicator")
left_color_picker = find_node_by_name(root, "LeftColorPickerButton")
right_color_picker = find_node_by_name(root, "RightColorPickerButton")
left_brush_size_edit = find_node_by_name(root, "LeftBrushSizeEdit")
@ -143,14 +139,12 @@ func _ready() -> void:
play_forward = find_node_by_name(root, "PlayForward")
play_backwards = find_node_by_name(root, "PlayBackwards")
frame_container = find_node_by_name(root, "FrameContainer")
remove_frame_button = find_node_by_name(root, "RemoveFrame")
move_left_frame_button = find_node_by_name(root, "MoveFrameLeft")
move_right_frame_button = find_node_by_name(root, "MoveFrameRight")
vbox_layer_container = find_node_by_name(root, "VBoxLayerContainer")
remove_layer_button = find_node_by_name(root, "RemoveLayerButton")
move_up_layer_button = find_node_by_name(root, "MoveUpLayer")
move_down_layer_button = find_node_by_name(root, "MoveDownLayer")
merge_down_layer_button = find_node_by_name(root, "MergeDownLayer")
animation_timer = find_node_by_name(root, "AnimationTimer")
cursor_position_label = find_node_by_name(root, "CursorPosition")
zoom_level_label = find_node_by_name(root, "ZoomLevel")
current_frame_label = find_node_by_name(root, "CurrentFrame")
@ -204,11 +198,9 @@ func undo(_canvases : Array, layer_index : int = -1) -> void:
canvas_parent.move_child(_canvases[0], _canvases[0].frame)
frame_container.add_child(_canvases[0].frame_button)
frame_container.move_child(_canvases[0].frame_button, _canvases[0].frame)
remove_frame_button.disabled = false
remove_frame_button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
elif action_name == "Change Frame Order":
frame_container.move_child(_canvases[0].frame_button, current_frame)
canvas_parent.move_child(_canvases[0], current_frame)
frame_container.move_child(_canvases[0].frame_button, _canvases[0].frame)
canvas_parent.move_child(_canvases[0], _canvases[0].frame)
notification_label("Undo: %s" % action_name)
@ -238,17 +230,12 @@ func redo(_canvases : Array, layer_index : int = -1) -> void:
canvas_parent.add_child(_canvases[0])
if !Global.frame_container.is_a_parent_of(_canvases[0].frame_button):
Global.frame_container.add_child(_canvases[0].frame_button)
remove_frame_button.disabled = false
remove_frame_button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
elif action_name == "Remove Frame":
canvas_parent.remove_child(_canvases[0])
frame_container.remove_child(_canvases[0].frame_button)
if len(canvases) == 1:
remove_frame_button.disabled = true
remove_frame_button.mouse_default_cursor_shape = Control.CURSOR_FORBIDDEN
elif action_name == "Change Frame Order":
frame_container.move_child(_canvases[0].frame_button, current_frame)
canvas_parent.move_child(_canvases[0], current_frame)
frame_container.move_child(_canvases[0].frame_button, _canvases[0].frame)
canvas_parent.move_child(_canvases[0], _canvases[0].frame)
if control.redone:
notification_label("Redo: %s" % action_name)
@ -268,20 +255,6 @@ func frame_changed(value : int) -> void:
#Make only the current frame button pressed
canvas.frame_button.get_node("FrameButton").pressed = true
if current_frame == 0:
move_left_frame_button.disabled = true
move_left_frame_button.mouse_default_cursor_shape = Control.CURSOR_FORBIDDEN
else:
move_left_frame_button.disabled = false
move_left_frame_button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
if current_frame == canvases.size() - 1:
move_right_frame_button.disabled = true
move_right_frame_button.mouse_default_cursor_shape = Control.CURSOR_FORBIDDEN
else:
move_right_frame_button.disabled = false
move_right_frame_button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
func create_brush_button(brush_img : Image, brush_type := BRUSH_TYPES.CUSTOM) -> void:
var hbox_container : HBoxContainer

View file

@ -9,6 +9,7 @@ var minor_subdivision := 5
var first : Vector2
var last : Vector2
# warning-ignore:unused_argument
func _process(delta) -> void:
update()

View file

@ -58,10 +58,10 @@ func changed_selection() -> void:
func _on_VisibilityButton_pressed() -> void:
if Global.canvas.layers[i][3]:
Global.canvas.layers[i][3] = false
get_child(0).get_child(0).text = "I"
get_child(0).get_child(0).texture_normal = preload("res://Assets/Graphics/Layers/layer_invisible.png")
else:
Global.canvas.layers[i][3] = true
get_child(0).get_child(0).text = "V"
get_child(0).get_child(0).texture_normal = preload("res://Assets/Graphics/Layers/layer_visible.png")
func _on_LineEdit_text_changed(new_text : String) -> void:
Global.canvas.layers[i][2] = new_text

View file

@ -10,7 +10,7 @@ var export_all_frames : CheckBox
var export_as_single_file : CheckBox
var export_vertical_spritesheet : CheckBox
var redone := false
var fps := 1.0
var fps := 6.0
var animation_loop := 0 #0 is no loop, 1 is cycle loop, 2 is ping-pong loop
var animation_forward := true
@ -19,7 +19,7 @@ func _ready() -> void:
OS.set_window_title("Pixelorama %s" % ProjectSettings.get_setting("application/config/Version"))
# Set a minimum window size to prevent UI elements from collapsing on each other.
# This property is only available in 3.2alpha or later, so use `set()` to fail gracefully if it doesn't exist.
OS.set("min_window_size", Vector2(1024, 600))
OS.set("min_window_size", Vector2(1152, 648))
var file_menu_items := {
"New..." : KEY_MASK_CTRL + KEY_N,
@ -78,7 +78,7 @@ func _ready() -> void:
#Node, left mouse shortcut, right mouse shortcut
tools.append([Global.find_node_by_name(root, "Pencil"), "left_pencil_tool", "right_pencil_tool"])
tools.append([Global.find_node_by_name(root, "Eraser"), "left_eraser_tool", "right_eraser_tool"])
tools.append([Global.find_node_by_name(root, "Fill"), "left_fill_tool", "right_fill_tool"])
tools.append([Global.find_node_by_name(root, "Bucket"), "left_fill_tool", "right_fill_tool"])
tools.append([Global.find_node_by_name(root, "PaintAllPixelsSameColor"), "left_paint_all_tool", "right_paint_all_tool"])
tools.append([Global.find_node_by_name(root, "LightenDarken"), "left_lightdark_tool", "right_lightdark_tool"])
tools.append([Global.find_node_by_name(root, "RectSelect"), "left_rectangle_select_tool", "right_rectangle_select_tool"])
@ -550,12 +550,21 @@ func _on_Tool_pressed(tool_pressed : BaseButton, mouse_press := true, key_for_le
var current_action := tool_pressed.name
if (mouse_press && Input.is_action_just_released("left_mouse")) || (!mouse_press && key_for_left):
Global.current_left_tool = current_action
Global.left_indicator.get_parent().remove_child(Global.left_indicator)
tool_pressed.add_child(Global.left_indicator)
elif (mouse_press && Input.is_action_just_released("right_mouse")) || (!mouse_press && !key_for_left):
Global.current_right_tool = current_action
Global.right_indicator.get_parent().remove_child(Global.right_indicator)
tool_pressed.add_child(Global.right_indicator)
for t in tools:
var tool_name : String = t[0].name
if tool_name == "PaintAllPixelsSameColor":
continue
if tool_name == Global.current_left_tool && tool_name == Global.current_right_tool:
t[0].texture_normal = load("res://Assets/Graphics/Tools/%s_l_r.png" % tool_name)
elif tool_name == Global.current_left_tool:
t[0].texture_normal = load("res://Assets/Graphics/Tools/%s_l.png" % tool_name)
elif tool_name == Global.current_right_tool:
t[0].texture_normal = load("res://Assets/Graphics/Tools/%s_r.png" % tool_name)
else:
t[0].texture_normal = load("res://Assets/Graphics/Tools/%s.png" % tool_name)
func _on_LeftIndicatorCheckbox_toggled(button_pressed) -> void:
Global.left_square_indicator_visible = button_pressed
@ -643,33 +652,24 @@ func _on_MergeLayer_pressed() -> void:
Global.undo_redo.add_do_method(Global, "redo", [Global.canvas])
Global.undo_redo.commit_action()
func add_frame(is_new := true) -> void:
var canvas : Canvas = load("res://Prefabs/Canvas.tscn").instance()
canvas.size = Global.canvas.size
canvas.frame = Global.canvases.size()
func add_frame() -> void:
var new_canvas : Canvas = load("res://Prefabs/Canvas.tscn").instance()
new_canvas.size = Global.canvas.size
new_canvas.frame = Global.canvases.size()
var new_canvases := Global.canvases.duplicate()
new_canvases.append(canvas)
new_canvases.append(new_canvas)
var new_hidden_canvases := Global.hidden_canvases.duplicate()
new_hidden_canvases.append(canvas)
if !is_new: #If we're cloning
for layer in Global.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)
canvas.layers.append([sprite, tex, layer[2], layer[3]])
new_hidden_canvases.append(new_canvas)
Global.undos += 1
Global.undo_redo.create_action("Add Frame")
Global.undo_redo.add_do_method(Global, "redo", [canvas])
Global.undo_redo.add_undo_method(Global, "undo", [canvas])
Global.undo_redo.add_do_method(Global, "redo", [new_canvas])
Global.undo_redo.add_undo_method(Global, "undo", [new_canvas])
Global.undo_redo.add_do_property(Global, "canvases", new_canvases)
Global.undo_redo.add_do_property(Global, "hidden_canvases", Global.hidden_canvases)
Global.undo_redo.add_do_property(Global, "canvas", canvas)
Global.undo_redo.add_do_property(Global, "canvas", new_canvas)
Global.undo_redo.add_do_property(Global, "current_frame", new_canvases.size() - 1)
for child in Global.frame_container.get_children():
var frame_button = child.get_node("FrameButton")
@ -685,102 +685,55 @@ func add_frame(is_new := true) -> void:
Global.undo_redo.add_undo_property(Global, "current_frame", Global.current_frame)
Global.undo_redo.commit_action()
func _on_RemoveFrame_pressed() -> void:
var new_canvases := Global.canvases.duplicate()
new_canvases.erase(Global.canvas)
var new_hidden_canvases := Global.hidden_canvases.duplicate()
new_hidden_canvases.append(Global.canvas)
var current_frame := Global.current_frame
if current_frame > 0 && current_frame == new_canvases.size():
current_frame -= 1
Global.undos += 1
Global.undo_redo.create_action("Remove Frame")
Global.undo_redo.add_undo_method(Global, "undo", [Global.canvas])
Global.undo_redo.add_do_property(Global, "canvases", new_canvases)
Global.undo_redo.add_do_property(Global, "hidden_canvases", new_hidden_canvases)
Global.undo_redo.add_do_property(Global, "canvas", new_canvases[current_frame])
Global.undo_redo.add_do_property(Global, "current_frame", current_frame)
var i := 0
for canvas in new_canvases:
Global.undo_redo.add_do_property(canvas, "frame", i)
Global.undo_redo.add_undo_property(canvas, "frame", canvas.frame)
i += 1
Global.undo_redo.add_undo_property(Global, "canvases", Global.canvases)
Global.undo_redo.add_undo_property(Global, "hidden_canvases", Global.hidden_canvases)
Global.undo_redo.add_undo_property(Global, "canvas", Global.canvas)
Global.undo_redo.add_undo_property(Global, "current_frame", Global.current_frame)
Global.undo_redo.add_do_method(Global, "redo", [Global.canvas])
Global.undo_redo.commit_action()
func change_frame_order(rate : int) -> void:
var change = Global.current_frame + rate
var new_canvases := Global.canvases.duplicate()
var temp = new_canvases[Global.current_frame]
new_canvases[Global.current_frame] = new_canvases[change]
new_canvases[change] = temp
Global.undo_redo.create_action("Change Frame Order")
Global.undo_redo.add_do_property(Global, "canvases", new_canvases)
Global.undo_redo.add_do_property(Global.canvas, "frame", change)
Global.undo_redo.add_do_property(Global.canvases[change], "frame", Global.current_frame)
Global.undo_redo.add_do_property(Global, "current_frame", change)
Global.undo_redo.add_undo_property(Global, "canvases", Global.canvases)
Global.undo_redo.add_undo_property(Global.canvas, "frame", Global.current_frame)
Global.undo_redo.add_undo_property(Global.canvases[change], "frame", change)
Global.undo_redo.add_undo_property(Global, "current_frame", Global.current_frame)
Global.undo_redo.add_undo_method(Global, "undo", [Global.canvas])
Global.undo_redo.add_do_method(Global, "redo", [Global.canvas])
Global.undo_redo.commit_action()
func _on_LoopAnim_pressed() -> void:
match Global.loop_animation_button.text:
"No":
match Global.loop_animation_button.texture_normal.resource_path:
"res://Assets/Graphics/Timeline/Loop_None.png":
#Make it loop
animation_loop = 1
Global.loop_animation_button.text = "Cycle"
"Cycle":
Global.loop_animation_button.texture_normal = preload("res://Assets/Graphics/Timeline/Loop.png")
"res://Assets/Graphics/Timeline/Loop.png":
#Make it ping-pong
animation_loop = 2
Global.loop_animation_button.text = "Ping-Pong"
"Ping-Pong":
Global.loop_animation_button.texture_normal = preload("res://Assets/Graphics/Timeline/Loop_PingPong.png")
"res://Assets/Graphics/Timeline/Loop_PingPong.png":
#Make it stop
animation_loop = 0
Global.loop_animation_button.text = "No"
Global.loop_animation_button.texture_normal = preload("res://Assets/Graphics/Timeline/Loop_None.png")
func _on_PlayForward_toggled(button_pressed) -> void:
Global.play_backwards.pressed = false
Global.play_backwards.text = "Play Backwards"
if button_pressed:
Global.play_forward.text = "Stop"
$AnimationTimer.wait_time = 1 / fps
$AnimationTimer.start()
animation_forward = true
else:
Global.play_forward.text = "Play Forward"
$AnimationTimer.stop()
func _on_PlayBackwards_toggled(button_pressed) -> void:
Global.play_forward.pressed = false
Global.play_forward.text = "Play Forward"
if button_pressed:
Global.play_backwards.text = "Stop"
$AnimationTimer.wait_time = 1 / fps
$AnimationTimer.start()
animation_forward = false
else:
Global.play_backwards.text = "Play Backwards"
$AnimationTimer.stop()
func _on_NextFrame_pressed() -> void:
if Global.current_frame < Global.canvases.size() - 1:
Global.current_frame += 1
func _on_PreviousFrame_pressed() -> void:
if Global.current_frame > 0:
Global.current_frame -= 1
func _on_LastFrame_pressed() -> void:
Global.current_frame = Global.canvases.size() - 1
func _on_FirstFrame_pressed() -> void:
Global.current_frame = 0
func _on_AnimationTimer_timeout() -> void:
if animation_forward:
if Global.current_frame < Global.canvases.size() - 1:
@ -789,9 +742,7 @@ func _on_AnimationTimer_timeout() -> void:
match animation_loop:
0: #No loop
Global.play_forward.pressed = false
Global.play_forward.text = "Play Forward"
Global.play_backwards.pressed = false
Global.play_backwards.text = "Play Backwards"
$AnimationTimer.stop()
1: #Cycle loop
Global.current_frame = 0
@ -806,9 +757,7 @@ func _on_AnimationTimer_timeout() -> void:
match animation_loop:
0: #No loop
Global.play_backwards.pressed = false
Global.play_backwards.text = "Play Backwards"
Global.play_forward.pressed = false
Global.play_forward.text = "Play Forward"
$AnimationTimer.stop()
1: #Cycle loop
Global.current_frame = Global.canvases.size() - 1

View file

@ -1,8 +1,5 @@
extends Label
# Declare member variables here. Examples:
# var a = 2
# var b = "text"
# Called when the node enters the scene tree for the first time.
func _ready() -> void:

View file

@ -2,4 +2,4 @@ extends Viewport
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
world_2d = $"../../ViewportContainer/Viewport".world_2d
world_2d = Global.canvas.get_parent().world_2d

View file

@ -56,7 +56,7 @@ func _process(delta) -> void:
tex.create_from_image(img, 0)
update()
else:
get_parent().get_parent().mouse_default_cursor_shape = Input.CURSOR_CROSS
get_parent().get_parent().mouse_default_cursor_shape = Input.CURSOR_ARROW
if is_dragging:
if (Global.current_left_tool == "RectSelect" && Input.is_action_pressed("left_mouse")) || (Global.current_right_tool == "RectSelect" && Input.is_action_pressed("right_mouse")):

View file

@ -9,6 +9,7 @@ var minor_subdivision := 5
var first : Vector2
var last : Vector2
# warning-ignore:unused_argument
func _process(delta) -> void:
update()