diff --git a/addons/block_code/blocks/input/is_input_actioned.gd b/addons/block_code/blocks/input/is_input_actioned.gd new file mode 100644 index 00000000..15ad821d --- /dev/null +++ b/addons/block_code/blocks/input/is_input_actioned.gd @@ -0,0 +1,35 @@ +@tool +extends BlockExtension + +const OptionData = preload("res://addons/block_code/code_generation/option_data.gd") + + +func get_defaults_for_node(_context_node: Node) -> Dictionary: + var inputmap_actions = _get_inputmap_actions() + return {"action_name": OptionData.new(inputmap_actions)} + + +static func _get_inputmap_actions() -> Array[StringName]: + var inputmap_actions: Array[StringName] + + var editor_input_actions: Dictionary = {} + var editor_input_action_deadzones: Dictionary = {} + if Engine.is_editor_hint(): + var actions := InputMap.get_actions() + for action in actions: + if action.begins_with("spatial_editor"): + var events := InputMap.action_get_events(action) + editor_input_actions[action] = events + editor_input_action_deadzones[action] = InputMap.action_get_deadzone(action) + + InputMap.load_from_project_settings() + + inputmap_actions = InputMap.get_actions() + + if Engine.is_editor_hint(): + for action in editor_input_actions.keys(): + InputMap.add_action(action, editor_input_action_deadzones[action]) + for event in editor_input_actions[action]: + InputMap.action_add_event(action, event) + + return inputmap_actions diff --git a/addons/block_code/blocks/input/is_input_actioned.tres b/addons/block_code/blocks/input/is_input_actioned.tres new file mode 100644 index 00000000..636a3f90 --- /dev/null +++ b/addons/block_code/blocks/input/is_input_actioned.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" load_steps=5 format=3 uid="uid://86j17le5e58u"] + +[ext_resource type="Script" path="res://addons/block_code/code_generation/option_data.gd" id="1_d8i05"] +[ext_resource type="Script" path="res://addons/block_code/code_generation/block_definition.gd" id="1_rprh7"] +[ext_resource type="Script" path="res://addons/block_code/blocks/input/is_input_actioned.gd" id="2_h11b7"] + +[sub_resource type="Resource" id="Resource_ai5in"] +script = ExtResource("1_d8i05") +selected = 0 +items = ["pressed", "just_pressed", "just_released"] + +[resource] +script = ExtResource("1_rprh7") +name = &"is_input_actioned" +target_node_class = "" +description = "True if the specified input action has been pressed or released." +category = "Input" +type = 3 +variant_type = 1 +display_template = "Is action {action_name: STRING_NAME} {action: NIL}" +code_template = "Input.is_action_{{action}}('{{action_name}}')" +defaults = { +"action": SubResource("Resource_ai5in") +} +signal_name = "" +scope = "" +extension_script = ExtResource("2_h11b7") diff --git a/addons/block_code/code_generation/blocks_catalog.gd b/addons/block_code/code_generation/blocks_catalog.gd index 3a1227da..c7ea0b92 100644 --- a/addons/block_code/code_generation/blocks_catalog.gd +++ b/addons/block_code/code_generation/blocks_catalog.gd @@ -1,7 +1,6 @@ extends Object const BlockDefinition = preload("res://addons/block_code/code_generation/block_definition.gd") -const OptionData = preload("res://addons/block_code/code_generation/option_data.gd") const Types = preload("res://addons/block_code/types/types.gd") const Util = preload("res://addons/block_code/code_generation/util.gd") const VariableDefinition = preload("res://addons/block_code/code_generation/variable_definition.gd") @@ -153,32 +152,6 @@ static func _add_property_definitions(_class_name: String, property_list: Array[ _catalog[block_definition.name] = block_definition -static func _get_inputmap_actions() -> Array[StringName]: - var inputmap_actions: Array[StringName] - - var editor_input_actions: Dictionary = {} - var editor_input_action_deadzones: Dictionary = {} - if Engine.is_editor_hint(): - var actions := InputMap.get_actions() - for action in actions: - if action.begins_with("spatial_editor"): - var events := InputMap.action_get_events(action) - editor_input_actions[action] = events - editor_input_action_deadzones[action] = InputMap.action_get_deadzone(action) - - InputMap.load_from_project_settings() - - inputmap_actions = InputMap.get_actions() - - if Engine.is_editor_hint(): - for action in editor_input_actions.keys(): - InputMap.add_action(action, editor_input_action_deadzones[action]) - for event in editor_input_actions[action]: - InputMap.action_add_event(action, event) - - return inputmap_actions - - static func _setup_properties_for_class(): for _class_name in _SETTINGS_FOR_CLASS_PROPERTY: var property_list = ClassDB.class_get_property_list(_class_name, true) @@ -186,26 +159,6 @@ static func _setup_properties_for_class(): _add_property_definitions(_class_name, property_list, property_settings) -static func _setup_input_block(): - var inputmap_actions = _get_inputmap_actions() - - var block_definition: BlockDefinition = ( - BlockDefinition - . new( - &"is_input_actioned", - "", - "", - "Input", - Types.BlockType.VALUE, - TYPE_BOOL, - "Is action {action_name: STRING_NAME} {action: NIL}", - "Input.is_action_{{action}}('{{action_name}}')", - {"action_name": OptionData.new(inputmap_actions), "action": OptionData.new(["pressed", "just_pressed", "just_released"])}, - ) - ) - _catalog[block_definition.name] = block_definition - - static func setup(): if _catalog: return @@ -213,7 +166,6 @@ static func setup(): _catalog = {} _setup_definitions_from_files() _setup_properties_for_class() - _setup_input_block() static func get_block(block_name: StringName):