AxibugEmuOnline/AxibugEmuOnline.Client/Assets/Script/UI/InGameUI/InGameUI.cs

119 lines
3.2 KiB
C#
Raw Normal View History

2024-09-14 15:32:29 +08:00
using AxibugEmuOnline.Client.ClientCore;
2024-09-14 17:22:01 +08:00
using AxibugEmuOnline.Client.Event;
2024-09-14 15:32:29 +08:00
using AxibugEmuOnline.Client.Manager;
using System;
using System.Collections.Generic;
2024-09-14 17:22:01 +08:00
using VirtualNes.Core;
namespace AxibugEmuOnline.Client
{
public class InGameUI : CommandExecuter
{
public static InGameUI Instance { get; private set; }
public RomFile RomFile => m_rom;
public override bool Enable => gameObject.activeInHierarchy;
2024-09-14 15:32:29 +08:00
/// <summary> ָʾ<D6B8><CABE><EFBFBD><EFBFBD>Ϸʵ<CFB7><CAB5><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ </summary>
2024-09-14 17:22:01 +08:00
public bool IsOnline => App.roomMgr.RoomState > AxibugProtobuf.RoomGameState.OnlyHost;
2024-09-14 15:32:29 +08:00
private RomFile m_rom;
private object m_core;
2024-09-13 17:39:48 +08:00
private object m_state;
2024-09-14 15:32:29 +08:00
private List<OptionMenu> menus = new List<OptionMenu>();
2024-09-14 17:22:01 +08:00
private StepPerformer m_stepPerformer;
protected override void Awake()
{
Instance = this;
gameObject.SetActiveEx(false);
2024-09-14 17:22:01 +08:00
m_stepPerformer = new StepPerformer(this);
2024-09-14 15:32:29 +08:00
menus.Add(new InGameUI_SaveState(this));
menus.Add(new InGameUI_LoadState(this));
menus.Add(new InGameUI_QuitGame(this));
2024-09-14 17:22:01 +08:00
base.Awake();
}
private void OnDestroy()
{
Instance = null;
}
2024-09-13 17:39:48 +08:00
/// <summary>
/// <20><>ȡģ<C8A1><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
/// </summary>
/// <typeparam name="T">ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></typeparam>
public T GetCore<T>() => (T)m_core;
2024-09-13 17:39:48 +08:00
/// <summary> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٿ<EFBFBD><D9BF><EFBFBD> </summary>
public void SaveQuickState(object state)
{
m_state = state;
}
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ٿ<EFBFBD><D9BF><EFBFBD>
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public bool GetQuickState<T>(out T state)
{
state = default(T);
if (m_state is T)
{
state = (T)m_state;
return true;
}
else
{
return false;
}
}
public void Show(RomFile currentRom, object core)
{
CommandDispatcher.Instance.RegistController(this);
m_rom = currentRom;
m_core = core;
2024-09-14 17:22:01 +08:00
m_stepPerformer.Reset();
2024-09-13 17:39:48 +08:00
2024-09-14 15:56:15 +08:00
if (App.user.IsLoggedIn)
{
App.roomMgr.SendCreateRoom(m_rom.ID, 0, m_rom.Hash);
}
2024-09-14 17:22:01 +08:00
Eventer.Instance.RegisterEvent<int>(EEvent.OnRoomWaitStepChange, OnServerStepUpdate);
gameObject.SetActiveEx(true);
}
2024-09-14 17:22:01 +08:00
private void OnServerStepUpdate(int step)
{
m_stepPerformer.Perform(step);
}
public void Hide()
{
CommandDispatcher.Instance.UnRegistController(this);
gameObject.SetActiveEx(false);
}
protected override void OnCmdOptionMenu()
{
2024-09-14 15:32:29 +08:00
OptionUI.Instance.Pop(menus);
}
public void QuitGame()
{
2024-09-14 17:22:01 +08:00
Eventer.Instance.UnregisterEvent<int>(EEvent.OnRoomWaitStepChange, OnServerStepUpdate);
2024-09-14 15:56:15 +08:00
App.roomMgr.SendLeavnRoom();
2024-09-14 15:32:29 +08:00
App.emu.StopGame();
}
}
}