generated from SGDA/GodotExampleProject
feat: made sure the aspect ration fit a pixel art game and added useful addons
This commit is contained in:
@ -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)
|
||||
|
@ -0,0 +1 @@
|
||||
uid://dp8xv83uhxpjo
|
@ -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"
|
Reference in New Issue
Block a user