using System.Collections.Generic; using cfg.CharacterCfg; using cfg.ShowCfg; using Cysharp.Threading.Tasks; using TMPro; using UnityEngine; using UnityEngine.UI; using Button = UnityEngine.UI.Button; using Image = UnityEngine.UI.Image; using Framework; using Gameplay; using Gameplay.SubSystems; using PhxhSDK; using System.Threading; using UnityEngine.EventSystems; using UnityEngine.Events; using System; using cfg.ActorCfg; 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 public static async UniTask Open() { await CommonUtils.CaptureScreenshot(); 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 _charIDList; private List _displayIDList; private int _curSelect; //当前选择的角色 private int _curSelectSkin; //当前选择的皮肤 private List _skinDataList; //当前选择角色的皮肤列表 private bool _isHidePoster = false;//立绘显示开关 private bool PosterHide { set { _isHidePoster = value; RefreshPosterHideButton(); } } private MainPanelSceneStoreData _saveData; // deal with input data public override void PreLoad(object data = null) { } // 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")); _charIDList = new List(); var charList = CharacterDataInfoManager.Instance.DataList; for (int i = 0; i < charList.Count; i++) { _charIDList.Add(charList[i].Uid); } BindSceneScrollView(); BindSkinScrollView(); BindButton(Button_Back, _OnClickClose); BindButton(Button_ChangePoster, _OnClickPosterTab); BindButton(Button_ChangeScene, _OnClickSceneTab); 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, _OnClickSortBtn, SortType.Likely); BindButton(Button_HidePic, OnClickHideKanbanban); BindButton(Button_HidePicDown, OnClickHideKanbanban); BindButton(Button_ChangeLocation, OnClickAdjustPoster); EventManager.Instance.Register(EventManager.EventName.MainPanelPosterRelocate, ResetPosterPosition); } //invoke when open window protected override void OnShowWindow(object data = null) { base.OnShowWindow(data); _InitSceneScroll(); _InitPosterScroll(); _Refresh(); } //invoke when reload window protected override void OnReloadWindow(object data = null) { } //invoke when close window protected override void OnHideWindow() { } //invoke when destroy public override void OnRelease() { base.OnRelease(); SceneScrollView.Release(); SkinScrollView.Release(); EventManager.Instance.Unregister(EventManager.EventName.MainPanelPosterRelocate, ResetPosterPosition); } #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(true); _RefreshPosterButton(); SkinScrollView.UpdateData(); //await UniTask.DelayFrame(1); SkinScrollView.ScrollTo(index); break; } default: break; } } #region DropDown private void _DropDown() { } #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