玩家自行启动游戏时,如果还未登录成功,将会在登录成功后自动创建房间(从加入房间的入口创建游戏时不会触发这个逻辑)

This commit is contained in:
ALIENJACK\alien 2024-12-13 17:52:23 +08:00
parent 839a711637
commit 7123103fd6

View File

@ -1,5 +1,6 @@
using AxibugEmuOnline.Client.ClientCore;
using AxibugEmuOnline.Client.ClientCore;
using AxibugEmuOnline.Client.Event;
using System;
using System.Collections.Generic;
namespace AxibugEmuOnline.Client
@ -11,7 +12,7 @@ namespace AxibugEmuOnline.Client
public RomFile RomFile => m_rom;
public override bool Enable => gameObject.activeInHierarchy;
/// <summary> 指示该游戏实例是否处于联机模式 </summary>
/// <summary> 指示该游戏实例是否处于联机模式 </summary>
public bool IsNetPlay
{
get
@ -53,13 +54,13 @@ namespace AxibugEmuOnline.Client
base.OnDestroy();
}
/// <summary> 保存快速快照 </summary>
/// <summary> 保存快速快照 </summary>
public void SaveQuickState(object state)
{
m_state = state;
}
/// <summary>
/// 读取快速快照
/// 读取快速快照
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
@ -68,21 +69,31 @@ namespace AxibugEmuOnline.Client
return m_state;
}
private bool m_delayCreateRoom;
public void Show(RomFile currentRom, IEmuCore core)
{
m_state = null;//清空游戏快照
m_delayCreateRoom = false;
m_state = null;//清空游戏快照
CommandDispatcher.Instance.RegistController(this);
m_rom = currentRom;
Core = core;
m_stepPerformer.Reset();
if (App.user.IsLoggedIn && !App.roomMgr.InRoom)
if (!App.roomMgr.InRoom)
{
if (App.user.IsLoggedIn)
App.roomMgr.SendCreateRoom(m_rom.ID, 0, m_rom.Hash);
else
{
m_delayCreateRoom = true;
OverlayManager.PopTip("稍后将会建立房间");
}
}
Eventer.Instance.RegisterEvent(EEvent.OnLoginSucceed, OnLoggedIn);
Eventer.Instance.RegisterEvent<int>(EEvent.OnRoomWaitStepChange, OnServerStepUpdate);
Eventer.Instance.RegisterEvent(EEvent.OnMineJoinRoom, OnRoomJoin);
gameObject.SetActiveEx(true);
@ -97,6 +108,19 @@ namespace AxibugEmuOnline.Client
}
}
private void OnRoomJoin()
{
m_delayCreateRoom = false;
}
private void OnLoggedIn()
{
if (m_delayCreateRoom)
{
App.roomMgr.SendCreateRoom(m_rom.ID, 0, m_rom.Hash);
}
}
private void OnServerStepUpdate(int step)
{
m_stepPerformer.Perform(step);
@ -114,23 +138,21 @@ namespace AxibugEmuOnline.Client
{
OverlayManager.PopSideBar(menus, 0, PopMenu_OnHide);
if (!IsNetPlay)//单人模式暂停模拟器
{
if (!IsNetPlay)//单人模式暂停模拟器
Core.Pause();
}
}
//菜单关闭时候
//菜单关闭时候
private void PopMenu_OnHide()
{
if (!IsNetPlay)//单人模式恢复模拟器的暂停
if (!IsNetPlay)//单人模式恢复模拟器的暂停
Core.Resume();
}
public void QuitGame()
{
Eventer.Instance.UnregisterEvent<int>(EEvent.OnRoomWaitStepChange, OnServerStepUpdate);
Eventer.Instance.UnregisterEvent(EEvent.OnLoginSucceed, OnLoggedIn);
Eventer.Instance.UnregisterEvent(EEvent.OnMineJoinRoom, OnRoomJoin);
App.roomMgr.SendLeavnRoom();
App.emu.StopGame();
}