gd: added input addon

This commit is contained in:
2025-05-27 19:20:46 +02:00
parent d8a1604af9
commit c8d8c7ec25
683 changed files with 21608 additions and 2 deletions

View File

@ -0,0 +1,140 @@
@tool
extends MarginContainer
const ActionSlot = preload("../action_slot/action_slot.gd")
const Utils = preload("../utils.gd")
const ArrayEdit = preload("../array_edit/array_edit.gd")
signal delete_requested()
signal duplicate_requested()
@export var input_mapping_editor_scene:PackedScene
@onready var _action_slot:ActionSlot = %ActionSlot
@onready var _input_mappings:ArrayEdit = %InputMappings
const ClassScanner = preload("../class_scanner.gd")
var _plugin:EditorPlugin
var _scanner:ClassScanner
var _undo_redo:EditorUndoRedoManager
var _mapping:GUIDEActionMapping
func _ready():
_action_slot.action_changed.connect(_on_action_changed)
_input_mappings.delete_requested.connect(_on_input_mapping_delete_requested)
_input_mappings.add_requested.connect(_on_input_mappings_add_requested)
_input_mappings.move_requested.connect(_on_input_mappings_move_requested)
_input_mappings.clear_requested.connect(_on_input_mappings_clear_requested)
_input_mappings.duplicate_requested.connect(_on_input_mappings_duplicate_requested)
_input_mappings.collapse_state_changed.connect(_on_input_mappings_collapse_state_changed)
func initialize(plugin:EditorPlugin, scanner:ClassScanner):
_plugin = plugin
_scanner = scanner
_undo_redo = _plugin.get_undo_redo()
func edit(mapping:GUIDEActionMapping):
assert(_mapping == null)
_mapping = mapping
_mapping.changed.connect(_update)
_update()
func _update():
_input_mappings.clear()
_action_slot.action = _mapping.action
for i in _mapping.input_mappings.size():
var input_mapping = _mapping.input_mappings[i]
var input_mapping_editor = input_mapping_editor_scene.instantiate()
_input_mappings.add_item(input_mapping_editor)
input_mapping_editor.initialize(_plugin, _scanner)
input_mapping_editor.edit(input_mapping)
_input_mappings.collapsed = _mapping.get_meta("_guide_input_mappings_collapsed", false)
func _on_action_changed():
_undo_redo.create_action("Change action")
_undo_redo.add_do_property(_mapping, "action", _action_slot.action)
_undo_redo.add_undo_property(_mapping, "action", _mapping.action)
_undo_redo.commit_action()
func _on_input_mappings_add_requested():
var values = _mapping.input_mappings.duplicate()
var new_mapping = GUIDEInputMapping.new()
values.append(new_mapping)
_undo_redo.create_action("Add input mapping")
_undo_redo.add_do_property(_mapping, "input_mappings", values)
_undo_redo.add_undo_property(_mapping, "input_mappings", _mapping.input_mappings)
_undo_redo.commit_action()
func _on_input_mapping_delete_requested(index:int):
var values = _mapping.input_mappings.duplicate()
values.remove_at(index)
_undo_redo.create_action("Delete input mapping")
_undo_redo.add_do_property(_mapping, "input_mappings", values)
_undo_redo.add_undo_property(_mapping, "input_mappings", _mapping.input_mappings)
_undo_redo.commit_action()
func _on_input_mappings_move_requested(from:int, to:int):
var values = _mapping.input_mappings.duplicate()
var mapping = values[from]
values.remove_at(from)
if from < to:
to -= 1
values.insert(to, mapping)
_undo_redo.create_action("Move input mapping")
_undo_redo.add_do_property(_mapping, "input_mappings", values)
_undo_redo.add_undo_property(_mapping, "input_mappings", _mapping.input_mappings)
_undo_redo.commit_action()
func _on_input_mappings_clear_requested():
var values:Array[GUIDEInputMapping] = []
_undo_redo.create_action("Clear input mappings")
_undo_redo.add_do_property(_mapping, "input_mappings", values)
_undo_redo.add_undo_property(_mapping, "input_mappings", _mapping.input_mappings)
_undo_redo.commit_action()
func _on_input_mappings_duplicate_requested(index:int):
var values = _mapping.input_mappings.duplicate()
var copy:GUIDEInputMapping = values[index].duplicate()
copy.input = Utils.duplicate_if_inline(copy.input)
for i in copy.modifiers.size():
copy.modifiers[i] = Utils.duplicate_if_inline(copy.modifiers[i])
for i in copy.triggers.size():
copy.triggers[i] = Utils.duplicate_if_inline(copy.triggers[i])
# insert copy after original
values.insert(index+1, copy)
_undo_redo.create_action("Duplicate input mapping")
_undo_redo.add_do_property(_mapping, "input_mappings", values)
_undo_redo.add_undo_property(_mapping, "input_mappings", _mapping.input_mappings)
_undo_redo.commit_action()
func _on_input_mappings_collapse_state_changed(new_state:bool):
_mapping.set_meta("_guide_input_mappings_collapsed", new_state)

View File

@ -0,0 +1 @@
uid://dp8xv83uhxpjo

View File

@ -0,0 +1,43 @@
[gd_scene load_steps=5 format=3 uid="uid://361aipcef24h"]
[ext_resource type="Script" path="res://addons/guide/editor/action_mapping_editor/action_mapping_editor.gd" id="1_2k0pi"]
[ext_resource type="PackedScene" uid="uid://du4x7ng6ntuk4" path="res://addons/guide/editor/action_slot/action_slot.tscn" id="1_hguf2"]
[ext_resource type="PackedScene" uid="uid://c323mdijdhktg" path="res://addons/guide/editor/input_mapping_editor/input_mapping_editor.tscn" id="2_a8nbp"]
[ext_resource type="PackedScene" uid="uid://cly0ff32fvpb2" path="res://addons/guide/editor/array_edit/array_edit.tscn" id="4_ehr5j"]
[node name="ActionMappingEditor" type="MarginContainer"]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
size_flags_vertical = 0
theme_override_constants/margin_bottom = 5
script = ExtResource("1_2k0pi")
input_mapping_editor_scene = ExtResource("2_a8nbp")
[node name="HBoxContainer" type="HBoxContainer" parent="."]
layout_mode = 2
size_flags_vertical = 0
[node name="HBoxContainer" type="HBoxContainer" parent="HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 0
[node name="ActionSlot" parent="HBoxContainer/HBoxContainer" instance=ExtResource("1_hguf2")]
unique_name_in_owner = true
layout_mode = 2
[node name="VBoxContainer" type="VBoxContainer" parent="HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 0
size_flags_stretch_ratio = 4.0
[node name="InputMappings" parent="HBoxContainer/VBoxContainer" instance=ExtResource("4_ehr5j")]
unique_name_in_owner = true
layout_mode = 2
title = "Input mappings"
add_tooltip = "Add input mapping"
clear_tooltip = "Clear input mappings"