using cfg.ActorCfg; using cfg.CharacterCfg; using cfg.ShowCfg; using Cysharp.Threading.Tasks; using Framework; using Gameplay; using Gameplay.SubSystems; using PhxhSDK; using System; using System.Collections.Generic; using System.Threading; using TMPro; using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems; using UnityEngine.UI; using Button = UnityEngine.UI.Button; using Image = UnityEngine.UI.Image; public class UICameraAndPosterChangeController : UIWindow { # region UI GameObj ///Auto Gen Start/// public Image Image_CBG; public Button Button_Back; public TMP_Text Text_Back; public Button Button_Home; public Button Button_Scene01; public Button Button_Scene02; public Image Image_View01; public Image Image_View02; public Image Image_View03; public TMP_Text Text_ChangeThisScene; public Button Button_Scene03; public Button Button_Scene04; public Button Button_Confirm; public TMP_Text Text_BtnConfirm; public Button Button_Cancel; public Button Button_ChangePoster; public TMP_Text Text_ChangePoster; public Button Button_ChangeScene; public TMP_Text Text_ChangeScene; public Image Image_Menu; public Button Button_Rarity; public TMP_Text Text_Rarity; public TMP_Text Text_RaritySelect; public Button Button_Level; public TMP_Text Text_Lv; public TMP_Text Text_LvSelect; public Image Image_Lv; //public Image Image_Down1; public Button Button_AdvanceLevel; public TMP_Text Text_AdvSelect; public TMP_Text Text_Advance; //public Image Image_Down2; public TMP_Dropdown Dropdown_ChangeLevel; public TMP_Text Text_Profession; public Button Button_Confirm01; public TMP_Text Text_Confirm; public Button Button_Cancel01; public Button Button_ChangeLocation; public Button Button_HidePic; public Button Button_HidePicDown; ///Auto Gen End/// #endregion private UITextDropdown otherDropDown; public static async UniTask Open() { CommonUtils.CaptureScreenshot(false); return await UIManager.Instance.CreateAndOpenWindow(UINameConst.UICameraAndPosterChange); } /// /// 在首页编辑完成看板娘之后重新激活显示此界面 /// /// /// public static void ShowWindowInactived(Vector2 deltaPos, float scale) { UIManager.Instance.Show(UINameConst.UICameraAndPosterChange, isMainCameraClose: false);//显示弹窗界面时关闭主相机 EventManager.Instance.Send(EventManager.EventName.MainPanelPosterRelocate, new MainPanelSceneStoreData(0, 0, 0, 0, deltaPos, scale)); } /// /// 背景模糊 /// private RawImage rawImageGaussianBlurMask; //test data private List _testImgList = new() { "Assets/Art/UI/Texture/CameraChange/NewCameraChange/UI_Pic01.png", "Assets/Art/UI/Texture/CameraChange/NewCameraChange/UI_Pic02.png", "Assets/Art/UI/Texture/CameraChange/NewCameraChange/UI_Pic03.png", "Assets/Art/UI/Texture/CameraChange/NewCameraChange/UI_Pic04.png", }; private enum PageEnum { Scene, Poster } private enum SortType { None, Rarity, Level, Likely } private PageEnum _curPage = PageEnum.Poster;//当前切页 private GameObject _sceneObj; private GameObject _posterObj; private SortType _sortType = SortType.None; private bool _isUpSort = true; private ScenePanelScrollView SceneScrollView = new();//场景切换页面列表类 private SkinPanelScrollView SkinScrollView = new();//看板娘皮肤切换列表类 private int _curSceneIndex; private int _curCameraPosIdx; //立绘切换页面 private RecycleView _scrollPosterPool; //private PhxhScrollView _scrollSkin; //private GameObject _skinItemTemp; ///// ///// 所有角色列表 ///// //private List listAllCharacter = new(); private List _charIDList; private List _displayIDList; private int _curSelect; //当前选择的角色 private int _curSelectSkin; //当前选择的皮肤 private List _skinDataList; //当前选择角色的皮肤列表 private List _skinPathList;//预加载的皮肤图片路径 private bool _isHidePoster = false;//立绘显示开关 private bool inPosterEdit = false;//是否在编辑立绘 private bool PosterHide { set { _isHidePoster = value; Image_CBG.gameObject.SetActive(!_isHidePoster); RefreshPosterHideButton(); } } private MainPanelSceneStoreData _saveData; // deal with input data public override void PreLoad(object data = null) { _charIDList = new List(); var charList = CharacterDataInfoManager.Instance.DataList; for (int i = 0; i < charList.Count; i++) { _charIDList.Add(charList[i].Uid); //listAllCharacter.Add(charList[i]); } var storeData = StorageMgr.Instance.GetStorage("MainPanelSceneStoreData"); if (storeData != null) { _curSelect = GetPosterIndexByID(storeData.PosterID); _curSelectSkin = storeData.PosterSkinIdx; } #region 首个角色半身图片预加载 _skinDataList = CommonUtils.GetCharacterSkinCfgList((int)_charIDList[_curSelect]); _skinPathList = new(); PreLoadCurCharacterSkin(); #endregion } /// /// 当_skinDataList变更时,预加载所需的图片 /// void PreLoadCurCharacterSkin() { for (int i = 1; i <= _skinDataList.Count; i++) { var posterPic = CommonUtils.GetCharacterPicPath((int)_charIDList[_curSelect], CommonUtils.ECharacterPicPathType.Favorable, i); if (!_skinPathList.Contains(posterPic)) { _skinPathList.Add(posterPic); AssetManager.Instance.PostPreload(posterPic).Forget(); } } } // Use this for initialization public override void OnInit() { CommonUtils.ScreenshotReset(); //bind UI GameObj UICameraAndPosterChangeBinder.GetComponents(this); rawImageGaussianBlurMask = GetComponent("GaussianBlurMask"); _sceneObj = FindObj("ImageBG/SceneChange"); _posterObj = FindObj("ImageBG/PosterChange"); rawImageGaussianBlurMask.texture = CommonUtils.GetScreenTexture2D(); SceneScrollView.SetScrollRect(GetComponent("ImageBG/SceneChange/SceneScrollView")); SceneScrollView.InitItemCellList(SceneScrollView.SceneItemCount()); _scrollPosterPool = GetComponent("ImageBG/PosterChange/ChangeHeadPic/PosterScrollView"); SkinScrollView.SetScrollRect(GetComponent("ImageBG/PosterChange/ChangeSkin/ScrollView")); BindSceneScrollView(); BindSkinScrollView(); BindButton(Button_Back, _OnClickClose); BindButton(Button_ChangePoster, _OnClickPosterTab); Button_ChangePoster.gameObject.SetActive(false); BindButton(Button_ChangeScene, _OnClickSceneTab); Button_ChangeScene.gameObject.SetActive(false); DebugUtil.Log("暂时关闭切换场景功能"); BindButton(Button_Confirm, _OnClickSceneConfirm); BindButton(Button_Confirm01, _OnClickPosterConfirm); BindButton(Button_Home, _OnClickHome); BindButton(Button_Rarity, _OnClickSortBtn, SortType.Rarity); BindButton(Button_Level, _OnClickSortBtn, SortType.Level); BindButton(Button_AdvanceLevel, _OnClickAdvanceButton); BindButton(Button_HidePic, OnClickHideKanbanban); BindButton(Button_HidePicDown, OnClickHideKanbanban); BindButton(Button_ChangeLocation, OnClickAdjustPoster); otherDropDown = new UITextDropdown(FindObj("ImageBG/PosterChange/Image_Menu/Dropdown_ChangeLevel"), FindObj("ImageBG/PosterChange/Image_Menu/Button_AdvanceLevel/Text_Advance"), OtherDropdownValueChanged, OtherDropdownData2Text); List listDropDownData = new(); foreach (SortType sortType in Enum.GetValues(typeof(SortType))) { if (sortType == SortType.None) continue; if (sortType == SortType.Rarity) continue; if (sortType == SortType.Level) continue; listDropDownData.Add((int)sortType); } otherDropDown.SetData(listDropDownData); EventManager.Instance.Register(EventManager.EventName.MainPanelPosterRelocate, ResetPosterPosition); } //invoke when open window protected override void OnShowWindow(object data = null) { base.OnShowWindow(data); _InitSceneScroll(); _InitPosterScroll(); _Refresh(); CameraManager.Instance.SetMainCameraActive(false); } //invoke when reload window protected override void OnReloadWindow(object data = null) { } //invoke when close window protected override void OnHideWindow() { CameraManager.Instance.SetMainCameraActive(true); } //invoke when destroy public override void OnRelease() { base.OnRelease(); SceneScrollView.Release(); SkinScrollView.Release(); EventManager.Instance.Unregister(EventManager.EventName.MainPanelPosterRelocate, ResetPosterPosition); #region 卸载预加载内容 foreach (var path in _skinPathList) { AssetManager.Instance.Unload(path); } #endregion } public override UniTask OnBack(object data = null) { if (inPosterEdit) { EventManager.Instance.Send(EventManager.EventName.MainPanelPosterRelocateCancel); return new UniTask(true); } if (_CheckAndSaveChange()) return new UniTask(true); return base.OnBack(data); } #region #Event Function protected override void OnUpdate() { base.OnUpdate(); } #endregion /// /// 刷新界面 /// #region RefreshPanel private void _Refresh() { _RefreshTab(); } private void _RefreshTab() { switch (_curPage) { case PageEnum.Scene: { int index = _curSceneIndex; //暂时关闭切换功能 //Button_ChangePoster.gameObject.SetActive(false); //Button_ChangeScene.gameObject.SetActive(true); // _sceneObj.SetActive(true); _posterObj.SetActive(false); Image_CBG.gameObject.SetActive(false); Button_ChangeLocation.gameObject.SetActive(false); Button_HidePic.gameObject.SetActive(false); Button_HidePicDown.gameObject.SetActive(false); _SetPosYListData(); SceneScrollView.UpdateData(); //await UniTask.DelayFrame(1); SceneScrollView.ScrollTo(index); //LayoutRebuilder.ForceRebuildLayoutImmediate(_sceneScrollContent.GetComponent()); break; } case PageEnum.Poster: { int index = _curSelectSkin; //暂时关闭切换功能 //Button_ChangePoster.gameObject.SetActive(true); //Button_ChangeScene.gameObject.SetActive(false); _sceneObj.SetActive(false); _posterObj.SetActive(true); Image_CBG.gameObject.SetActive(!_isHidePoster); _RefreshPosterButton(); SkinScrollView.UpdateData(); //await UniTask.DelayFrame(1); SkinScrollView.ScrollTo(index); break; } default: break; } } #region DropDown private void _DropDown() { } private void OtherDropdownValueChanged(int value) { advanceSortType = (SortType)value; } private string OtherDropdownData2Text(int value) { return GetCharactererSortTypeLocalize((SortType)value); } string GetCharactererSortTypeLocalize(SortType type) { return type switch { SortType.Rarity => CommonUtils.GetLocalizeText("cultivate_Button_Rarity"), SortType.Level => CommonUtils.GetLocalizeText("cultivate_Button_Level"), SortType.Likely => CommonUtils.GetLocalizeText("culitivate_likely"), _ => "", }; } #endregion /// /// 更换场景 /// #region ScenePage void BindSceneScrollView() { //SceneScrollView.AddValueChangeListener(_OnScrollViewValChange); SceneScrollView.SetItemCountFunc(SceneScrollView.SceneItemCount); SceneScrollView.SetItemSizeFunc((index) => SceneScrollView.SceneItemSize(index, _curSceneIndex));//GetItemSizeFromList(index));// SceneScrollView.SetUpdateFunc(_RefreshSceneItem); } private void _RefreshSceneButtons() { if (_saveData != null) { if (_curSceneIndex == _saveData.SceneIdx && _curCameraPosIdx == _saveData.CameraPosIdx) { Button_Confirm.gameObject.SetActive(false); Button_Cancel.gameObject.SetActive(true); } else { Button_Confirm.gameObject.SetActive(true); Button_Cancel.gameObject.SetActive(false); } return; } var storeData = StorageMgr.Instance.GetStorage("MainPanelSceneStoreData"); if (storeData != null) { if (_curSceneIndex == storeData.SceneIdx && _curCameraPosIdx == storeData.CameraPosIdx) { Button_Confirm.gameObject.SetActive(false); Button_Cancel.gameObject.SetActive(true); } else { Button_Confirm.gameObject.SetActive(true); Button_Cancel.gameObject.SetActive(false); } } } private void _RefreshSingleItem(GameObject go, int index) { var btnScene = CommonUtils.GetComponent