StickerClone/addons/modular_sprite_animation_factory/plugin.gd

58 lines
1.4 KiB
GDScript3
Raw Normal View History

2024-07-19 23:01:49 +00:00
@tool
extends EditorPlugin
const AUTOLOAD_NAME = "ModularSpriteAnimationFactory"
var dock
func _enter_tree():
dock = preload("res://addons/modular_sprite_animation_factory/dock/msaf_dock.tscn").instantiate()
func _exit_tree():
dock.queue_free()
func _handles(object):
return object_is_valid_candidate(object)
func _edit(object):
if object:
if !dock.get_parent():
add_control_to_dock(EditorPlugin.DOCK_SLOT_RIGHT_UL, dock)
var sprite_children = get_sprite_2d_children(object)
var anim_children = get_anim_player_children(object)
dock.setup_dock(sprite_children.map(get_node_name), anim_children[0])
else:
remove_control_from_docks(dock)
func object_is_valid_candidate(object):
# The heirachy should be as below
# - Node2D
# - AnimationPlayer
# - Sprite2D 1
# - Sprite2D 2
# - ...
# When selected the parent Node2D, handles it
if object and object is Node2D:
var children = object.get_children()
return children.any(is_anim_player) and children.any(is_sprite_2d)
return false
func is_sprite_2d(object):
return object is Sprite2D
func is_anim_player(object):
return object is AnimationPlayer
func get_node_name(object):
return object.name
func get_sprite_2d_children(object: Node2D):
var children = object.get_children()
return children.filter(is_sprite_2d)
func get_anim_player_children(object: Node2D):
var children = object.get_children()
return children.filter(is_anim_player)