Add lever and jump pad components with activation logic
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
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")
|
Reference in New Issue
Block a user