summaryrefslogtreecommitdiff
path: root/addons/gdUnit4/src/core/command/GdUnitBaseCommand.gd
diff options
context:
space:
mode:
authorradiohotline <radoihotline@disroot.rg>2026-08-25 16:33:56 +0300
committerradiohotline <radoihotline@disroot.rg>2026-08-25 16:33:56 +0300
commita89e744ed0e8c759caf041a580112365bbfe4303 (patch)
treedd61e320904176995727e86a857d00c90d4933ba /addons/gdUnit4/src/core/command/GdUnitBaseCommand.gd
parent6d53d8cac78250dc888aa49d5f9d4175c6652feb (diff)
escoria updateHEADmain
Diffstat (limited to 'addons/gdUnit4/src/core/command/GdUnitBaseCommand.gd')
-rw-r--r--addons/gdUnit4/src/core/command/GdUnitBaseCommand.gd64
1 files changed, 64 insertions, 0 deletions
diff --git a/addons/gdUnit4/src/core/command/GdUnitBaseCommand.gd b/addons/gdUnit4/src/core/command/GdUnitBaseCommand.gd
new file mode 100644
index 0000000..f5c5ffb
--- /dev/null
+++ b/addons/gdUnit4/src/core/command/GdUnitBaseCommand.gd
@@ -0,0 +1,64 @@
+@abstract class_name GdUnitBaseCommand
+extends Node
+
+
+var id: String
+var icon: Texture2D
+var shortcut: Shortcut = null
+var shortcut_type: GdUnitShortcut.ShortCut
+
+
+func _init(p_id: String, p_shortcut: GdUnitShortcut.ShortCut = GdUnitShortcut.ShortCut.NONE) -> void:
+ id = p_id
+ shortcut_type = p_shortcut
+ _set_shortcut()
+
+
+func _shortcut_input(event: InputEvent) -> void:
+ if is_running():
+ return
+
+ if shortcut and shortcut.matches_event(event):
+ execute()
+ get_viewport().set_input_as_handled()
+
+
+func update_shortcut() -> void:
+ _set_shortcut()
+
+
+func _set_shortcut() -> void:
+ if shortcut_type == GdUnitShortcut.ShortCut.NONE:
+ return
+
+ var property_name := GdUnitShortcut.as_property(shortcut_type)
+ var property := GdUnitSettings.get_property(property_name)
+ var keys := GdUnitShortcut.default_keys(shortcut_type)
+ if property != null:
+ keys = property.value()
+ var inputEvent := _create_shortcut_input_even(keys)
+
+ shortcut = Shortcut.new()
+ shortcut.set_events([inputEvent])
+
+
+func _create_shortcut_input_even(key_codes: PackedInt32Array) -> InputEventKey:
+ var inputEvent := InputEventKey.new()
+ inputEvent.pressed = true
+ for key_code in key_codes:
+ match key_code:
+ KEY_ALT:
+ inputEvent.alt_pressed = true
+ KEY_SHIFT:
+ inputEvent.shift_pressed = true
+ KEY_CTRL:
+ inputEvent.ctrl_pressed = true
+ _:
+ inputEvent.keycode = key_code as Key
+ inputEvent.physical_keycode = key_code as Key
+ return inputEvent
+
+
+@abstract func is_running() -> bool
+
+@abstract func execute(...parameters: Array) -> void