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

108 lines
3.1 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;
using UnityEngine;
using UnityEngine.InputSystem;
using BITKit;
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;
2023-06-17 16:30:53 +08:00
2023-06-08 14:09:50 +08:00
namespace BITFALL.UX
{
2023-08-23 01:59:40 +08:00
public class Menu : UIToolKitPanel
2023-06-08 14:09:50 +08:00
{
2023-06-17 16:30:53 +08:00
[Header(Constant.Header.Providers)]
2023-08-27 02:58:19 +08:00
[SerializeReference, SubclassSelector]
2023-06-17 16:30:53 +08:00
private INetClient netClient;
2023-06-08 14:09:50 +08:00
[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;
2023-08-23 01:59:40 +08:00
protected override void Awake()
2023-06-08 14:09:50 +08:00
{
2023-08-23 01:59:40 +08:00
base.Awake();
netClient.OnConnected += OnConnected;
netClient.OnConnectedFailed += OnConnectFailed;
netClient.OnDisconnected += OnConnectFailed;
2023-06-08 14:09:50 +08:00
inputActionGroup.RegisterCallback(returnAction, OnReturn);
OnDisconnected();
}
2023-08-23 01:59:40 +08:00
private void OnDestroy()
{
netClient.OnConnected -= OnConnected;
netClient.OnConnectedFailed -= OnConnectFailed;
netClient.OnDisconnected -= OnConnectFailed;
}
protected override void OnEntryOrExit(bool isEntry)
2023-06-08 14:09:50 +08:00
{
2023-08-23 01:59:40 +08:00
inputActionGroup.allowInput.SetElements(this, isEntry);
2023-06-08 14:09:50 +08:00
}
public void StartIntelnetConnect()
{
2023-06-17 16:30:53 +08:00
netClient.Connect();
2023-06-08 14:09:50 +08:00
}
public void StartLocalConnect()
{
2023-08-23 01:59:40 +08:00
netClient.Connect();
2023-06-08 14:09:50 +08:00
}
public void Disconnect()
{
2023-06-17 16:30:53 +08:00
netClient.Disconnect();
2023-06-08 14:09:50 +08:00
}
2023-06-17 16:30:53 +08:00
private void OnConnected()
2023-06-08 14:09:50 +08:00
{
connectButton.SetEnabled(true);
localhostButton.SetEnabled(true);
returnButton.SetActive(true);
connectButton.SetActive(false);
localhostButton.SetActive(false);
disconnectButton.SetActive(true);
backgroundImage.SetActive(false);
}
2023-06-17 16:30:53 +08:00
private void OnConnectFailed()
2023-06-08 14:09:50 +08:00
{
2023-08-23 01:59:40 +08:00
UXService.Entry<Menu>();
2023-06-08 14:09:50 +08:00
connectButton.SetEnabled(true);
localhostButton.SetEnabled(true);
OnDisconnected();
}
2023-06-17 16:30:53 +08:00
private void OnStartConnect()
2023-06-08 14:09:50 +08:00
{
connectButton.SetEnabled(false);
localhostButton.SetEnabled(false);
}
2023-06-17 16:30:53 +08:00
private void OnDisconnected()
2023-06-08 14:09:50 +08:00
{
returnButton.SetActive(false);
connectButton.SetActive(true);
localhostButton.SetActive(true);
disconnectButton.SetActive(false);
backgroundImage.SetActive(true);
}
2023-06-17 16:30:53 +08:00
private void OnDisconnect()
2023-06-08 14:09:50 +08:00
{
2023-08-23 01:59:40 +08:00
UXService.Entry<Menu>();
2023-06-08 14:09:50 +08:00
OnDisconnected();
}
2023-06-17 16:30:53 +08:00
private void OnReturn(InputAction.CallbackContext context)
2023-06-08 14:09:50 +08:00
{
2023-06-17 16:30:53 +08:00
if (!netClient.IsConnected) return;
if (context.ReadValueAsButton())
{
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
}
}
}