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.
This commit is contained in:
408
SVSim.BattleEngine/Engine/Wizard/StorySelectPage.cs
Normal file
408
SVSim.BattleEngine/Engine/Wizard/StorySelectPage.cs
Normal file
@@ -0,0 +1,408 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user