Files
SVSimServer/SVSim.BattleEngine/Engine/Wizard/StorySelectPage.cs
gamer147 957af3d1ec feat(battle-engine): full Unity/VFX/god-object shims + expanded copy closure (2570 files)
Authored Unity primitive/object-model shim, VFX layer (control-flow-preserving, InstantVfx never invokes its action -- headless suppression), god-object stubs (GameMgr/EffectMgr/UIManager with faithfully-extracted nested enums), View/UI/Touch tree, LitJson+BetterList+Tuple copied, third-party stubs. Discovered Roslyn header-error masking: fixing class-header type errors unmasks body references, so the true copy closure is ~2570 files (was 782 under masking). Errors: masked-25720 -> 268; our shim files compile clean. Remaining: ~50 residual shim/external types, 24 NGUI UI-base overrides, static-type fixes, plus likely 1-2 more unmask waves.
2026-06-05 17:22:20 -04:00

409 lines
12 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using Cute;
using UnityEngine;
using Wizard.Story;
namespace Wizard;
public class StorySelectPage : UIBase
{
private const int NO_SECTION_ID = -1;
private const int PROLOGUE_SECTION_ID = 0;
private const int MAX_NUM_BTN_IN_TABLE = 6;
private const float DRAG_DEGREE = 70f;
private const float MOVE_PAGE_DURATION = 0.2f;
[SerializeField]
private GameObject _backGroundObj;
[SerializeField]
private UIAnchor _backGroundEffectAnchor;
[SerializeField]
private UIGrid _sectionTableParent;
[SerializeField]
private UIGrid _originalSectionTable;
[SerializeField]
private StorySectionBtn _originalSectionBtn;
[SerializeField]
private BoxCollider _flickCollider;
[SerializeField]
private BoxCollider _leftButton;
[SerializeField]
private BoxCollider _rightButton;
[SerializeField]
private UIPageIndicator _indicator;
[SerializeField]
private GameObject _mainStoryBgRoot;
[SerializeField]
private GameObject _limitedStoryBgRoot;
[SerializeField]
private UITexture _limitedStoryBgTexture;
[SerializeField]
private GameObject _bgEffectRoot;
private string _limitedStoryBgTextureName = "bg_limited_story";
private string _limitedStoryBgEffectName = "cmn_bg_limited_story_1";
private readonly Vector3 EFFECT_SCALE = new Vector3(320f, 320f, 320f);
private List<UIGrid> _sectionTableList = new List<UIGrid>();
private List<StorySectionBtn> _sectionBtnList = new List<StorySectionBtn>();
private List<string> _loadPathList = new List<string>();
private TopBar _topBar;
private Vector3 _parentFirstPos;
private int _currentPage;
private bool _isChangePage;
private string _lastChapterClearTextId;
public static int SelectSectionId = -1;
private SelectedStoryInfo SelectedStoryInfo => Data.SelectedStoryInfo;
private UIManager.ViewScene ChapterSelectionView => SelectedStoryInfo.ChapterSelectionView;
private bool IsEntranceLimitedStory => SelectedStoryInfo.StoryEntranceType == StoryEntranceType.LimitedStory;
public override void onFirstStart()
{
_backGroundObj.SetLayer(LayerMask.NameToLayer("FrontUI"), isSetChildren: true);
_backGroundEffectAnchor.uiCamera = NGUITools.FindCameraForLayer(_backGroundEffectAnchor.gameObject.layer);
base.IsShowFooterMenu = true;
base.onFirstStart();
}
protected override void onOpen()
{
base.onOpen();
ResetSelectedStoryInfo();
_mainStoryBgRoot.SetActive(!IsEntranceLimitedStory);
_limitedStoryBgRoot.SetActive(IsEntranceLimitedStory);
StorySectionTask storySectionTask = new StorySectionTask(SelectedStoryInfo);
storySectionTask.SetParameter(isDispFirstTips: false);
StartCoroutine(Toolbox.NetworkManager.Connect(storySectionTask, delegate
{
InitOrRedirect();
}));
}
protected override void onClose()
{
Final();
base.onClose();
}
private void InitOrRedirect()
{
StorySectionData storySectionData = null;
if (SelectSectionId != -1)
{
storySectionData = Data.StoryWorldDataManager.FindSectionData(SelectSectionId);
SelectSectionId = -1;
}
if (storySectionData != null)
{
ChangeViewBySectionData(storySectionData, isRedirect: true);
}
else
{
Init();
}
UIManager.GetInstance()._Footer.TurnOffStoryBadgeIcon(isTurnOffDisplayBadgeFlag: true);
}
private void Init()
{
InitTopBar();
InitFooter();
InitStorySelect();
}
private void Final()
{
Toolbox.ResourcesManager.RemoveAssetGroup(_loadPathList);
_loadPathList.Clear();
}
private void InitTopBar()
{
UIManager.ChangeViewSceneParam changeViewSceneParam = new UIManager.ChangeViewSceneParam();
changeViewSceneParam.MyPageMenuIndex = 1;
changeViewSceneParam.IsCutCardMotion = true;
_topBar = UIManager.GetInstance().CreateTopBar(base.gameObject, Data.SystemText.Get("Story_0059"), UIManager.ViewScene.MyPage, MoneyDraw: false, changeViewSceneParam);
_topBar.gameObject.layer = LayerMask.NameToLayer("MyPage");
}
private void InitFooter()
{
UIManager instance = UIManager.GetInstance();
instance.setBackScene(base.gameObject, UIManager.ViewScene.MyPage);
instance._Footer.UpdateCurrentIndex(1);
}
private void InitStorySelect()
{
_parentFirstPos = _sectionTableParent.transform.localPosition;
UIEventListener uIEventListener = UIEventListener.Get(_flickCollider.gameObject);
uIEventListener.onDrag = (UIEventListener.VectorDelegate)Delegate.Combine(uIEventListener.onDrag, new UIEventListener.VectorDelegate(OnDragPanel));
UIEventListener uIEventListener2 = UIEventListener.Get(_rightButton.gameObject);
uIEventListener2.onClick = (UIEventListener.VoidDelegate)Delegate.Combine(uIEventListener2.onClick, (UIEventListener.VoidDelegate)delegate
{
NextPage();
});
UIEventListener uIEventListener3 = UIEventListener.Get(_leftButton.gameObject);
uIEventListener3.onClick = (UIEventListener.VoidDelegate)Delegate.Combine(uIEventListener3.onClick, (UIEventListener.VoidDelegate)delegate
{
PrevPage();
});
StartCoroutine(LoadImages(delegate
{
SetSectionBtn();
_indicator.Init(_sectionTableList.Count);
ChangePage(1);
UIManager.GetInstance().OnReadyViewScene(isFadein: true, null, OnFinishFadeIn);
}));
}
private void OnDragPanel(GameObject obj, Vector2 dir)
{
if (dir.x >= 70f)
{
PrevPage();
}
else if (dir.x <= -70f)
{
NextPage();
}
}
private void NextPage()
{
if (ChangePage(_currentPage + 1))
{
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_SLIDE_BTN);
}
}
private void PrevPage()
{
if (ChangePage(_currentPage - 1))
{
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_SLIDE_BTN);
}
}
private bool ChangePage(int page, bool isAnimation = true)
{
if (_isChangePage)
{
return false;
}
if (!IsValidPage(page))
{
return false;
}
_currentPage = page;
Vector3 vector = _parentFirstPos + Vector3.left * _sectionTableParent.cellWidth * (page - 1);
if (isAnimation)
{
TweenPosition tweenPosition = TweenPosition.Begin(_sectionTableParent.gameObject, 0.2f, vector);
_isChangePage = true;
tweenPosition.SetOnFinished(delegate
{
_isChangePage = false;
});
}
else
{
_sectionTableParent.transform.localPosition = vector;
_isChangePage = false;
}
_rightButton.gameObject.SetActive(IsValidPage(page + 1));
_leftButton.gameObject.SetActive(IsValidPage(page - 1));
_indicator.UpdateIndicator(page);
return true;
}
private bool IsValidPage(int page)
{
if (_sectionTableList.Count > 0 && page > 0)
{
return page <= _sectionTableList.Count;
}
return false;
}
private void ChangeViewBySectionData(StorySectionData inSectionData, bool isRedirect = false)
{
if (inSectionData.Id == 0)
{
OnClickTutorialSectionBtn();
return;
}
SelectedStoryInfo.SetSection(inSectionData);
GameMgr.GetIns().GetDataMgr().m_BattleType = DataMgr.BattleType.Story;
UIManager.ChangeViewSceneParam changeViewSceneParam = new UIManager.ChangeViewSceneParam();
if (isRedirect)
{
changeViewSceneParam.WaitTime = 0f;
}
if (inSectionData.IsLeaderSelect)
{
UIManager.GetInstance().ChangeViewScene(UIManager.ViewScene.ClassSelectionPage, changeViewSceneParam, ClassSelectionPageParam.CreateStorySelect());
}
else
{
UIManager.GetInstance().ChangeViewScene(ChapterSelectionView, changeViewSceneParam);
}
}
private void OnClickTutorialSectionBtn()
{
SelectedStoryInfo.SetSection(StorySection.TUTORIAL_SECTION_ID);
SelectedStoryInfo.SetSectionChara(500008);
UIManager.GetInstance().ChangeViewScene(UIManager.ViewScene.AreaSelect);
}
private IEnumerator LoadImages(Action callBack)
{
IReadOnlyList<StorySectionData> sectionDatas = Data.StoryWorldDataManager.SectionDatas;
ResourcesManager resMgr = Toolbox.ResourcesManager;
List<string> assetList = new List<string>();
for (int i = 0; i < sectionDatas.Count; i++)
{
string imageName = sectionDatas[i].ImageName;
assetList.Add(resMgr.GetAssetTypePath($"{imageName}_off", ResourcesManager.AssetLoadPathType.UiStory));
assetList.Add(resMgr.GetAssetTypePath($"{imageName}_on", ResourcesManager.AssetLoadPathType.UiStory));
}
if (IsEntranceLimitedStory)
{
assetList.Add(resMgr.GetAssetTypePath(_limitedStoryBgTextureName, ResourcesManager.AssetLoadPathType.UiStory));
assetList.Add(resMgr.GetAssetTypePath(_limitedStoryBgEffectName, ResourcesManager.AssetLoadPathType.Effect2D));
}
yield return StartCoroutine(resMgr.LoadAssetGroupAsync(assetList, null));
_loadPathList.AddRange(assetList);
if (IsEntranceLimitedStory)
{
bool isLoadBGEffect = false;
GameObject effectObject = UnityEngine.Object.Instantiate(resMgr.LoadObject<GameObject>(resMgr.GetAssetTypePath(_limitedStoryBgEffectName, ResourcesManager.AssetLoadPathType.Effect2D, isfetch: true)));
effectObject.transform.SetParent(_bgEffectRoot.transform);
effectObject.transform.localScale = EFFECT_SCALE;
_limitedStoryBgTexture.mainTexture = resMgr.LoadObject(resMgr.GetAssetTypePath(_limitedStoryBgTextureName, ResourcesManager.AssetLoadPathType.UiStory, isfetch: true)) as Texture;
_loadPathList.AddRange(GameMgr.GetIns().GetEffectMgr().SetUIParticleShader(effectObject, delegate
{
isLoadBGEffect = true;
}));
while (!isLoadBGEffect)
{
yield return null;
}
effectObject.SetActive(value: true);
}
callBack.Call();
}
private void SetSectionBtn()
{
IReadOnlyList<StorySectionData> sectionDatas = Data.StoryWorldDataManager.SectionDatas;
_sectionBtnList.Clear();
for (int i = 0; i < sectionDatas.Count; i++)
{
StorySectionData data = sectionDatas[i];
CreateSectionBtn(onClickSectionBtn: (!data.IsSpoiler) ? ((Action)delegate
{
ChangeViewBySectionData(data);
}) : ((Action)delegate
{
CreateSpoilerConfirmationDialog(data);
}), sectionData: data);
}
_originalSectionBtn.gameObject.SetActive(value: false);
for (int num = 0; num < _sectionTableList.Count; num++)
{
_sectionTableList[num].Reposition();
}
_sectionTableParent.Reposition();
}
public void CreateSpoilerConfirmationDialog(StorySectionData inSectionData)
{
SystemText systemText = Data.SystemText;
DialogBase dialogBase = UIManager.GetInstance().CreateDialogClose();
dialogBase.SetButtonLayout(DialogBase.ButtonLayout.BlueBtn_CancelBtn);
dialogBase.SetTitleLabel(systemText.Get("Story_0080"));
dialogBase.SetButtonText(systemText.Get("Story_0081"));
string text = inSectionData.Name;
text = text.Replace("\n", " ");
string text2 = systemText.Get("Story_0076", text, Data.Master.GetStorySectionTitleText(inSectionData.SpoilerMessage));
dialogBase.SetText(text2);
dialogBase.onPushButton1 = delegate
{
ChangeViewBySectionData(inSectionData);
};
}
private void CreateSectionBtn(StorySectionData sectionData, Action onClickSectionBtn)
{
if (_sectionBtnList.Count % 6 == 0)
{
_sectionTableList.Add(NGUITools.AddChild(_sectionTableParent.gameObject, _originalSectionTable.gameObject).GetComponent<UIGrid>());
}
GameObject obj = NGUITools.AddChild(_sectionTableList[_sectionTableList.Count - 1].gameObject, _originalSectionBtn.gameObject);
StorySectionBtn component = obj.GetComponent<StorySectionBtn>();
bool isLimitedOrEventStory = sectionData.StoryApiType == StoryApiType.LimitedStory || sectionData.StoryApiType == StoryApiType.EventStory;
component.SetData(sectionData, onClickSectionBtn, isLimitedOrEventStory);
component.DispNewMark(sectionData.IsNew);
_sectionBtnList.Add(component);
UIEventListener uIEventListener = UIEventListener.Get(obj.gameObject);
uIEventListener.onDrag = (UIEventListener.VectorDelegate)Delegate.Combine(uIEventListener.onDrag, new UIEventListener.VectorDelegate(OnDragPanel));
}
private void OnFinishFadeIn()
{
if (_lastChapterClearTextId != null)
{
SystemText systemText = Data.SystemText;
DialogBase dialogBase = UIManager.GetInstance().CreateDialogClose();
dialogBase.SetButtonLayout(DialogBase.ButtonLayout.OkBtn);
dialogBase.SetTitleLabel(systemText.Get("Common_0021"));
dialogBase.SetButtonText(systemText.Get("Common_0004"));
dialogBase.SetText(systemText.Get(_lastChapterClearTextId));
dialogBase.OnClose = delegate
{
AreaSelectUI.CheckPreBuildDeckConfirmDialog();
};
_lastChapterClearTextId = null;
}
}
private void ResetSelectedStoryInfo()
{
_lastChapterClearTextId = SelectedStoryInfo.LastChapterClearTextId;
SelectedStoryInfo.ClearInfoForSectionSelectionScene();
}
}