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

109 lines
3.2 KiB
C#

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)]
[SerializeField, SerializeReference, SubclassSelector]
private INetClient netClient;
[SerializeField, SerializeReference, SubclassSelector]
[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<Menu>();
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<Menu>();
OnDisconnected();
}
private void OnReturn(InputAction.CallbackContext context)
{
if (!netClient.IsConnected) return;
if (context.ReadValueAsButton())
{
UXService.Entry<HUD>();
}
}
}
}