备份CatanBuilding瘦身独立工程

This commit is contained in:
JSD\13999
2026-05-26 16:15:54 +08:00
commit 2d0e6a61b7
12001 changed files with 2431925 additions and 0 deletions

View File

@@ -0,0 +1,656 @@
using asap.core;
using cfg;
using game;
using LitJson;
using System;
using System.Collections.Generic;
using tysdk;
using UniRx;
using UnityEngine;
using UnityEngine.AddressableAssets;
namespace GameCore
{
public class GuideNextEvent
{
}
public class AddIndexEvent
{
public bool CompleteGuide;
public int guideSubIndex;
public bool isAutoNext;
}
/// <summary>
/// 废弃
/// </summary>
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;
}
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<string, GuideSaveData> GuideSaveDataDic = new Dictionary<string, GuideSaveData>();
public GuideSaveData curSaveData;
public GuidanceGroupDefine[] guidanceGroupDefines;
public GuidanceDefine curDefine;
public string popupPanelNode;
public GuidanceGroupDefine curGroupDefine;
public GuidanceDefineSetting guidanceDefineSetting;
//待释放
IDisposable disposable;
IDisposable disposable2;
IDisposable disposable3;
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();
}
public async void Init()
{
guidanceDefineSetting = (GuidanceDefineSetting)await Addressables.LoadAssetAsync<object>("GuidanceConfig");
if (guidanceDefineSetting != null)
{
guidanceGroupDefines = guidanceDefineSetting.guidanceGroupDefines;
List<GroupName> Skip = guidanceDefineSetting.SkipGroupNames;
bool isSkip = playerData.lv >= guidanceDefineSetting.SkipLevel;
if (GuideSaveDataDic == null)
{
GuideSaveDataDic = new Dictionary<string, GuideSaveData>();
}
else
{
GuideSaveData _saveData;
GuidanceDefine _define;
Dictionary<string, GuideSaveData> keyValuePairs = new Dictionary<string, GuideSaveData>();
foreach (var item in guidanceGroupDefines)
{
if (GuideSaveDataDic.TryGetValue(item.groupName.ToString(), out _saveData))
{
if (!_saveData.isFinish && _saveData.guideSubIndex > 0)
{
for (int i = _saveData.guideSubIndex; i < item.guidanceDefines.Length; i++)
{
_define = item.guidanceDefines[i];
if (_define.isKey)
{
_saveData.guideSubIndex = _define.JumpIndex;
if (_saveData.guideSubIndex < item.guidanceDefines.Length)
{
_saveData.isFinish = false;
curSaveData = _saveData;
curGroupDefine = item;
curDefine = curGroupDefine.guidanceDefines[_saveData.guideSubIndex];
}
else
{
_saveData.isFinish = true;
GContext.Publish(new ConditionTypeEvent(ConditionType.CompleteGuide, 1));
}
break;
}
else
{
_saveData.isFinish = true;
}
}
}
keyValuePairs[item.groupName.ToString()] = _saveData;
}
else if (isSkip && Skip.Contains(item.groupName))
{
_saveData = new GuideSaveData();
_saveData.groupName = item.groupName.ToString();
_saveData.isFinish = true;
keyValuePairs[item.groupName.ToString()] = _saveData;
}
}
GuideSaveDataDic = keyValuePairs;
Save();
}
if (disposable2 == null)
{
disposable2 = GContext.OnEvent<OnEventTriggerGuide>().Subscribe(TriggerGuideNext);
}
}
}
public bool GetIsFinish(string groupName)
{
return GuideSaveDataDic.ContainsKey(groupName) && GuideSaveDataDic[groupName].isFinish;
}
public bool InspectTriggerGuide(string panelName, string prePanelName = "", string curPanelName = "")
{
if (prePanelName.Contains("FishingRodPanel"))
{
return false;
}
if (guidanceDefineSetting == null)
{
return false;
}
if (curGroupDefine != null
&& GuideSaveDataDic.TryGetValue(curGroupDefine.groupName.ToString(), out var guideSaveData)
//&& !guideSaveData.isFinish
&& curGroupDefine.guidanceDefines.Length > guideSaveData.guideSubIndex
&& panelName == curGroupDefine.guidanceDefines[guideSaveData.guideSubIndex].panelName)
{
TriggerGuideNext(new OnEventTriggerGuide(panelName));
return true;
}
PlayerFishData playerFishData = GContext.container.Resolve<PlayerFishData>();
GuidanceGroupDefine guidanceGroupDefine;
for (int i = 0; i < guidanceGroupDefines.Length; i++)
{
guidanceGroupDefine = guidanceGroupDefines[i];
bool isFinish = GetIsFinish(guidanceGroupDefine.groupName.ToString());
if (isFinish || panelName != guidanceGroupDefine.guidanceDefines[0].panelName)
{
continue;
}
if (CheckTriggerGuideFinish(guidanceGroupDefine))
{
continue;
}
int count;
switch (guidanceGroupDefine.TriggerConditionsType)
{
case GuideTriggerConditions.Next:
break;
case GuideTriggerConditions.First_login:
break;
case GuideTriggerConditions.OpenSystem_Shop:
if (GContext.container.Resolve<PlayerShopData>().IsShopOpen == false)
{
continue;
}
break;
case GuideTriggerConditions.UnlockSystem_Album:
if (GContext.container.Resolve<AlbumData>().theme == null)
{
continue;
}
break;
case GuideTriggerConditions.Level_2:
if (playerData.lv >= 2)
{
break;
}
continue;
case GuideTriggerConditions.Group_Finish:
if (GuideSaveDataDic.TryGetValue(guidanceGroupDefine.TriggerConditionsParameter, out var _data) && _data.isFinish)
{
break;
}
continue;
case GuideTriggerConditions.GetDiffFishCount:
if (int.TryParse(guidanceGroupDefine.TriggerConditionsParameter, out count) && playerFishData.GetDiffFishCount() >= count)
{
if (playerFishData.GetDiffFishCount() > count)
{
TriggerGuideFinish(guidanceGroupDefine);
continue;
}
break;
}
continue;
case GuideTriggerConditions.GetFishCount:
if (int.TryParse(guidanceGroupDefine.TriggerConditionsParameter, out count) && playerFishData.GetAnglingCount() >= count)
{
if (playerFishData.GetAnglingCount() > count)
{
TriggerGuideFinish(guidanceGroupDefine);
continue;
}
break;
}
continue;
case GuideTriggerConditions.FirstClickMap_AtMap2:
if (playerData.lastMapId == _tables.TbMapData.DataList[1].ID)
{
break;
}
continue;
case GuideTriggerConditions.AccountLevel:
if (int.TryParse(guidanceGroupDefine.TriggerConditionsParameter, out count) && playerData.lv >= count)
{
break;
}
continue;
case GuideTriggerConditions.UnlockSystem:
if (int.TryParse(guidanceGroupDefine.TriggerConditionsParameter, out count) && GContext.container.Resolve<FishingEventData>().GetSystemOpen(count))
{
break;
}
continue;
case GuideTriggerConditions.UnlockEvent:
string[] str = guidanceGroupDefine.TriggerConditionsParameter.Split('-');
if (str.Length == 2)
{
if (int.TryParse(str[0], out count) && int.TryParse(str[1], out int count2) && GContext.container.Resolve<FishingEventData>().GetEvent(count, count2) > 0)
{
break;
}
}
else if (str.Length == 3)
{
if (int.TryParse(str[0], out count) && int.TryParse(str[1], out int count2) && int.TryParse(str[2], out int count3) && GContext.container.Resolve<FishingEventData>().GetEventRedirectID(count, count2) == count3)
{
break;
}
}
//if (int.TryParse(guidanceGroupDefine.TriggerConditionsParameter, out count) && GContext.container.Resolve<FishingEventData>().GetSystemOpen(count))
//{
// break;
//}
continue;
case GuideTriggerConditions.MaxMultiplierCount:
if (playerData.IsOpenMagnification &&
int.TryParse(guidanceGroupDefine.TriggerConditionsParameter, out count) &&
playerData.ContainsOrGreaterRatio(count))
{
break;
}
continue;
case GuideTriggerConditions.GetSecondRod:
if (!prePanelName.Contains("HomePanel") && playerFishData.IsOpenRod && playerFishData.GetRodAllCount() > 1)
{
break;
}
continue;
case GuideTriggerConditions.RodAscendAvailable:
if (!prePanelName.Contains("HomePanel") && playerFishData.IsOpenRod && playerFishData.GetRodCanUp())
{
break;
}
continue;
case GuideTriggerConditions.RodUpgradeAvailable:
if (!prePanelName.Contains("HomePanel") && playerFishData.IsOpenRod && playerFishData.GetRodCanUpLevel())
{
break;
}
continue;
case GuideTriggerConditions.BuyPack:
if (int.TryParse(guidanceGroupDefine.TriggerConditionsParameter, out count) && GContext.container.Resolve<PlayerShopData>().GetAllPackCount(count) > 0)
{
break;
}
continue;
case GuideTriggerConditions.BoxOpenCondition:
FishingBoxDataProvier fishingBoxData = GContext.container.Resolve<FishingBoxDataProvier>();
if (fishingBoxData.IsUnclocked && fishingBoxData.GetBoxCount(fishingBoxData.GetIDByQuality(3)) > 0)
{
break;
}
continue;
case GuideTriggerConditions.GoBuilding:
if (GContext.container.Resolve<CampDataMM>().GoBuilding())
{
break;
}
continue;
case GuideTriggerConditions.GoBuilding02:
if (playerData.lv >= 12)
{
TriggerGuideFinish(guidanceGroupDefine);
Debug.Log("TriggerGuideFinish(guidanceGroupDefine);");
continue;
}
if (GContext.container.Resolve<CampDataMM>().GoBuilding02(101012))
{
Debug.Log("TriggerGuideFinish();");
break;
}
continue;
case GuideTriggerConditions.EventWashingStep:
if (int.TryParse(guidanceGroupDefine.TriggerConditionsParameter, out count) && GContext.container.Resolve<EventWashingDataManager>().IsCurrentStepID(count))
{
break;
}
continue;
default:
continue;
}
if (curGroupDefine == guidanceGroupDefine)
{
return false;
}
if (panelName == guidanceGroupDefine.guidanceDefines[0].panelName)
{
TriggerGuide(guidanceGroupDefine, curPanelName);
return true;
}
}
return false;
}
public void ClearGuide(string groupName)
{
if (GuideSaveDataDic.ContainsKey(groupName))
{
GuideSaveDataDic.Remove(groupName);
Save();
}
}
/// <summary>
/// 特殊屏蔽的新手引导
/// </summary>
/// <param name="group"></param>
bool CheckTriggerGuideFinish(GuidanceGroupDefine group)
{
bool isFinishPass = false;
//判断是否直接完成
if (group.groupName == GroupName.Chanllenge)
{
// isFinishPass = !GContext.container.Resolve<FishingChallengeCenter>().IsFirstOpen;
isFinishPass = !GContext.container.Resolve<FishingChallengeManager>().IsFirstOpen;
}
if (group.groupName == GroupName.BeginnerPack01)
{
MMTService mMTService = GContext.container.Resolve<MMTService>();
if (mMTService.mmt)
{
isFinishPass = true;
}
}
if (isFinishPass)
{
TriggerGuideFinish(group);
}
return isFinishPass;
}
void TriggerGuideFinish(GuidanceGroupDefine group)
{
string groupName = group.groupName.ToString();
if (!GuideSaveDataDic.TryGetValue(groupName, out var guideSaveData))
{
guideSaveData = new GuideSaveData();
guideSaveData.groupName = groupName;
GuideSaveDataDic.Add(groupName, guideSaveData);
}
guideSaveData.guideSubIndex = group.guidanceDefines.Length;
guideSaveData.isFinish = true;
Save();
}
public bool TriggerGuide(string groupName, string panelName, bool loop = true)
{
if (guidanceDefineSetting == null)
{
return false;
}
GuidanceGroupDefine guidanceGroupDefine;
if (!loop)
{
bool isFinish = GetIsFinish(groupName.ToString());
if (isFinish)
{
return false;
}
}
for (int i = 0; i < guidanceGroupDefines.Length; i++)
{
guidanceGroupDefine = guidanceGroupDefines[i];
if (guidanceGroupDefine.groupName.ToString() == groupName)
{
if (panelName != guidanceGroupDefine.guidanceDefines[0].panelName)
{
return false;
}
TriggerGuide(groupName, guidanceGroupDefine);
return true;
}
}
return false;
}
async void TriggerGuide(string groupName, GuidanceGroupDefine guidanceGroupDefine)
{
await System.Threading.Tasks.Task.Delay(200);
curSaveData = new GuideSaveData();
curSaveData.groupName = groupName;
GuideSaveDataDic[groupName] = curSaveData;
curGroupDefine = guidanceGroupDefine;
curDefine = curGroupDefine.guidanceDefines[0];
ShowPanel("");
curSaveData.guideSubIndex++;
}
void TriggerGuide(GuidanceGroupDefine group, string curPanelName)
{
string groupName = group.groupName.ToString();
if (!GuideSaveDataDic.TryGetValue(groupName, out var guideSaveData))
{
guideSaveData = new GuideSaveData();
guideSaveData.groupName = groupName;
GuideSaveDataDic.Add(groupName, guideSaveData);
}
if (guideSaveData.isFinish)
{
return;
}
guideSaveData.guideSubIndex = 0;
curSaveData = guideSaveData;
curGroupDefine = group;
curDefine = group.guidanceDefines[0];
ShowPanel(curPanelName);
curSaveData.guideSubIndex++;
}
public void TriggerGuideNext(OnEventTriggerGuide eventTriggerGuide)
{
if (curGroupDefine != null && GuideSaveDataDic.TryGetValue(curGroupDefine.groupName.ToString(), out var guideSaveData))
{
if (curGroupDefine.guidanceDefines.Length <= curSaveData.guideSubIndex || eventTriggerGuide.panelName != curGroupDefine.guidanceDefines[guideSaveData.guideSubIndex].panelName)
{
return;
}
curDefine = curGroupDefine.guidanceDefines[guideSaveData.guideSubIndex];
if (curDefine.completeType == CompleteType.PanelOpen)
{
string uIType = curDefine.completeTypeParameter;
if (!string.IsNullOrEmpty(uIType) && UIManager.Instance.ContainsUI(uIType))
{
curSaveData.guideSubIndex++;
AddIndex();
}
else
{
disposable = GContext.OnEvent<GetUIAsyncEvent>().Subscribe(data =>
{
if (uIType == data.uIType && data.show)
{
curSaveData.guideSubIndex++;
AddIndex();
}
});
}
}
else
{
ShowPanel("");
curSaveData.guideSubIndex++;
}
}
else
{
InspectTriggerGuide(eventTriggerGuide.panelName);
}
}
public void AddIndex(bool is_pass = false)
{
if (curDefine == null)
{
return;
}
if (disposable != null)
{
disposable.Dispose();
disposable = null;
}
if (disposable3 != null)
{
disposable3.Dispose();
disposable3 = null;
}
UIManager.Instance.HideUI(UITypes.GuidancePanel);
bool isAutoNext = curDefine.isAutoNext;
AddIndexEvent addIndexEvent = new AddIndexEvent();
addIndexEvent.isAutoNext = isAutoNext;
if (curGroupDefine.guidanceDefines.Length <= curSaveData.guideSubIndex || is_pass)
{
#if AGG
using (var e = GEvent.GameEvent("guide_complete"))
{
e.AddContent("guide_id", curGroupDefine.groupName.ToString())
.AddContent("is_pass", is_pass);
}
#endif
string panelName = curDefine.panelName;
curDefine = null;
curGroupDefine = null;
curSaveData.isFinish = true;
Save();
if (isAutoNext)
{
InspectTriggerGuide(panelName, panelName);
}
GContext.Publish(new ConditionTypeEvent(ConditionType.CompleteGuide, 1));
addIndexEvent.CompleteGuide = true;
addIndexEvent.guideSubIndex = curSaveData.guideSubIndex;
GContext.Publish(addIndexEvent);
}
else
{
Save();
var define = curGroupDefine.guidanceDefines[curSaveData.guideSubIndex];
if (isAutoNext && define.panelName == curDefine.panelName)
{
curDefine = define;
ShowPanel(CurPanelName);
curSaveData.guideSubIndex++;
}
else if (!isAutoNext)
{
for (int i = curSaveData.guideSubIndex; i < curGroupDefine.guidanceDefines.Length; i++)
{
var _define = curGroupDefine.guidanceDefines[i];
if (_define.isKey)
{
curSaveData.isFinish = false;
break;
}
else
{
curSaveData.isFinish = true;
}
}
}
addIndexEvent.guideSubIndex = curSaveData.guideSubIndex;
GContext.Publish(addIndexEvent);
}
}
async void ShowPanel(string PanelName)
{
if (curDefine.fingerType != FingerType.None)
{
disposable3 = GContext.OnEvent<GuideNextEvent>().Subscribe(GuideNextEvent);
}
CurPanelName = PanelName;
await UIManager.Instance.ShowUI(UITypes.GuidancePanel);
}
public async void ShowGuidancePopupPanel(string nodeName)
{
popupPanelNode = nodeName;
if (!string.IsNullOrEmpty(popupPanelNode))
{
await UIManager.Instance.ShowUI(UITypes.GuidancePopupPanel);
UIManager.Instance.HideUI(UITypes.GuidancePanel);
}
}
void GuideNextEvent(GuideNextEvent guideLongEvent)
{
if (curDefine.fingerType != FingerType.None)
{
AddIndex();
}
}
public bool IsGuide(string panelName)
{
bool isGuide = curDefine != null;
if (!isGuide)
{
InspectTriggerGuide(panelName);
}
return curDefine != null && curDefine.panelName == panelName;
}
public bool IsGuide(string panelName, int index, GroupName groupName)
{
bool isGuide = curDefine != null;
if (isGuide && curGroupDefine.groupName == groupName && curSaveData.guideSubIndex == index)
{
InspectTriggerGuide(panelName);
return true;
}
return false;// curDefine != null && curDefine.panelName == panelName;
}
public void Save()
{
PlayFabMgr.Instance.UpdateUserDataValue("GuideSaveData", JsonMapper.ToJson(GuideSaveDataDic));
}
public void Dispose()
{
disposable?.Dispose();
disposable = null;
disposable2?.Dispose();
disposable2 = null;
disposable3?.Dispose();
disposable3 = null;
}
}
}