142 lines
3.8 KiB
GDScript3
142 lines
3.8 KiB
GDScript3
|
extends Panel
|
||
|
tool
|
||
|
|
||
|
signal on_frame_pressed(anim, btn)
|
||
|
signal on_add_frame_pressed(anim, btn)
|
||
|
signal on_animation_pressed(anim)
|
||
|
|
||
|
signal on_move_up_pressed(index)
|
||
|
signal on_move_down_pressed(index)
|
||
|
signal on_moved(form, to)
|
||
|
|
||
|
signal on_animation_duplicated(anim)
|
||
|
signal on_animation_selected(anim)
|
||
|
|
||
|
signal on_deleted(anim)
|
||
|
|
||
|
const FrameButton = preload("res://addons/Godoxel/components/FrameButton.tscn")
|
||
|
|
||
|
const StyleNormal = preload("res://addons/Godoxel/themes/AnimationStripe_Panel_normal.tres")
|
||
|
const StyleDragging = preload("res://addons/Godoxel/themes/AnimationStripe_Panel_dragging.tres")
|
||
|
const StyleDraggable = preload("res://addons/Godoxel/themes/AnimationStripe_Panel_draggable.tres")
|
||
|
|
||
|
onready var frame_button_container = find_node("FrameContainer")
|
||
|
onready var anim_button = find_node("AnimationButton")
|
||
|
var frames = []
|
||
|
var animation: GEAnimation
|
||
|
|
||
|
|
||
|
func _ready():
|
||
|
set("custom_styles/panel", StyleNormal)
|
||
|
|
||
|
|
||
|
var previous_index = -1
|
||
|
var current_index = -1
|
||
|
var dragging = false
|
||
|
var mouse_offset = Vector2.ZERO
|
||
|
func _input(event):
|
||
|
if not dragging:
|
||
|
if event is InputEventMouseButton:
|
||
|
if event.button_index == BUTTON_LEFT and event.pressed:
|
||
|
if not dragging and get_global_rect().has_point(get_global_mouse_position()):
|
||
|
dragging = true
|
||
|
set("custom_styles/panel", StyleDragging)
|
||
|
var mp = get_global_mouse_position()
|
||
|
mouse_offset = mp - rect_global_position
|
||
|
emit_signal("on_animation_selected", get_index())
|
||
|
if event is InputEventMouseMotion:
|
||
|
if get_global_rect().has_point(get_global_mouse_position()):
|
||
|
set("custom_styles/panel", StyleDraggable)
|
||
|
else:
|
||
|
set("custom_styles/panel", StyleNormal)
|
||
|
return
|
||
|
|
||
|
if dragging and event is InputEventMouseButton:
|
||
|
if not event.pressed and event.button_index == BUTTON_LEFT:
|
||
|
dragging = false
|
||
|
current_index = -1
|
||
|
current_index = -1
|
||
|
mouse_offset = Vector2.ZERO
|
||
|
get_parent().update()
|
||
|
return
|
||
|
|
||
|
previous_index = current_index
|
||
|
|
||
|
var mp = get_global_mouse_position().y - get_parent().rect_global_position.y
|
||
|
var y_index = mp / (rect_size.y + get_parent().get("custom_constants/separation"))
|
||
|
y_index = clamp(int(y_index), 0, get_parent().get_child_count()-1)
|
||
|
current_index = y_index
|
||
|
|
||
|
if previous_index != current_index and previous_index != -1:
|
||
|
emit_signal("on_moved", previous_index, current_index)
|
||
|
|
||
|
|
||
|
func set_animation(animation):
|
||
|
self.animation = animation
|
||
|
|
||
|
|
||
|
func get_animation_name() -> String:
|
||
|
return anim_button.label.text
|
||
|
|
||
|
|
||
|
func set_animation_name(anim_name: String):
|
||
|
anim_button.label.text = anim_name
|
||
|
anim_button.line_edit.text = anim_name
|
||
|
|
||
|
|
||
|
func get_frame_button(idx):
|
||
|
return frame_button_container.get_child(idx)
|
||
|
|
||
|
|
||
|
func add_new_frame_button():
|
||
|
var frame_button = FrameButton.instance()
|
||
|
frame_button_container.add_child(frame_button)
|
||
|
frame_button.connect("on_frame_pressed", self, "_on_frame_pressed")
|
||
|
return frame_button
|
||
|
|
||
|
|
||
|
func add_frame(frame):
|
||
|
var frame_button = add_new_frame_button()
|
||
|
frame_button.set_frame(frame)
|
||
|
return frame_button
|
||
|
|
||
|
|
||
|
func remove_frame(idx):
|
||
|
var child = frame_button_container.get_child(idx)
|
||
|
frame_button_container.remove_child(child)
|
||
|
child.queue_free()
|
||
|
|
||
|
|
||
|
func _on_frame_pressed(frame_btn_index):
|
||
|
emit_signal("on_frame_pressed", get_index(), frame_btn_index)
|
||
|
|
||
|
|
||
|
func _on_AddFrame_pressed():
|
||
|
var frame_button = add_new_frame_button()
|
||
|
emit_signal("on_add_frame_pressed", get_index(), frame_button.get_index())
|
||
|
|
||
|
|
||
|
func _on_AnimationButton_on_animation_button_pressed():
|
||
|
emit_signal("on_animation_pressed", get_index())
|
||
|
|
||
|
|
||
|
func _on_AnimationButton_pressed():
|
||
|
pass # Replace with function body.
|
||
|
|
||
|
|
||
|
func _on_Up_pressed():
|
||
|
emit_signal("on_move_up_pressed", get_index())
|
||
|
|
||
|
|
||
|
func _on_Down_pressed():
|
||
|
emit_signal("on_move_down_pressed", get_index())
|
||
|
|
||
|
|
||
|
func _on_Duplicate_pressed():
|
||
|
emit_signal("on_animation_duplicated", get_index())
|
||
|
|
||
|
|
||
|
func _on_Delete_pressed():
|
||
|
emit_signal("on_deleted", get_index())
|
||
|
|