Skip to content

Commit d02b932

Browse files
authored
Merge pull request #222 from endlessm/input-block-extension
Add is_input_actioned.tres
2 parents bffd9b9 + 77d67d5 commit d02b932

File tree

3 files changed

+62
-48
lines changed

3 files changed

+62
-48
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 specified input action has been pressed or released."
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 & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
extends Object
22

33
const BlockDefinition = preload("res://addons/block_code/code_generation/block_definition.gd")
4-
const OptionData = preload("res://addons/block_code/code_generation/option_data.gd")
54
const Types = preload("res://addons/block_code/types/types.gd")
65
const Util = preload("res://addons/block_code/code_generation/util.gd")
76
const VariableDefinition = preload("res://addons/block_code/code_generation/variable_definition.gd")
@@ -153,67 +152,20 @@ static func _add_property_definitions(_class_name: String, property_list: Array[
153152
_catalog[block_definition.name] = block_definition
154153

155154

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

188161

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

213166
_catalog = {}
214167
_setup_definitions_from_files()
215168
_setup_properties_for_class()
216-
_setup_input_block()
217169

218170

219171
static func get_block(block_name: StringName):

0 commit comments

Comments
 (0)