using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Threading; using BITKit; using BITKit.Entities; using BITKit.StateMachine; using BITKit.UX; using Cysharp.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Net.Project.B.Inventory; using Net.Project.B.Item; using Project.B.Entities; using Project.B.Item; using Project.B.Player; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.InputSystem.XR.Haptics; using UnityEngine.UIElements; namespace Net.Project.B.PDA { [Serializable] public struct AppControllerClass : IScriptableControllerClass { } public class UnityPDAService:UIToolKitPanel, IPDAService { private readonly IServiceProvider _serviceProvider; private readonly IManagedItemService _managedItemService; private readonly IUXKeyMap _uxKeyMap; protected override string DocumentPath => "ui_pda"; public override bool AllowCursor => true; public override bool CloseWhenClickOutside => true; [UXBindPath("pda-container")] private VisualElement _pdaContainer; [UXBindPath("dock-container")] private VisualElement _dockContainer; [UXBindPath("app-container")] private VisualElement _appContainer; [UXBindPath("home-button")] private Button _homeButton; [Inject] private IPlayerWeaponInventory _playerWeaponInventory; [Inject] private IPlayerInventory _playerInventory; private readonly HashSet _pdaItems = new(); private VisualTreeAsset _appTemplate; private readonly Dictionary _routes = new(); private CancellationTokenSource _operatorCts = new(); private readonly ValidHandle _operatorHandle = new(); private readonly HashSet _initiated = new(); private readonly Dictionary _appLaunchers = new(); private IAppClass _currentAppClass; private string _currentUrl; public UnityPDAService(IUXService uxService, IPlayerFactory playerFactory, IEntitiesService entitiesService, IManagedItemService managedItemService, IUXKeyMap uxKeyMap, IServiceProvider serviceProvider) : base(uxService) { _managedItemService = managedItemService; _uxKeyMap = uxKeyMap; _serviceProvider = serviceProvider; playerFactory.OnEntityCreated += OnEntityCreated; foreach (var scriptableItem in entitiesService.QueryComponents()) { if (scriptableItem.ControllerClass is AppControllerClass) { _pdaItems.Add(scriptableItem.Id); } } OnInitiatedAsync += InitiatedAsync; foreach (var appClass in _serviceProvider.GetServices()) { foreach (var path in appClass.Routes) { _routes.Add(path,appClass); } } } private UniTask InitiatedAsync() { _appTemplate = _appContainer.Q().templateSource; _appContainer.Clear(); foreach (var appClass in _serviceProvider.GetServices()) { var app = (IApp)Activator.CreateInstance(appClass.AppType); var container = _appContainer.Create(_appTemplate); container.Get