61 lines
1.5 KiB
GDScript
61 lines
1.5 KiB
GDScript
extends EditorInspectorPlugin
|
|
|
|
## This inspector plugin will show an Execute button for action properties in
|
|
## SS2D_Shape.
|
|
##
|
|
## To add an action property export it with:
|
|
##
|
|
## @export_placeholder("ActionProperty") var ...
|
|
##
|
|
## Then, when an action is executed by user (by pressing an Execute button in inspector),
|
|
## setter will be called with non-empty string:
|
|
##
|
|
## func _action_property_setter(value: String) -> void:
|
|
## if value.size() > 0:
|
|
## ## Action is executed
|
|
##
|
|
|
|
class ActionPropertyEditor:
|
|
extends EditorProperty
|
|
|
|
signal action_pressed
|
|
|
|
var button: Button
|
|
|
|
func _init() -> void:
|
|
button = Button.new()
|
|
button.text = "Execute"
|
|
add_child(button)
|
|
button.connect("pressed", func() -> void: emit_signal("action_pressed"))
|
|
|
|
func _ready() -> void:
|
|
button.icon = get_theme_icon("TextEditorPlay", "EditorIcons")
|
|
|
|
|
|
func _can_handle(object: Object) -> bool:
|
|
if object is SS2D_Shape:
|
|
return true
|
|
return false
|
|
|
|
|
|
func _parse_property(
|
|
object: Object,
|
|
_type: Variant.Type,
|
|
name: String,
|
|
_hint_type: PropertyHint,
|
|
hint_string: String,
|
|
_usage_flags,
|
|
_wide: bool
|
|
) -> bool:
|
|
if hint_string == "ActionProperty":
|
|
var prop_editor := ActionPropertyEditor.new()
|
|
add_property_editor(name, prop_editor)
|
|
prop_editor.connect("action_pressed", self._on_action_pressed.bind(object, name))
|
|
return true
|
|
return false
|
|
|
|
|
|
func _on_action_pressed(object: Object, prop_name: String) -> void:
|
|
prints("Action executed:", prop_name.capitalize())
|
|
object.set(prop_name, "executed")
|