58 lines
1.4 KiB
GDScript3
58 lines
1.4 KiB
GDScript3
|
@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)
|