using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using BITFALL.Entities.Equipment; using BITFALL.Entities.Inventory; using BITFALL.Guns.Modify; using BITFALL.Items; using BITFALL.Player.Equip; using BITKit; using BITKit.Entities; using BITKit.Entities.Player; using BITKit.UX; using UnityEngine; using UnityEngine.UIElements; namespace BITFALL.UX { public class UXGunModify : MonoBehaviour { [SerializeReference, SubclassSelector] private IPlayerService playerService; private VisualElement _container => UXInventoryInspector.Container; [Inject] private IEntityInventory _inventory; [Inject] private IEntityEquipment _equipment; [Inject] private IEquipService _equipService; [Inject] private IUXPopup _popup; private void Start() { UXInventoryInspector.OnInspect += OnInspect; playerService.OnPlayerInitialized += OnPlayerInitialized; destroyCancellationToken.Register(() => { UXInventoryInspector.OnInspect -= OnInspect; playerService.OnPlayerInitialized -= OnPlayerInitialized; }); } private void OnPlayerInitialized(Entity obj) { obj.Inject(this); } private void OnInspect(IBasicItem obj) { if (_inventory is null) { Debug.LogWarning("Inventory is null"); return; } if (obj is null) return; var assetable = obj.GetAssetable(); if (obj.TryGetProperty(out var modify) is false) return; var playerItems = _inventory.GetItems(); foreach (var pair in modify.Modifies) { var container = _container.Create(); var dropdown = container.Create(); container.style.flexDirection = FlexDirection.Row; dropdown.style.flexGrow = 1; dropdown.label = pair.Key.GetType().Name; if (pair.Value is AssetableItem modifyItem) { dropdown.SetValueWithoutNotify(modifyItem.Name); } if (pair.Value is not null) { dropdown.SetEnabled(false); var button = container.Create