BITFALL/Assets/Artists/Scripts/UX/UXMenu.cs

118 lines
3.8 KiB
C#
Raw Normal View History

2023-08-23 01:59:40 +08:00
using System;
2023-06-08 14:09:50 +08:00
using System.Collections;
using System.Collections.Generic;
2023-11-15 23:54:54 +08:00
using System.Linq;
2023-10-20 19:31:12 +08:00
using System.Security.Policy;
2023-11-15 23:54:54 +08:00
using BITFALL.Game;
2023-06-08 14:09:50 +08:00
using UnityEngine;
using UnityEngine.InputSystem;
using BITKit;
2023-11-15 23:54:54 +08:00
using BITKit.Game;
using BITKit.IO;
2024-03-05 17:34:41 +08:00
using BITKit.Mod;
2023-10-20 19:31:12 +08:00
using BITKit.SceneManagement;
2023-06-08 14:09:50 +08:00
using BITKit.UX;
2023-06-17 16:30:53 +08:00
using INetClient = BITKit.INetClient;
2023-08-23 01:59:40 +08:00
using Cysharp.Threading.Tasks;
2024-01-03 00:27:12 +08:00
using UnityEngine.InputSystem.Interactions;
2023-11-15 23:54:54 +08:00
using UnityEngine.UIElements;
2023-06-17 16:30:53 +08:00
2023-06-08 14:09:50 +08:00
namespace BITFALL.UX
{
2023-10-20 19:31:12 +08:00
public class UXMenu : UIToolKitPanel
2023-06-08 14:09:50 +08:00
{
2023-11-15 23:54:54 +08:00
[Header(Constant.Header.Services)]
[SerializeReference, SubclassSelector] private IReference[] mapTags;
2023-06-17 16:30:53 +08:00
[Header(Constant.Header.Providers)]
2023-10-20 19:31:12 +08:00
[SerializeReference, SubclassSelector] private ISceneService SceneService;
2023-06-08 14:09:50 +08:00
[Header(Constant.Header.Components)]
2023-10-20 19:31:12 +08:00
[SerializeField] private UXButton playButton;
[SerializeField] private UXButton stopButton;
[SerializeField] private UXButton exitButton;
2023-11-15 23:54:54 +08:00
[SerializeField] private UXDropdown mapDropdown;
[Header(Constant.Header.Providers)]
[SerializeReference,SubclassSelector] private IGameService gameService;
2023-06-08 14:09:50 +08:00
[Header(Constant.Header.Input)]
2023-10-20 19:31:12 +08:00
[SerializeField] private InputActionReference returnAction;
[SerializeField] private InputActionReference inventoryAction;
2023-12-15 00:08:02 +08:00
2024-01-03 00:27:12 +08:00
2023-12-15 00:08:02 +08:00
[UXBindPath("newHost-container")]
private VisualElement newHostContainer;
[UXBindPath("inGame-container")]
private VisualElement inGameContainer;
2023-06-08 14:09:50 +08:00
2023-10-20 19:31:12 +08:00
protected override void Start()
{
2024-01-03 00:27:12 +08:00
base.Start();
2023-06-08 14:09:50 +08:00
2023-10-20 19:31:12 +08:00
SceneService.OnLoadScene +=(_)=> OnConnected();
SceneService.OnUnloadScene +=(_)=>
{
Entry();
OnDisconnected();
};
2023-06-08 14:09:50 +08:00
OnDisconnected();
2023-11-15 23:54:54 +08:00
2024-03-05 17:34:41 +08:00
ModService.OnModLoaded += UpdateMapList;
ModService.OnModUnLoaded += UpdateMapList;
UpdateMapList(null);
}
private async void UpdateMapList(object _)
{
await UniTask.Delay(300);
if (destroyCancellationToken.IsCancellationRequested) return;
2023-11-15 23:54:54 +08:00
var tags = mapTags.Select(x => x.Value).ToArray();
mapDropdown.visualElement.choices = SceneService.GetScenes(tags).ToList();
mapDropdown.visualElement.RegisterValueChangedCallback(x =>
{
gameService.ExpectMap = x.newValue;
});
2023-12-15 00:08:02 +08:00
mapDropdown.visualElement.SetValueWithoutNotify(gameService.ExpectMap);
2024-03-05 17:34:41 +08:00
//BIT4Log.Log<UXMenu>($"UpdateMapList:{string.Join("\n",mapDropdown.visualElement.choices)}");
2023-06-08 14:09:50 +08:00
}
2024-01-03 00:27:12 +08:00
protected override void OnPanelEntry()
{
base.OnPanelEntry();
inputActionGroup.RegisterCallback(returnAction, OnReturn);
inputActionGroup.RegisterCallback(inventoryAction, OnReturn);
}
protected override void OnPanelExit()
{
base.OnPanelExit();
inputActionGroup.UnRegisterCallback(returnAction, OnReturn);
inputActionGroup.UnRegisterCallback(inventoryAction, OnReturn);
}
2023-06-17 16:30:53 +08:00
private void OnConnected()
2023-06-08 14:09:50 +08:00
{
2023-12-15 00:08:02 +08:00
newHostContainer.SetActive(false);
2023-10-20 19:31:12 +08:00
stopButton.SetActive(true);
exitButton.SetActive(false);
2023-12-15 00:08:02 +08:00
inGameContainer.SetActive(true);
2023-06-08 14:09:50 +08:00
}
2023-06-17 16:30:53 +08:00
private void OnDisconnected()
2023-06-08 14:09:50 +08:00
{
2023-12-15 00:08:02 +08:00
newHostContainer.SetActive(true);
2023-10-20 19:31:12 +08:00
stopButton.SetActive(false);
exitButton.SetActive(true);
2023-12-15 00:08:02 +08:00
inGameContainer.SetActive(false);
2023-06-08 14:09:50 +08:00
}
2024-01-03 00:27:12 +08:00
private static void OnReturn(InputAction.CallbackContext context)
2023-06-08 14:09:50 +08:00
{
2024-01-03 00:27:12 +08:00
if (context is {interaction:PressInteraction,performed:true})
2023-06-17 16:30:53 +08:00
{
2023-08-27 02:58:19 +08:00
UXService.Entry<UXHud>();
2023-06-17 16:30:53 +08:00
}
2023-06-08 14:09:50 +08:00
}
}
}