using asap.core;
using cfg;
using game;
using LitJson;
using System;
using System.Collections.Generic;
using System.Linq;
using UniRx;
using UnityEngine;
using UnityEngine.AddressableAssets;
namespace GameCore
{
public class GuideNextEvent
{
}
public class AddIndexEvent
{
public bool CompleteGuide;
public int guideSubIndex;
public bool isAutoNext;
}
///
/// 废弃
///
public struct OnEventTriggerGuide
{
public OnEventTriggerGuide(string panelName)
{
this.panelName = panelName;
}
public string panelName;
}
public class GuideSaveData
{
public int guideSubIndex = 0;
public bool isFinish = false;
public string groupName;
}
///
/// 新手引导数据中心。外部触发主要有三类路径:
/// 1) 各 UI/玩法在打开或 OnEnable 时调用 ,按配置表首步 panelName 与触发条件尝试开组;
/// 2) 面板打开后通过 GContext.Publish(new OnEventTriggerGuide(panelName)) 驱动 ,推进「当前组」下一步或回退尝试 ;
/// 3) 业务显式调用 / / / 等完成指定流程。
/// 存档由 (登录拉取)与 (写 PlayFab)维护。
///
public class GuideDataCenter : IDisposable
{
Tables _tables;
PlayerData playerData;
public GuideDataCenter(cfg.Tables tables, PlayerData playerData)
{
this._tables = tables;
this.playerData = playerData;
}
public string CurPanelName;
public Dictionary GuideSaveDataDic = new Dictionary();
public GuideSaveData curSaveData;
public GuidanceGroupDefine[] guidanceGroupDefines;
public GuidanceDefine curDefine;
public string popupPanelNode;
public GuidanceGroupDefine curGroupDefine;
public GuidanceDefineSetting guidanceDefineSetting;
//待释放
IDisposable disposable;
IDisposable disposable2;
IDisposable disposable3;
///
/// GM/调试:清空所有引导组进度并标记为已完成。典型入口:DebugFunc 控制台 guide.clear。
///
public void GMClearGuide()
{
foreach (var item in guidanceGroupDefines)
{
if (!GuideSaveDataDic.TryGetValue(item.groupName.ToString(), out GuideSaveData _saveData))
{
_saveData = new GuideSaveData();
_saveData.groupName = item.groupName.ToString();
GuideSaveDataDic.Add(item.groupName.ToString(), _saveData);
}
_saveData.isFinish = true;
}
GContext.Publish(new ConditionTypeEvent(ConditionType.CompleteGuide, 0));
curDefine = null;
curGroupDefine = null;
Save();
}
///
/// 加载引导配置、校正未完成组的断点、订阅 。由 FishingStage 等阶段在进游戏后调用。
///
public async void Init()
{
guidanceDefineSetting = (GuidanceDefineSetting)await Addressables.LoadAssetAsync