using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Security.Policy; using BITFALL.Game; using UnityEngine; using UnityEngine.InputSystem; using BITKit; using BITKit.Game; using BITKit.IO; using BITKit.SceneManagement; using BITKit.UX; using INetClient = BITKit.INetClient; using Cysharp.Threading.Tasks; using UnityEngine.UIElements; namespace BITFALL.UX { public class UXMenu : UIToolKitPanel { [Header(Constant.Header.Services)] [SerializeReference, SubclassSelector] private IReference[] mapTags; [Header(Constant.Header.Providers)] [SerializeReference, SubclassSelector] private ISceneService SceneService; [Header(Constant.Header.Components)] [SerializeField] private GameObject menuObject; [SerializeField] private UXButton playButton; [SerializeField] private UXButton stopButton; [SerializeField] private UXButton exitButton; [SerializeField] private UXDropdown mapDropdown; [Header(Constant.Header.Providers)] [SerializeReference,SubclassSelector] private IGameService gameService; [Header(Constant.Header.Input)] [SerializeField] private InputActionReference returnAction; [SerializeField] private InputActionReference inventoryAction; [UXBindPath("newHost-container")] private VisualElement newHostContainer; [UXBindPath("inGame-container")] private VisualElement inGameContainer; protected override void Start() { BITKit.UX.UXUtils.Inject(this); inputActionGroup.RegisterCallback(returnAction, OnReturn); inputActionGroup.RegisterCallback(inventoryAction, OnReturn); SceneService.OnLoadScene +=(_)=> OnConnected(); SceneService.OnUnloadScene +=(_)=> { Entry(); OnDisconnected(); }; OnDisconnected(); var tags = mapTags.Select(x => x.Value).ToArray(); mapDropdown.visualElement.choices = SceneService.GetScenes(tags).ToList(); mapDropdown.visualElement.RegisterValueChangedCallback(x => { gameService.ExpectMap = x.newValue; }); mapDropdown.visualElement.SetValueWithoutNotify(gameService.ExpectMap); } private void OnConnected() { menuObject.SetActive(false); newHostContainer.SetActive(false); stopButton.SetActive(true); exitButton.SetActive(false); inGameContainer.SetActive(true); } private void OnDisconnected() { menuObject.SetActive(true); newHostContainer.SetActive(true); stopButton.SetActive(false); exitButton.SetActive(true); inGameContainer.SetActive(false); } private void OnReturn(InputAction.CallbackContext context) { if (context.ReadValueAsButton()) { UXService.Entry(); } } } }