Skip to content

Commit 10a1fa4

Browse files
committed
Add is_input_actioned.tres
This replaces the block definition generated in BlocksCatalog. Instead, the static block definition includes an extension script which generates a list of action name options.
1 parent c0b5068 commit 10a1fa4

File tree

3 files changed

+62
-47
lines changed

3 files changed

+62
-47
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
@tool
2+
extends BlockExtension
3+
4+
const OptionData = preload("res://addons/block_code/code_generation/option_data.gd")
5+
6+
7+
func get_defaults_for_node(_context_node: Node) -> Dictionary:
8+
var inputmap_actions = _get_inputmap_actions()
9+
return {"action_name": OptionData.new(inputmap_actions)}
10+
11+
12+
static func _get_inputmap_actions() -> Array[StringName]:
13+
var inputmap_actions: Array[StringName]
14+
15+
var editor_input_actions: Dictionary = {}
16+
var editor_input_action_deadzones: Dictionary = {}
17+
if Engine.is_editor_hint():
18+
var actions := InputMap.get_actions()
19+
for action in actions:
20+
if action.begins_with("spatial_editor"):
21+
var events := InputMap.action_get_events(action)
22+
editor_input_actions[action] = events
23+
editor_input_action_deadzones[action] = InputMap.action_get_deadzone(action)
24+
25+
InputMap.load_from_project_settings()
26+
27+
inputmap_actions = InputMap.get_actions()
28+
29+
if Engine.is_editor_hint():
30+
for action in editor_input_actions.keys():
31+
InputMap.add_action(action, editor_input_action_deadzones[action])
32+
for event in editor_input_actions[action]:
33+
InputMap.action_add_event(action, event)
34+
35+
return inputmap_actions
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
[gd_resource type="Resource" load_steps=5 format=3 uid="uid://86j17le5e58u"]
2+
3+
[ext_resource type="Script" path="res://addons/block_code/code_generation/option_data.gd" id="1_d8i05"]
4+
[ext_resource type="Script" path="res://addons/block_code/code_generation/block_definition.gd" id="1_rprh7"]
5+
[ext_resource type="Script" path="res://addons/block_code/blocks/input/is_input_actioned.gd" id="2_h11b7"]
6+
7+
[sub_resource type="Resource" id="Resource_ai5in"]
8+
script = ExtResource("1_d8i05")
9+
selected = 0
10+
items = ["pressed", "just_pressed", "just_released"]
11+
12+
[resource]
13+
script = ExtResource("1_rprh7")
14+
name = &"is_input_actioned"
15+
target_node_class = ""
16+
description = "True if the character is on the floor."
17+
category = "Input"
18+
type = 3
19+
variant_type = 1
20+
display_template = "Is action {action_name: STRING_NAME} {action: NIL}"
21+
code_template = "Input.is_action_{{action}}('{{action_name}}')"
22+
defaults = {
23+
"action": SubResource("Resource_ai5in")
24+
}
25+
signal_name = ""
26+
scope = ""
27+
extension_script = ExtResource("2_h11b7")

addons/block_code/code_generation/blocks_catalog.gd

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -156,67 +156,20 @@ static func _add_property_definitions(_class_name: String, property_list: Array[
156156
_catalog[block_definition.name] = block_definition
157157

158158

159-
static func _get_inputmap_actions() -> Array[StringName]:
160-
var inputmap_actions: Array[StringName]
161-
162-
var editor_input_actions: Dictionary = {}
163-
var editor_input_action_deadzones: Dictionary = {}
164-
if Engine.is_editor_hint():
165-
var actions := InputMap.get_actions()
166-
for action in actions:
167-
if action.begins_with("spatial_editor"):
168-
var events := InputMap.action_get_events(action)
169-
editor_input_actions[action] = events
170-
editor_input_action_deadzones[action] = InputMap.action_get_deadzone(action)
171-
172-
InputMap.load_from_project_settings()
173-
174-
inputmap_actions = InputMap.get_actions()
175-
176-
if Engine.is_editor_hint():
177-
for action in editor_input_actions.keys():
178-
InputMap.add_action(action, editor_input_action_deadzones[action])
179-
for event in editor_input_actions[action]:
180-
InputMap.action_add_event(action, event)
181-
182-
return inputmap_actions
183-
184-
185159
static func _setup_properties_for_class():
186160
for _class_name in _SETTINGS_FOR_CLASS_PROPERTY:
187161
var property_list = ClassDB.class_get_property_list(_class_name, true)
188162
var property_settings = _SETTINGS_FOR_CLASS_PROPERTY[_class_name]
189163
_add_property_definitions(_class_name, property_list, property_settings)
190164

191165

192-
static func _setup_input_block():
193-
var inputmap_actions = _get_inputmap_actions()
194-
195-
var block_definition: BlockDefinition = (
196-
BlockDefinition
197-
. new(
198-
&"is_input_actioned",
199-
"",
200-
"",
201-
"Input",
202-
Types.BlockType.VALUE,
203-
TYPE_BOOL,
204-
"Is action {action_name: STRING_NAME} {action: NIL}",
205-
"Input.is_action_{{action}}('{{action_name}}')",
206-
{"action_name": OptionData.new(inputmap_actions), "action": OptionData.new(["pressed", "just_pressed", "just_released"])},
207-
)
208-
)
209-
_catalog[block_definition.name] = block_definition
210-
211-
212166
static func setup():
213167
if _catalog:
214168
return
215169

216170
_catalog = {}
217171
_setup_definitions_from_files()
218172
_setup_properties_for_class()
219-
_setup_input_block()
220173

221174

222175
static func get_block(block_name: StringName):

0 commit comments

Comments
 (0)