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

96 lines
3.1 KiB
C#

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<UXHud>();
}
}
}
}