feat(battle-engine): M1 auto-copy closure (782 battle-logic files)
Compile-driven bulk-copy loop (tools/engine-port/m1_copy_loop.py) pulled the precise reference closure of the battle-core roots, stopping at the classify god-object/View-VFX-UI boundary. 782 files; no re-explosion (M0 had estimated ~order 1000). Residual frontier = 52 shim-classified + 80 external (Unity/BCL) types to author next.
This commit is contained in:
905
SVSim.BattleEngine/Engine/Matching.cs
Normal file
905
SVSim.BattleEngine/Engine/Matching.cs
Normal file
@@ -0,0 +1,905 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Cute;
|
||||
using UnityEngine;
|
||||
using Wizard;
|
||||
using Wizard.ErrorDialog;
|
||||
using Wizard.RoomMatch;
|
||||
|
||||
public class Matching : MatchingBase
|
||||
{
|
||||
public enum DoMatchingResult
|
||||
{
|
||||
NONE = 0,
|
||||
RC_BATTLE_MATCHING_ILLEGAL = 3001,
|
||||
RC_BATTLE_MATCHING_RETRY = 3002,
|
||||
RC_BATTLE_MATCHING_WAITING = 3003,
|
||||
RC_BATTLE_MATCHING_SUCCEEDED = 3004,
|
||||
RC_BATTLE_MATCHING_RETRY_PERIOD_ERROR = 3005,
|
||||
RC_BATTLE_MATCHING_INIT = 3006,
|
||||
RC_BATTLE_MATCHING_SUCCEEDED_OWNER = 3007,
|
||||
COLOSSEUM_BATTLE_MATCHING_RETRY = 3008,
|
||||
RC_BATTLE_MATCHING_IN_BATTLE_PHASE = 3009,
|
||||
AI_BATTLE_MATCHING_SUCCEEDED = 3011,
|
||||
COMPETITION_BATTLE_MATCHING_RETRY = 3012,
|
||||
RC_BATTLE_MATCHING_NOT_JOINED_GATHERING = 5304,
|
||||
RC_BATTLE_MATCHING_GATHERING_BATTLE_END = 5311,
|
||||
RC_BATTLE_MATCHING_NOT_ROOM_ID = 5316,
|
||||
RC_BATTLE_MATCHING_DISABLE_ROOM_ID = 5315
|
||||
}
|
||||
|
||||
public enum DO_MATCHING_LOG
|
||||
{
|
||||
TEST,
|
||||
FIRST,
|
||||
RETRY,
|
||||
DEBUG
|
||||
}
|
||||
|
||||
private bool _isStartBattleLoad;
|
||||
|
||||
protected bool _goTitleOnTimeout;
|
||||
|
||||
protected bool _receivedMatchingTimeout;
|
||||
|
||||
protected int selectDeckID;
|
||||
|
||||
private List<Coroutine> _doMatchingAPICoroutineList = new List<Coroutine>();
|
||||
|
||||
private const int GAMESTART_MATCHING = 30;
|
||||
|
||||
public const int CONNECT_TRY_COUNT = 4;
|
||||
|
||||
private const int WAIT_AI_BATTLE_START = 4;
|
||||
|
||||
private const int LOADED_TIMEOUT_TIMER = 25;
|
||||
|
||||
protected const int CONNECT_ERROR_CODE = 12;
|
||||
|
||||
public bool isDisplayCancelButton = true;
|
||||
|
||||
public bool isOffViewAllEnable = true;
|
||||
|
||||
private bool _isStopDoMatching;
|
||||
|
||||
private bool _isDisconnect;
|
||||
|
||||
private DialogBase _errorDialog;
|
||||
|
||||
protected bool isGoBattle;
|
||||
|
||||
private List<MatchingIntervalActionBase> _matchingIntervalActionBaseList = new List<MatchingIntervalActionBase>();
|
||||
|
||||
protected MatchingRetryDomatching _retryDomatching;
|
||||
|
||||
public MatchingNetworkConnectChecker _matchingNetworkConnectCheker;
|
||||
|
||||
protected MatchingTimeChecker _matchingTimeCheker;
|
||||
|
||||
protected MatchingRetryLoaded _matchingRetryLoaded;
|
||||
|
||||
protected DoMatchingResult _doMatchingResultKind;
|
||||
|
||||
private bool _isDomatchingReceiveFirstFlag;
|
||||
|
||||
private int _doMatchingTimeoutPeriod;
|
||||
|
||||
protected string errorDialogReturnText = Wizard.Data.SystemText.Get("Battle_0414");
|
||||
|
||||
private GameObject _coroutineObject;
|
||||
|
||||
private DateTime _battleStartDate;
|
||||
|
||||
protected bool isOwner;
|
||||
|
||||
private NetworkTask _connectAPITask;
|
||||
|
||||
public bool IsStopNetWorkWithErrorCode { get; private set; }
|
||||
|
||||
public MonoBehaviour CoroutineMonoBehaviour { get; private set; }
|
||||
|
||||
private bool _isRecovery
|
||||
{
|
||||
get
|
||||
{
|
||||
if (BattleManagerBase.GetIns() == null || !BattleManagerBase.GetIns().IsRecovery)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public Matching()
|
||||
{
|
||||
_coroutineObject = new GameObject("MatchingCoroutine");
|
||||
_coroutineObject.AddComponent<MatchingCoroutine>();
|
||||
CoroutineMonoBehaviour = _coroutineObject.GetComponent<MonoBehaviour>();
|
||||
_matchingIntervalActionBaseList = new List<MatchingIntervalActionBase>();
|
||||
_retryDomatching = new MatchingRetryDomatching(this);
|
||||
MatchingRetryDomatching retryDomatching = _retryDomatching;
|
||||
retryDomatching.OnDoMatchingSuccess = (Action)Delegate.Combine(retryDomatching.OnDoMatchingSuccess, new Action(OnFinishedDoMatching));
|
||||
_matchingIntervalActionBaseList.Add(_retryDomatching);
|
||||
_matchingNetworkConnectCheker = new MatchingNetworkConnectChecker(this);
|
||||
_matchingIntervalActionBaseList.Add(_matchingNetworkConnectCheker);
|
||||
_matchingTimeCheker = new MatchingTimeChecker(this);
|
||||
_matchingIntervalActionBaseList.Add(_matchingTimeCheker);
|
||||
_matchingRetryLoaded = new MatchingRetryLoaded(this);
|
||||
_matchingIntervalActionBaseList.Add(_matchingRetryLoaded);
|
||||
if (ToolboxGame.RealTimeNetworkAgent != null)
|
||||
{
|
||||
SettingRealTimeNetworkEvent();
|
||||
ToolboxGame.RealTimeNetworkAgent.SettingMatchingClass(this);
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void FirstSetting(int classId, int selDeck, bool isRecovery = false)
|
||||
{
|
||||
RealTimeNetworkAgent.FinishTaskBase = GetBattleFinishTask();
|
||||
if (ToolboxGame.RealTimeNetworkAgent != null)
|
||||
{
|
||||
ToolboxGame.RealTimeNetworkAgent.InitCurrentMatchingStatus();
|
||||
}
|
||||
if (isRecovery)
|
||||
{
|
||||
selectDeckID = selDeck;
|
||||
StartBattleLoad();
|
||||
_matchingTimeCheker.Stop();
|
||||
return;
|
||||
}
|
||||
_isStartBattleLoad = false;
|
||||
selectDeckID = selDeck;
|
||||
isOwner = false;
|
||||
_isDomatchingReceiveFirstFlag = true;
|
||||
_isStopDoMatching = false;
|
||||
_isDisconnect = false;
|
||||
DoMatching(OnFinishedDoMatching, 1, DO_MATCHING_LOG.FIRST);
|
||||
_matchingTimeCheker.Start();
|
||||
_matchingTimeCheker.SetTimeLimitSecond(30, "do_matchingTimeOut");
|
||||
}
|
||||
|
||||
public void UpdateOffLineMatching()
|
||||
{
|
||||
if (ToolboxGame.RealTimeNetworkAgent == null)
|
||||
{
|
||||
UpdateMatching();
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateMatching()
|
||||
{
|
||||
foreach (MatchingIntervalActionBase matchingIntervalActionBase in _matchingIntervalActionBaseList)
|
||||
{
|
||||
matchingIntervalActionBase.Update();
|
||||
}
|
||||
LocalLog.SubmitAccumulateLastTraceLog();
|
||||
}
|
||||
|
||||
public void StopMatchingAction()
|
||||
{
|
||||
foreach (MatchingIntervalActionBase matchingIntervalActionBase in _matchingIntervalActionBaseList)
|
||||
{
|
||||
matchingIntervalActionBase.Stop();
|
||||
}
|
||||
}
|
||||
|
||||
public override void DoMatching(Action onFinished, int need_init, DO_MATCHING_LOG log)
|
||||
{
|
||||
}
|
||||
|
||||
protected void DoMatchingResultSetting()
|
||||
{
|
||||
_doMatchingResultKind = (DoMatchingResult)Wizard.Data.DoMatchingDetail.data.matchingState;
|
||||
_doMatchingTimeoutPeriod = Wizard.Data.DoMatchingDetail.data.timeoutPeriod;
|
||||
_retryDomatching.SettingRetryPeriod(Wizard.Data.DoMatchingDetail.data.retryPeriod);
|
||||
CustomPreference.SetNodeServerURL(Wizard.Data.DoMatchingDetail.data.nodeServerUrl);
|
||||
}
|
||||
|
||||
protected virtual void OnFinishedDoMatching()
|
||||
{
|
||||
if (_isStopDoMatching)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (_isDomatchingReceiveFirstFlag)
|
||||
{
|
||||
_matchingTimeCheker.Start();
|
||||
_matchingTimeCheker.SetTimeLimitSecond(_doMatchingTimeoutPeriod, "do_matchingReceiveTimeOut");
|
||||
_isDomatchingReceiveFirstFlag = false;
|
||||
}
|
||||
switch (_doMatchingResultKind)
|
||||
{
|
||||
case DoMatchingResult.RC_BATTLE_MATCHING_ILLEGAL:
|
||||
ErrorDialogWithReturn(Wizard.Data.SystemText.Get("Error_3001"), Wizard.Data.SystemText.Get("ErrorHeader_3001"), Wizard.Data.SystemText.Get("Common_0132"));
|
||||
break;
|
||||
case DoMatchingResult.RC_BATTLE_MATCHING_RETRY:
|
||||
case DoMatchingResult.RC_BATTLE_MATCHING_WAITING:
|
||||
case DoMatchingResult.COLOSSEUM_BATTLE_MATCHING_RETRY:
|
||||
case DoMatchingResult.COMPETITION_BATTLE_MATCHING_RETRY:
|
||||
_retryDomatching.Start();
|
||||
_retryDomatching.SetNeedInit(0);
|
||||
break;
|
||||
case DoMatchingResult.RC_BATTLE_MATCHING_SUCCEEDED:
|
||||
StopDomatchingAPICoroutine();
|
||||
_matchingNetworkConnectCheker.SetBattleId(Wizard.Data.DoMatchingDetail.data.battleId);
|
||||
StartConnect();
|
||||
isOwner = false;
|
||||
break;
|
||||
case DoMatchingResult.RC_BATTLE_MATCHING_RETRY_PERIOD_ERROR:
|
||||
ErrorDialogWithReturn(Wizard.Data.SystemText.Get("Error_3005"), Wizard.Data.SystemText.Get("ErrorHeader_3005"), Wizard.Data.SystemText.Get("Common_0132"));
|
||||
break;
|
||||
case DoMatchingResult.RC_BATTLE_MATCHING_INIT:
|
||||
_retryDomatching.Start();
|
||||
_retryDomatching.SetNeedInit(1);
|
||||
break;
|
||||
case DoMatchingResult.RC_BATTLE_MATCHING_SUCCEEDED_OWNER:
|
||||
StopDomatchingAPICoroutine();
|
||||
_retryDomatching.SettingRetryPeriod(Wizard.Data.DoMatchingDetail.data.retryPeriod);
|
||||
_matchingNetworkConnectCheker.SetBattleId(Wizard.Data.DoMatchingDetail.data.battleId);
|
||||
StartConnect();
|
||||
isOwner = true;
|
||||
break;
|
||||
case DoMatchingResult.AI_BATTLE_MATCHING_SUCCEEDED:
|
||||
StopDomatchingAPICoroutine();
|
||||
_matchingNetworkConnectCheker.SetBattleId(Wizard.Data.DoMatchingDetail.data.battleId);
|
||||
isOwner = true;
|
||||
GameMgr.GetIns().IsAINetwork = true;
|
||||
SafeStartBattleCoroutine(CreateAIBattleStart());
|
||||
break;
|
||||
case DoMatchingResult.RC_BATTLE_MATCHING_IN_BATTLE_PHASE:
|
||||
if (ToolboxGame.RealTimeNetworkAgent == null || ToolboxGame.RealTimeNetworkAgent.CurrentMatchingStatus <= RealTimeNetworkAgent.MatchingStatus.StartLoad)
|
||||
{
|
||||
ErrorDialogWithReturn(Wizard.Data.SystemText.Get("Battle_0513"), Wizard.Data.SystemText.Get("Battle_0412"), Wizard.Data.SystemText.Get("Battle_0414"));
|
||||
}
|
||||
break;
|
||||
case (DoMatchingResult)3010:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void StartConnect()
|
||||
{
|
||||
_matchingNetworkConnectCheker.Start();
|
||||
_matchingNetworkConnectCheker.OnTimeoutInitNetwork = OnTimeoutInitNetworkToTimeOutAction;
|
||||
_matchingNetworkConnectCheker.OnConnectError = ConnectError;
|
||||
}
|
||||
|
||||
private void ConnectError()
|
||||
{
|
||||
TimeOutAction("MatchingNetworkConnectCheker ConnectFailed", MatchingNetworkConnectChecker.IsOpenIpv6Dialog());
|
||||
}
|
||||
|
||||
private IEnumerator CreateAIBattleStart()
|
||||
{
|
||||
yield return new WaitForSeconds(4f);
|
||||
AIBattleStartTask task = new AIBattleStartTask();
|
||||
SafeStartBattleCoroutine(Toolbox.NetworkManager.Connect(task, delegate
|
||||
{
|
||||
if (CoroutineMonoBehaviour != null)
|
||||
{
|
||||
StartConnect();
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
private void StopDomatchingAPICoroutine()
|
||||
{
|
||||
for (int i = 0; i < _doMatchingAPICoroutineList.Count; i++)
|
||||
{
|
||||
CoroutineMonoBehaviour.StopCoroutine(_doMatchingAPICoroutineList[i]);
|
||||
_doMatchingAPICoroutineList[i] = null;
|
||||
}
|
||||
_doMatchingAPICoroutineList = new List<Coroutine>();
|
||||
Toolbox.NetworkManager.StopConnectCoroutine();
|
||||
}
|
||||
|
||||
public void MatchingInitBattle()
|
||||
{
|
||||
_matchingTimeCheker.Start();
|
||||
_matchingTimeCheker.SetTimeLimitSecond(30, "matchedStart");
|
||||
ToolboxGame.RealTimeNetworkAgent.SetCurrentMatchingStatus(RealTimeNetworkAgent.MatchingStatus.Connect);
|
||||
ToolboxGame.RealTimeNetworkAgent.OnResultCodeError = ReceiveResultCodeError;
|
||||
ToolboxGame.RealTimeNetworkAgent.EmitMsgPack(GetInitBattleUri());
|
||||
if (GameMgr.GetIns().IsAINetwork)
|
||||
{
|
||||
ToolboxGame.RealTimeNetworkAgent.SetbattleId(Wizard.Data.DoMatchingDetail.data.battleId);
|
||||
StartBattleLoad();
|
||||
isGoBattle = true;
|
||||
GotoBattle();
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual NetworkBattleDefine.NetworkBattleURI GetInitBattleUri()
|
||||
{
|
||||
return NetworkBattleDefine.NetworkBattleURI.InitBattle;
|
||||
}
|
||||
|
||||
protected override void SettingOwnerToMatchingState()
|
||||
{
|
||||
}
|
||||
|
||||
protected void StartBattleLoad()
|
||||
{
|
||||
ToolboxGame.UIManager.CloseInSceneLoadingMatching();
|
||||
LoadingInScene loadingInScene = ToolboxGame.UIManager.createInSceneLoadingBattle();
|
||||
if (!_isRecovery)
|
||||
{
|
||||
loadingInScene.ProgressObj.IsOpponentWait = true;
|
||||
}
|
||||
if (_isStartBattleLoad)
|
||||
{
|
||||
return;
|
||||
}
|
||||
DataMgr dataMgr = GameMgr.GetIns().GetDataMgr();
|
||||
_isStartBattleLoad = true;
|
||||
GameMgr.GetIns().IsNetworkBattle = true;
|
||||
dataMgr.Load();
|
||||
NetworkUserInfoData networkUserInfoData = GameMgr.GetIns().GetNetworkUserInfoData();
|
||||
if (GameMgr.GetIns().IsAINetwork)
|
||||
{
|
||||
if (!_isRecovery)
|
||||
{
|
||||
GameMgr.GetIns().GetNetworkUserInfoData().TurnState = Wizard.Data.AIBattleStartData.TurnState;
|
||||
GameMgr.GetIns().SettingSelfInfo(Wizard.Data.AIBattleStartData.Data.SelfInfo.DataDictionary, isWatchReplayRecovery: false);
|
||||
GameMgr.GetIns().SettingBattleStartSelfInfo(Wizard.Data.AIBattleStartData.Data.SelfInfo.DataDictionary);
|
||||
GameMgr.GetIns().SettingOpponentInfo(Wizard.Data.AIBattleStartData.Data.OppoInfo.DataDictionary, isWatchReplayRecovery: false);
|
||||
GameMgr.GetIns().SettingBattleStartOpponentInfo(Wizard.Data.AIBattleStartData.Data.OppoInfo.DataDictionary);
|
||||
dataMgr.SetEnemySleeveId(Convert.ToInt64(Wizard.Data.AIBattleStartData.Data.OppoInfo.DataDictionary["sleeveId"]));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
long opponentSleeveId = networkUserInfoData.GetOpponentSleeveId();
|
||||
List<CardDataModel> opponentDeck = networkUserInfoData.GetOpponentDeck();
|
||||
dataMgr.SetCurrentEnemyDeckData(opponentDeck.Select((CardDataModel x) => x.CardId).ToList());
|
||||
dataMgr.SetEnemySleeveId(opponentSleeveId);
|
||||
List<CardDataModel> selfDeck = networkUserInfoData.GetSelfDeck();
|
||||
if (GameMgr.GetIns().IsWatchBattle)
|
||||
{
|
||||
ClassCharacterMasterData classCharacterMasterData = dataMgr.GetCharaPrmByCharaId(networkUserInfoData.GetSelfCharaId());
|
||||
if (classCharacterMasterData == null)
|
||||
{
|
||||
classCharacterMasterData = dataMgr.GetCharaPrmByClassId(networkUserInfoData.GetSelfClassId(), isCurrentChara: false);
|
||||
}
|
||||
dataMgr.SetPlayerCharaId(classCharacterMasterData.chara_id);
|
||||
dataMgr.SetPlayerSubClassID(networkUserInfoData.GetSelfSubClassId());
|
||||
dataMgr.SetPlayerMyRotationInfo(networkUserInfoData.GetSelfMyRotationId());
|
||||
dataMgr.SetPlayerSleeveId(networkUserInfoData.GetSelfSleeveId());
|
||||
Wizard.Data.RoomTwoPickBeforeBattleInfo.SelfInfoDeckCopyTwoPickDraftData();
|
||||
}
|
||||
dataMgr.SetCurrentDeckData(selfDeck.Select((CardDataModel x) => x.CardId).ToList());
|
||||
dataMgr.LoadEnemyClassData();
|
||||
}
|
||||
UIManager.ChangeViewSceneParam changeViewSceneParam = new UIManager.ChangeViewSceneParam();
|
||||
changeViewSceneParam.NotWait();
|
||||
if (!GameMgr.GetIns().IsReplayBattle)
|
||||
{
|
||||
changeViewSceneParam.IsInactive_AllView = false;
|
||||
changeViewSceneParam.IsDestroy_AllDialog = false;
|
||||
}
|
||||
UIManager.GetInstance().ChangeViewScene(UIManager.ViewScene.Battle, changeViewSceneParam);
|
||||
_matchingTimeCheker.Stop();
|
||||
}
|
||||
|
||||
public virtual void SettingRealTimeNetworkEvent()
|
||||
{
|
||||
ToolboxGame.RealTimeNetworkAgent.OnMatchingReceiveUri = null;
|
||||
RealTimeNetworkAgent realTimeNetworkAgent = ToolboxGame.RealTimeNetworkAgent;
|
||||
realTimeNetworkAgent.OnMatchingReceiveUri = (Action<NetworkBattleDefine.NetworkBattleURI, Dictionary<string, object>>)Delegate.Combine(realTimeNetworkAgent.OnMatchingReceiveUri, new Action<NetworkBattleDefine.NetworkBattleURI, Dictionary<string, object>>(ReactionReceiveUri));
|
||||
ToolboxGame.RealTimeNetworkAgent.OnEmit = null;
|
||||
RealTimeNetworkAgent realTimeNetworkAgent2 = ToolboxGame.RealTimeNetworkAgent;
|
||||
realTimeNetworkAgent2.OnEmit = (Action<NetworkBattleDefine.NetworkBattleURI>)Delegate.Combine(realTimeNetworkAgent2.OnEmit, new Action<NetworkBattleDefine.NetworkBattleURI>(SettingLoadedTimeOutCoroutine));
|
||||
}
|
||||
|
||||
private void ReactionReceiveUri(NetworkBattleDefine.NetworkBattleURI uri, Dictionary<string, object> synchronizeData)
|
||||
{
|
||||
switch (uri)
|
||||
{
|
||||
case NetworkBattleDefine.NetworkBattleURI.Matched:
|
||||
if (ToolboxGame.RealTimeNetworkAgent.CurrentMatchingStatus == RealTimeNetworkAgent.MatchingStatus.Connect)
|
||||
{
|
||||
SettingOwnerToMatchingState();
|
||||
ToolboxGame.RealTimeNetworkAgent.SetCurrentMatchingStatus(RealTimeNetworkAgent.MatchingStatus.StartLoad);
|
||||
StartBattleLoad();
|
||||
}
|
||||
break;
|
||||
case NetworkBattleDefine.NetworkBattleURI.Retry:
|
||||
{
|
||||
string value = synchronizeData[NetworkBattleDefine.NetworkParameterNames[NetworkBattleDefine.NetworkParameter.targetUri]].ToString();
|
||||
if (Enum.IsDefined(typeof(NetworkBattleDefine.NetworkBattleURI), value) && (NetworkBattleDefine.NetworkBattleURI)Enum.Parse(typeof(NetworkBattleDefine.NetworkBattleURI), value) == NetworkBattleDefine.NetworkBattleURI.Loaded)
|
||||
{
|
||||
_matchingRetryLoaded.Start();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case NetworkBattleDefine.NetworkBattleURI.BattleStart:
|
||||
if (synchronizeData.ContainsKey(NetworkBattleDefine.NetworkParameterNames[NetworkBattleDefine.NetworkParameter.battleStartDate]))
|
||||
{
|
||||
_battleStartDate = TimeUtil.MicroTimeToFromUnixTime(long.Parse(synchronizeData[NetworkBattleDefine.NetworkParameterNames[NetworkBattleDefine.NetworkParameter.battleStartDate]].ToString()));
|
||||
}
|
||||
else
|
||||
{
|
||||
_battleStartDate = DateTime.Now;
|
||||
}
|
||||
ToolboxGame.RealTimeNetworkAgent.SetNetworkInfo(synchronizeData, ref uri);
|
||||
ToolboxGame.RealTimeNetworkAgent.SetCurrentMatchingStatus(RealTimeNetworkAgent.MatchingStatus.Prepared);
|
||||
SafeStartBattleCoroutine(CheckNetworkInfo(delegate
|
||||
{
|
||||
isGoBattle = true;
|
||||
_matchingTimeCheker.Stop();
|
||||
GotoBattle();
|
||||
}));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private IEnumerator CheckNetworkInfo(Action callback)
|
||||
{
|
||||
while (!BattleManagerBase.GetIns().BattleStartControl.IsReady)
|
||||
{
|
||||
yield return null;
|
||||
}
|
||||
callback.Call();
|
||||
}
|
||||
|
||||
private void SettingLoadedTimeOutCoroutine(NetworkBattleDefine.NetworkBattleURI uri)
|
||||
{
|
||||
if (uri == NetworkBattleDefine.NetworkBattleURI.Loaded)
|
||||
{
|
||||
_goTitleOnTimeout = true;
|
||||
_matchingTimeCheker.Start();
|
||||
_matchingTimeCheker.SetTimeLimitSecond(25, "loadedTimeout");
|
||||
RealTimeNetworkAgent realTimeNetworkAgent = ToolboxGame.RealTimeNetworkAgent;
|
||||
realTimeNetworkAgent.OnEmit = (Action<NetworkBattleDefine.NetworkBattleURI>)Delegate.Remove(realTimeNetworkAgent.OnEmit, new Action<NetworkBattleDefine.NetworkBattleURI>(SettingLoadedTimeOutCoroutine));
|
||||
}
|
||||
}
|
||||
|
||||
private void RemoveRealTimeNetworkEvent()
|
||||
{
|
||||
ToolboxGame.RealTimeNetworkAgent.OnMatchingReceiveUri = null;
|
||||
ToolboxGame.RealTimeNetworkAgent.OnEmit = null;
|
||||
_matchingNetworkConnectCheker.OnConnectError = null;
|
||||
_matchingNetworkConnectCheker.OnTimeoutInitNetwork = null;
|
||||
}
|
||||
|
||||
public virtual void GotoBattle()
|
||||
{
|
||||
SettingOpponentClassDataAndLoadObject();
|
||||
RemoveRealTimeNetworkEvent();
|
||||
if (!GameMgr.GetIns().IsAINetwork)
|
||||
{
|
||||
BattleManagerBase.GetIns().SetupReplayBattleInfoFilter();
|
||||
}
|
||||
if ((bool)ToolboxGame.RealTimeNetworkAgent && ToolboxGame.RealTimeNetworkAgent.CurrentMatchingStatus != RealTimeNetworkAgent.MatchingStatus.Prepared)
|
||||
{
|
||||
ToolboxGame.RealTimeNetworkAgent.SetCurrentMatchingStatus(RealTimeNetworkAgent.MatchingStatus.Prepared);
|
||||
}
|
||||
if (!GameMgr.GetIns().IsAINetwork)
|
||||
{
|
||||
if ((bool)ToolboxGame.RealTimeNetworkAgent)
|
||||
{
|
||||
NetworkBattleManagerBase networkBattleManagerBase = BattleManagerBase.GetIns() as NetworkBattleManagerBase;
|
||||
networkBattleManagerBase.SettingOpponentAliveEvent();
|
||||
if (!_isRecovery)
|
||||
{
|
||||
networkBattleManagerBase.IsStopIntervalCheck = false;
|
||||
}
|
||||
ToolboxGame.RealTimeNetworkAgent.StartPreparedStartTimer(_battleStartDate);
|
||||
ToolboxGame.RealTimeNetworkAgent.StartRecoveryRecording();
|
||||
}
|
||||
UIManager.GetInstance().OffViewAllOutside(UIManager.ViewScene.Battle);
|
||||
if (!_isRecovery)
|
||||
{
|
||||
ToolboxGame.UIManager.CloseInSceneLoadingBattle();
|
||||
}
|
||||
}
|
||||
DestroyCoroutineObject();
|
||||
}
|
||||
|
||||
protected void SettingOpponentClassDataAndLoadObject()
|
||||
{
|
||||
DataMgr dataMgr = GameMgr.GetIns().GetDataMgr();
|
||||
NetworkUserInfoData networkUserInfoData = GameMgr.GetIns().GetNetworkUserInfoData();
|
||||
ClassCharacterMasterData classCharacterMasterData = dataMgr.GetCharaPrmByCharaId(networkUserInfoData.GetOpponentCharaId());
|
||||
bool flag = PlayerPrefsWrapper.GetBool(PlayerPrefsWrapper.SHOW_OPPONENT_DEFAULT_SKIN);
|
||||
if (flag && networkUserInfoData.GetOpponentChaosId() != -1 && (GameMgr.GetIns().IsNetworkBattle || GameMgr.GetIns().IsReplayBattle) && !networkUserInfoData.GetOpponentChaosOverrideSkin())
|
||||
{
|
||||
flag = false;
|
||||
}
|
||||
if (classCharacterMasterData == null || flag)
|
||||
{
|
||||
classCharacterMasterData = dataMgr.GetCharaPrmByClassId(networkUserInfoData.GetOpponentClassId(), isCurrentChara: false);
|
||||
}
|
||||
dataMgr.SetEnemyCharaId(classCharacterMasterData.chara_id);
|
||||
dataMgr.SetEnemySubClassID(networkUserInfoData.GetOpponentSubClassId());
|
||||
dataMgr.SetEnemyMyRotationInfo(networkUserInfoData.GetOpponentMyRotationId());
|
||||
dataMgr.SetEnemyAvatarBattleInfo(networkUserInfoData.GetOpponentAvatarBattleId());
|
||||
}
|
||||
|
||||
public virtual FinishTaskBase GetBattleFinishTask()
|
||||
{
|
||||
return new FinishTaskBase();
|
||||
}
|
||||
|
||||
public bool GetMatchingDataReady()
|
||||
{
|
||||
return _isStartBattleLoad;
|
||||
}
|
||||
|
||||
public void DisConnect(Action onDisconnected)
|
||||
{
|
||||
if (!_isDisconnect)
|
||||
{
|
||||
_isDisconnect = true;
|
||||
string text = "matchingDisconnect";
|
||||
DestroyCoroutineObject();
|
||||
if ((bool)ToolboxGame.RealTimeNetworkAgent)
|
||||
{
|
||||
text += ToolboxGame.RealTimeNetworkAgent.CurrentMatchingStatus;
|
||||
ToolboxGame.RealTimeNetworkAgent.DestroyObj(RealTimeNetworkAgent.DESTROY_OBJECT_LOG.MatchingDisconnect);
|
||||
}
|
||||
text += StackTraceUtility.ExtractStackTrace();
|
||||
LocalLog.AccumulateLastTraceLog(text);
|
||||
_isStopDoMatching = true;
|
||||
onDisconnected.Call();
|
||||
}
|
||||
}
|
||||
|
||||
protected void DestroyCoroutineObject()
|
||||
{
|
||||
StopMatchingAction();
|
||||
if (CoroutineMonoBehaviour != null)
|
||||
{
|
||||
CoroutineMonoBehaviour.StopAllCoroutines();
|
||||
CoroutineMonoBehaviour = null;
|
||||
}
|
||||
if (_coroutineObject != null)
|
||||
{
|
||||
UnityEngine.Object.Destroy(_coroutineObject);
|
||||
_coroutineObject = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void ReturnScene()
|
||||
{
|
||||
if (!_isStartBattleLoad && isOffViewAllEnable)
|
||||
{
|
||||
UIManager.GetInstance().OffViewAll();
|
||||
}
|
||||
ToolboxGame.DestroyNetworkAgent();
|
||||
GameMgr.GetIns().IsAINetwork = false;
|
||||
if (GetMatchingDataReady() && GameMgr.GetIns().GetBattleCtrl() != null)
|
||||
{
|
||||
UIManager.GetInstance().StartCoroutine(BattleEndCoroutin(GotoHomeScene));
|
||||
return;
|
||||
}
|
||||
UIManager.GetInstance().CloseInSceneLoadingMatching();
|
||||
if (GetMatchingDataReady())
|
||||
{
|
||||
GotoHomeScene();
|
||||
}
|
||||
else
|
||||
{
|
||||
GotoDeckSelectScene();
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void GotoHomeScene()
|
||||
{
|
||||
UIManager.ChangeViewSceneParam changeViewSceneParam = new UIManager.ChangeViewSceneParam();
|
||||
changeViewSceneParam.MyPageMenuIndex = 0;
|
||||
changeViewSceneParam.IsCutCardMotion = true;
|
||||
UIManager.GetInstance().CloseInSceneLoadingMatching();
|
||||
UIManager.GetInstance().CloseInSceneLoadingBattle();
|
||||
UIManager.GetInstance().ChangeViewScene(UIManager.ViewScene.MyPage, changeViewSceneParam);
|
||||
}
|
||||
|
||||
protected override void GotoDeckSelectScene()
|
||||
{
|
||||
}
|
||||
|
||||
private void OnSelectDeck(DialogBase dialogDeckList, DeckData deck)
|
||||
{
|
||||
if (deck == null || GameMgr.GetIns().GetDataMgr().m_BattleType == DataMgr.BattleType.None)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (!deck.IsUsable())
|
||||
{
|
||||
InCompleteDeckDecideDialog.Create(dialogDeckList, deck);
|
||||
return;
|
||||
}
|
||||
CompleteDeckDecideDialog completeDeckDecideDialog = CompleteDeckDecideDialog.CreateForSingleDeck(dialogDeckList, deck, showSimpleStageOption: false, null);
|
||||
if (GameMgr.GetIns().GetDataMgr().m_BattleType == DataMgr.BattleType.RoomBattle || GameMgr.GetIns().GetDataMgr().m_BattleType == DataMgr.BattleType.RoomTwoPick)
|
||||
{
|
||||
RoomBase.DeckConfirmDialog = completeDeckDecideDialog.Dialog;
|
||||
}
|
||||
}
|
||||
|
||||
public void QuitMatching(bool isReturnScene = true)
|
||||
{
|
||||
if (ToolboxGame.RealTimeNetworkAgent != null)
|
||||
{
|
||||
LocalLog.AccumulateLastTraceLog("Matching_QuitMatching" + ToolboxGame.RealTimeNetworkAgent.CurrentMatchingStatus);
|
||||
}
|
||||
DisConnect(delegate
|
||||
{
|
||||
if (isReturnScene)
|
||||
{
|
||||
ReturnScene();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void ReceiveResultCodeError(int code)
|
||||
{
|
||||
if (!IsStopNetWorkWithErrorCode)
|
||||
{
|
||||
IsStopNetWorkWithErrorCode = true;
|
||||
_matchingTimeCheker.Stop();
|
||||
switch (code)
|
||||
{
|
||||
case 30201:
|
||||
_receivedMatchingTimeout = true;
|
||||
TimeOutAction("ReceiveResultCodeError");
|
||||
break;
|
||||
case 30212:
|
||||
TimeOutAction("NodeErrorDisconnect");
|
||||
break;
|
||||
case 30001:
|
||||
case 30002:
|
||||
case 30213:
|
||||
case 30302:
|
||||
DisConnect(null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void OnTimeoutInitNetworkToTimeOutAction()
|
||||
{
|
||||
_matchingNetworkConnectCheker.OnTimeoutInitNetwork = null;
|
||||
TimeOutAction("OnTimeoutInitNetwork");
|
||||
}
|
||||
|
||||
public virtual void TimeOutAction(string log, bool isIpv6Dialog = false)
|
||||
{
|
||||
LocalLog.AccumulateLastTraceLog("TimeOutAction " + log);
|
||||
if (ToolboxGame.RealTimeNetworkAgent != null && ToolboxGame.RealTimeNetworkAgent.CurrentMatchingStatus >= RealTimeNetworkAgent.MatchingStatus.Prepared && ToolboxGame.RealTimeNetworkAgent.CurrentMatchingStatus != RealTimeNetworkAgent.MatchingStatus.RoomReady && ToolboxGame.RealTimeNetworkAgent.CurrentMatchingStatus != RealTimeNetworkAgent.MatchingStatus.Room)
|
||||
{
|
||||
LocalLog.AccumulateLastTraceLog("Matching_TimeOutActionIgnore" + ToolboxGame.RealTimeNetworkAgent.CurrentMatchingStatus);
|
||||
}
|
||||
else if (isIpv6Dialog)
|
||||
{
|
||||
ErrorDialogWithRetry("", Wizard.Data.SystemText.Get("ErrorHeader_0016"), isIpv6Dialog);
|
||||
}
|
||||
else if (_goTitleOnTimeout && !_receivedMatchingTimeout)
|
||||
{
|
||||
ErrorDialogGoToTitle(Wizard.Data.SystemText.Get("Battle_0508"), Wizard.Data.SystemText.Get("Battle_0412"));
|
||||
}
|
||||
else if (_isStartBattleLoad || _receivedMatchingTimeout)
|
||||
{
|
||||
ErrorDialogWithReturn(Wizard.Data.SystemText.Get("Battle_0404"), Wizard.Data.SystemText.Get("Battle_0412"), Wizard.Data.SystemText.Get("Common_0132"));
|
||||
}
|
||||
else
|
||||
{
|
||||
TimeOutMessageToRetry();
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void TimeOutMessageToRetry()
|
||||
{
|
||||
if (ToolboxGame.RealTimeNetworkAgent != null)
|
||||
{
|
||||
LocalLog.AccumulateLastTraceLog("Matching_TimeOutMessageToRetry" + ToolboxGame.RealTimeNetworkAgent.CurrentMatchingStatus);
|
||||
}
|
||||
ErrorDialogWithRetry(Wizard.Data.SystemText.Get("Battle_0405"), Wizard.Data.SystemText.Get("Battle_0412"));
|
||||
}
|
||||
|
||||
protected int GetLastResultCode()
|
||||
{
|
||||
return _connectAPITask.GetResultCode();
|
||||
}
|
||||
|
||||
protected void ConnectAPI(NetworkTask task, Action<NetworkTask.ResultCode> callbackOnSuccess = null)
|
||||
{
|
||||
string text = "Matching_ConnectAPI " + task;
|
||||
if ((bool)ToolboxGame.RealTimeNetworkAgent)
|
||||
{
|
||||
text += ToolboxGame.RealTimeNetworkAgent.CurrentMatchingStatus;
|
||||
}
|
||||
text += StackTraceUtility.ExtractStackTrace();
|
||||
LocalLog.AccumulateLastTraceLog(text);
|
||||
_connectAPITask = task;
|
||||
task.SkipAllCuteResultCodeCheckErrorPopup();
|
||||
task.SkipCuteTimeOutPopup();
|
||||
task.SkipCuteHttpStatusErrorPopup();
|
||||
_doMatchingAPICoroutineList.Add(SafeStartBattleCoroutine(Toolbox.NetworkManager.Connect(task, callbackOnSuccess, delegate(NetworkTask.ResultCode result)
|
||||
{
|
||||
if (task.GetResultCode() == 109)
|
||||
{
|
||||
LocalLog.AccumulateLastTraceLog("Matching_TimeSlipRotation SeasonChangeError");
|
||||
Dialog.Create(task.GetResultCode());
|
||||
}
|
||||
else
|
||||
{
|
||||
OnFailed((int)result);
|
||||
}
|
||||
}, OnErrorAPI)));
|
||||
}
|
||||
|
||||
protected virtual void OnFailed(int code)
|
||||
{
|
||||
string text = "Matching_ConnectAPIOnFailed";
|
||||
if (ToolboxGame.RealTimeNetworkAgent != null)
|
||||
{
|
||||
text += ToolboxGame.RealTimeNetworkAgent.CurrentMatchingStatus;
|
||||
}
|
||||
LocalLog.AccumulateLastTraceLog(text);
|
||||
int num = code;
|
||||
if (code == 4)
|
||||
{
|
||||
UIManager.GetInstance().closeInSceneLoading();
|
||||
DisConnect(null);
|
||||
}
|
||||
else
|
||||
{
|
||||
num = 12;
|
||||
OnErrorAPI(num);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnErrorAPI(int code)
|
||||
{
|
||||
if (code == 9999)
|
||||
{
|
||||
DisConnect(delegate
|
||||
{
|
||||
Dialog.Create(code);
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_connectAPITask != null && _connectAPITask.GetResultCode() == 109)
|
||||
{
|
||||
return;
|
||||
}
|
||||
string text = "Matching_OnErrorAPI";
|
||||
if (ToolboxGame.RealTimeNetworkAgent != null)
|
||||
{
|
||||
text += ToolboxGame.RealTimeNetworkAgent.CurrentMatchingStatus;
|
||||
}
|
||||
LocalLog.AccumulateLastTraceLog(text);
|
||||
UIManager.GetInstance().closeInSceneLoading();
|
||||
TaskManager.GetErrorMsgFromCode(code, out var msg, out var title);
|
||||
if (code != 317)
|
||||
{
|
||||
bool num = code == 101 || (code >= 2000 && code <= 2999);
|
||||
bool flag = code >= 2000 && code <= 2999;
|
||||
if (num)
|
||||
{
|
||||
NetworkUI.GetInstance().OpenGoToTitleErrorPopUp(title, Wizard.Data.SystemText.Get("Battle_0409"), code.ToString());
|
||||
}
|
||||
else if (flag)
|
||||
{
|
||||
ErrorDialogWithReturn(msg, title, Wizard.Data.SystemText.Get("Common_0132"));
|
||||
}
|
||||
else if (code == 3010)
|
||||
{
|
||||
ErrorDialogGoToTitle(msg, title);
|
||||
}
|
||||
else
|
||||
{
|
||||
ErrorDialogWithRetry(msg, title);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected DialogBase CreateDialogBase()
|
||||
{
|
||||
DialogBase dialogBase = null;
|
||||
return (_errorDialog != null) ? _errorDialog : (_errorDialog = UIManager.GetInstance().CreateDialogClose());
|
||||
}
|
||||
|
||||
protected void ErrorDialogWithReturn(string text, string title, string buttonMsg)
|
||||
{
|
||||
DisConnect(delegate
|
||||
{
|
||||
DialogBase dialogBase = CreateDialogBase();
|
||||
dialogBase.SetTitleLabel(title);
|
||||
dialogBase.SetText(text);
|
||||
dialogBase.SetButtonLayout(DialogBase.ButtonLayout.GrayBtn);
|
||||
dialogBase.SetButtonText(buttonMsg);
|
||||
dialogBase.SetFadeButtonEnabled(flag: false);
|
||||
dialogBase.SetPanelDepth(5400);
|
||||
dialogBase.OnClose = ReturnScene;
|
||||
});
|
||||
}
|
||||
|
||||
protected void ErrorDialogGoToTitle(string text, string title)
|
||||
{
|
||||
DisConnect(delegate
|
||||
{
|
||||
DialogBase dialogBase = CreateDialogBase();
|
||||
dialogBase.SetTitleLabel(title);
|
||||
dialogBase.SetText(text);
|
||||
dialogBase.SetButtonLayout(DialogBase.ButtonLayout.BackToTitleBtn);
|
||||
dialogBase.SetFadeButtonEnabled(flag: false);
|
||||
dialogBase.SetPanelDepth(5400);
|
||||
});
|
||||
}
|
||||
|
||||
protected void ErrorDialogWithRetry(string text, string title, bool isIpv6Dialog = false)
|
||||
{
|
||||
DisConnect(delegate
|
||||
{
|
||||
ErrorDialog(text, title, isIpv6Dialog);
|
||||
});
|
||||
}
|
||||
|
||||
protected virtual void ErrorDialog(string text, string title, bool isIPv6Dialog)
|
||||
{
|
||||
DialogBase dialogBase = CreateDialogBase();
|
||||
if (isIPv6Dialog)
|
||||
{
|
||||
MatchingIPv6Toggle.AddMatchingIPv6Toggle(dialogBase);
|
||||
}
|
||||
dialogBase.SetSize(DialogBase.Size.M);
|
||||
dialogBase.SetTitleLabel(title);
|
||||
dialogBase.SetText(text);
|
||||
dialogBase.SetButtonLayout(DialogBase.ButtonLayout.BlueBtn_GrayBtn);
|
||||
dialogBase.SetButtonText(Wizard.Data.SystemText.Get("System_0012"), errorDialogReturnText);
|
||||
dialogBase.SetFadeButtonEnabled(flag: false);
|
||||
dialogBase.SetPanelDepth(5400);
|
||||
dialogBase.ClickSe_Btn2 = Se.TYPE.SYS_BTN_CANCEL_TRANS;
|
||||
EventDelegate method_btn = new EventDelegate(delegate
|
||||
{
|
||||
ToolboxGame.DestroyNetworkAgent();
|
||||
Action action = delegate
|
||||
{
|
||||
UIManager.ChangeViewSceneParam param = new UIManager.ChangeViewSceneParam
|
||||
{
|
||||
OnChange = delegate
|
||||
{
|
||||
UIManager.GetInstance().CloseInSceneLoadingBattle();
|
||||
}
|
||||
};
|
||||
UIManager.GetInstance().ChangeViewScene(UIManager.ViewScene.RankMatch, param);
|
||||
};
|
||||
if (_isStartBattleLoad)
|
||||
{
|
||||
UIManager.GetInstance().StartCoroutine(BattleEndCoroutin(action));
|
||||
}
|
||||
else
|
||||
{
|
||||
action();
|
||||
}
|
||||
});
|
||||
EventDelegate eventDelegate = new EventDelegate(ReturnScene);
|
||||
dialogBase.SetButtonDelegate(method_btn, eventDelegate, eventDelegate, eventDelegate);
|
||||
}
|
||||
|
||||
protected IEnumerator BattleEndCoroutin(Action callback)
|
||||
{
|
||||
yield return null;
|
||||
SBattleLoad battleLoad = BattleManagerBase.GetIns().SBattleLoad;
|
||||
while (!battleLoad.isLoadEnd)
|
||||
{
|
||||
yield return null;
|
||||
}
|
||||
yield return GameMgr.GetIns().GetBattleCtrl().BattleEnd();
|
||||
callback();
|
||||
}
|
||||
|
||||
public Coroutine SafeStartBattleCoroutine(IEnumerator routine)
|
||||
{
|
||||
if (CoroutineMonoBehaviour == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return CoroutineMonoBehaviour.StartCoroutine(routine);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user