using System; using System.Collections; using System.Collections.Generic; using BITFALL.Hotkey; using BITKit; using BITKit.Entities; using BITKit.Entities.Player; using BITKit.IData; using BITKit.Selection; using BITKit.UX; using MyNamespace; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Interactions; using UnityEngine.UIElements; namespace BITFALL.UX { public class UxPanelWorldHotkeyCollection : UXPanelBase { [SerializeField] private InputActionReference[] returnActions; [SerializeField] private VisualTreeAsset commandTemplate; [SerializeField] private UxPanelDataInspector inspector; [Inject] private ISelector _selector; [UXBindPath("commands-container")] private VisualElement _commandContainer; protected override void OnPlayerInitialized(Entity obj) { base.OnPlayerInitialized(obj); _selector.OnActive+=OnActive; } protected override void OnPanelEntry() { base.OnPanelEntry(); foreach (var action in returnActions) { inputActionGroup.RegisterCallback(action, OnReturn); } } private void OnReturn(InputAction.CallbackContext obj) { if (obj is not { interaction: PressInteraction, performed: true }) return; OnReturn(); } protected override void OnReturn() { UXService.Entry(); } protected override void OnPanelExit() { base.OnPanelExit(); foreach (var action in returnActions) { inputActionGroup.UnRegisterCallback(action, OnReturn); } } private void OnActive(ISelectable obj) { if (obj.Transform.TryGetComponent(out var hotkeyCollection) is false) return; Entry(); _commandContainer.Clear(); foreach (var hotkey in hotkeyCollection.Hotkeys) { var instance =new UXContainer(_commandContainer.Create(commandTemplate)) ; if (hotkey.OnPerform is null && hotkey.Data is IBindableData bindableData) { instance.button.clicked += () => inspector.Inspect(bindableData.Data); } else { instance.button.clicked += hotkey.OnPerform; } instance.button.text = hotkey.Name; } } } }