using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.InputSystem; using BITKit; using BITKit.UX; using INetClient = BITKit.INetClient; using Cysharp.Threading.Tasks; namespace BITFALL.UX { public class Menu : UIToolKitPanel { [Header(Constant.Header.Providers)] [SerializeReference, SubclassSelector] private INetClient netClient; [Header(Constant.Header.Components)] public UXButton connectButton; public UXButton localhostButton; public UXButton disconnectButton; public UXButton returnButton; public UXImage backgroundImage; [Header(Constant.Header.Input)] public InputActionReference returnAction; public InputActionGroup inputActionGroup; protected override void Awake() { base.Awake(); netClient.OnConnected += OnConnected; netClient.OnConnectedFailed += OnConnectFailed; netClient.OnDisconnected += OnConnectFailed; inputActionGroup.RegisterCallback(returnAction, OnReturn); OnDisconnected(); } private void OnDestroy() { netClient.OnConnected -= OnConnected; netClient.OnConnectedFailed -= OnConnectFailed; netClient.OnDisconnected -= OnConnectFailed; } protected override void OnEntryOrExit(bool isEntry) { inputActionGroup.allowInput.SetElements(this, isEntry); } public void StartIntelnetConnect() { netClient.Connect(); } public void StartLocalConnect() { netClient.Connect(); } public void Disconnect() { netClient.Disconnect(); } private void OnConnected() { connectButton.SetEnabled(true); localhostButton.SetEnabled(true); returnButton.SetActive(true); connectButton.SetActive(false); localhostButton.SetActive(false); disconnectButton.SetActive(true); backgroundImage.SetActive(false); } private void OnConnectFailed() { UXService.Entry(); connectButton.SetEnabled(true); localhostButton.SetEnabled(true); OnDisconnected(); } private void OnStartConnect() { connectButton.SetEnabled(false); localhostButton.SetEnabled(false); } private void OnDisconnected() { returnButton.SetActive(false); connectButton.SetActive(true); localhostButton.SetActive(true); disconnectButton.SetActive(false); backgroundImage.SetActive(true); } private void OnDisconnect() { UXService.Entry(); OnDisconnected(); } private void OnReturn(InputAction.CallbackContext context) { if (!netClient.IsConnected) return; if (context.ReadValueAsButton()) { UXService.Entry(); } } } }