using System.Linq; using Godot; namespace Cirno.Scripts.UI; public partial class KeyRemappingItem : HBoxContainer { public StringName KeyId { get; set; } public StringName KeyName { get; set; } [Export] public Label NameLabel { get; private set; } [Export] public Label InputLabel { get; private set; } private bool _active = false; public override void _Ready() { NameLabel.Text = KeyName; var actions = InputMap.GetActions(); var action = actions.FirstOrDefault(x => x == KeyId); var events = InputMap.ActionGetEvents(action); InputLabel.Text = string.Join(",", events.Select(x => x.AsText())); } public void StartRemap() { _active = true; } public override void _Input(InputEvent e) { if (!_active) return; if (e is InputEventKey keyEvent && keyEvent.Pressed) { GD.Print(keyEvent.Keycode); InputLabel.Text = keyEvent.Keycode.ToString(); _active = false; } } }