NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/UICameraAndPosterChangeCont...

1013 lines
26 KiB
C#

using System.Collections;
using System.Collections.Generic;
using BehaviorDesigner.Runtime.Tasks.Unity.UnityGameObject;
using cfg.CharacterCfg;
using cfg.ShowCfg;
using Cysharp.Threading.Tasks;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.UIElements;
using Button = UnityEngine.UI.Button;
using Image = UnityEngine.UI.Image;
using Toggle = UnityEngine.UI.Toggle;
using ScrollView = PhxhSDK.PhxhScrollView;
using Framework;
using Gameplay;
using Gameplay.SubSystems;
using PhxhSDK;
using UnityEditor;
public class UICameraAndPosterChangeController : UIWindow
{
//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;
///Auto Gen End///
public static async UniTask<UIWindow> Open()
{
CommonUtils.CaptureScreenshot();
return await UIManager.Instance.CreateAndOpenWindow(UINameConst.UICameraAndPosterChange);
}
/// <summary>
/// 背景模糊
/// </summary>
private RawImage rawImageGaussianBlurMask;
//test data
private List<string> _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 ScrollRect _sceneScrollRect;
private GameObject _sceneScrollContent;
//场景滑动列表相关
private List<float> _itemPosYList;
private List<GameObject> _sceneItemList;
private int _curSceneIndex;
private int _curCameraPosIdx;
private float _scrollMidPosY;
private RectTransform _itemFullRectTrans;
private RectTransform _itemRectTrans;
//立绘切换页面
private RecycleView _scrollPosterPool;
private ScrollRect _scrollSkin;
private GameObject _skinItemTemp;
private List<uint> _charIDList;
private List<uint> _displayIDList;
private int _curSelect; //当前选择的角色
private int _curSelectSkin; //当前选择的皮肤
private List<DataCharacterSkin> _skinDataList; //当前选择角色的皮肤列表
private MainPanelSceneStoreData _saveData;
// deal with input data
public override void PreLoad(object data = null)
{
}
// Use this for initialization
public override void OnInit()
{
//bind UI GameObj
UICameraAndPosterChangeBinder.GetComponents(this);
rawImageGaussianBlurMask = GetComponent<RawImage>("GaussianBlurMask");
_sceneObj = FindObj("ImageBG/SceneChange");
_posterObj = FindObj("ImageBG/PosterChange");
_sceneScrollRect = GetComponent<ScrollRect>("ImageBG/SceneChange/SceneScrollView");
_sceneScrollContent = CommonUtils.GetGameObject(_sceneScrollRect.gameObject,"Viewport/Content");
rawImageGaussianBlurMask.texture = CommonUtils.screenTexture;
_sceneItemList = new List<GameObject>();
_itemPosYList = new List<float>();
for (int i = 0; i < _sceneScrollContent.transform.childCount; i++)
{
var item = _sceneScrollContent.transform.GetChild(i);
_sceneItemList.Add(item.gameObject);
}
_scrollMidPosY = -_sceneScrollRect.GetComponent<RectTransform>().rect.height * 0.5f;
_itemRectTrans = CommonUtils.GetComponent<RectTransform>(_sceneItemList[0], "ButtonScene");
_itemFullRectTrans = CommonUtils.GetComponent<RectTransform>(_sceneItemList[0], "ButtonSceneFull");
_scrollPosterPool = GetComponent<RecycleView>("ImageBG/PosterChange/ChangeHeadPic/PosterScrollView");
_scrollSkin = GetComponent<ScrollRect>("ImageBG/PosterChange/ChangeSkin/ScrollView");
_skinItemTemp = FindObj("ImageBG/PosterChange/ChangeSkin/ItemSkin");
_charIDList = new List<uint>();
var charList = CharacterDataInfoManager.Instance.DataList;
for (int i = 0; i < charList.Count; i++)
{
_charIDList.Add(charList[i].Uid);
}
_sceneScrollRect.onValueChanged.AddListener(_OnScrollViewValChange);
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);
}
//invoke when open window
protected override void OnShowWindow(object data = null)
{
_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();
_sceneItemList.Clear();
_itemPosYList.Clear();
}
#region #Event Function
protected override void OnUpdate()
{
base.OnUpdate();
}
#endregion
/// <summary>
/// 刷新界面
/// </summary>
#region RefreshPanel
private void _Refresh()
{
_RefreshTab();
}
private void _RefreshTab()
{
switch (_curPage)
{
case PageEnum.Scene:
{
Button_ChangePoster.gameObject.SetActive(false);
Button_ChangeScene.gameObject.SetActive(true);
_sceneObj.SetActive(true);
_posterObj.SetActive(false);
Image_CBG.gameObject.SetActive(false);
LayoutRebuilder.ForceRebuildLayoutImmediate(_sceneScrollContent.GetComponent<RectTransform>());
break;
}
case PageEnum.Poster:
{
Button_ChangePoster.gameObject.SetActive(true);
Button_ChangeScene.gameObject.SetActive(false);
_sceneObj.SetActive(false);
_posterObj.SetActive(true);
Image_CBG.gameObject.SetActive(true);
_RefreshPosterButton();
break;
}
default:
break;
}
}
private void _RefreshPanel()
{
}
#region DropDown
private void _DropDown()
{
}
#endregion
/// <summary>
/// 更换场景
/// </summary>
#region ScenePage
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>("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 _RefreshSceneScroll()
{
for (int i = 0; i < _sceneItemList.Count; i++)
{
var item = _sceneItemList[i];
_RefreshSingleItem(item, i);
}
_RefreshSceneButtons();
LayoutRebuilder.ForceRebuildLayoutImmediate(_sceneScrollContent.GetComponent<RectTransform>());
}
private void _RefreshSingleItem(GameObject go, int index)
{
var btnScene = CommonUtils.GetComponent<Button>(go, "ButtonScene");
var btnFull = CommonUtils.GetComponent<Button>(go, "ButtonSceneFull");
List<Button> btnViewList = new List<Button>();
for (int i = 0; i < 3; i++)
{
var btn = CommonUtils.GetComponent<Button>(go, "ButtonSceneFull/ImageView" + i);
btnViewList.Add(btn);
}
if (_curSceneIndex == index)
{
btnFull.gameObject.SetActive(true);
btnScene.gameObject.SetActive(false);
_RefreshItemView(_sceneItemList[_curSceneIndex]);
}
else
{
btnScene.gameObject.SetActive(true);
btnFull.gameObject.SetActive(false);
}
for (int i = 0; i < btnViewList.Count; i++)
{
var imgSelect = CommonUtils.GetGameObject(btnViewList[i].gameObject, "ImageYellow");
var imgGray = CommonUtils.GetGameObject(btnViewList[i].gameObject, "ImageGrey");
imgSelect.SetActive(_curCameraPosIdx == i);
imgGray.SetActive(_curCameraPosIdx != i);
ClearBind(btnViewList[i]);
BindButton(btnViewList[i], _OnClickCameraPos, i);
}
}
private void _RefreshItemView(GameObject go)
{
List<GameObject> goViewList = new List<GameObject>();
for (int i = 0; i < 3; i++)
{
var obj = CommonUtils.GetGameObject(go, "ButtonSceneFull/ImageView" + i);
goViewList.Add(obj);
}
for (int i = 0; i < goViewList.Count; i++)
{
var imgSelect = CommonUtils.GetGameObject(goViewList[i], "ImageYellow");
var imgGray = CommonUtils.GetGameObject(goViewList[i], "ImageGrey");
var imgMaskBg = CommonUtils.GetGameObject(goViewList[i], "ImageBlackCover");
imgSelect.SetActive(_curCameraPosIdx == i);
imgGray.SetActive(_curCameraPosIdx != i);
imgMaskBg.SetActive(_curCameraPosIdx == i);
}
}
private void _OnScrollViewValChange(Vector2 pos)
{
var curIndex = GetClosestIdx();
if (curIndex == _curSceneIndex)
{
return;
}
_curSceneIndex = curIndex;
_curCameraPosIdx = 0;
_SetPosYListData();
_RefreshSceneScroll();
}
private int GetClosestIdx()
{
int closest = _curSceneIndex;
var minDis = CommonUtils.GetComponent<RectTransform>(_sceneItemList[0], "ButtonScene").rect.height;
var maxDis = CommonUtils.GetComponent<RectTransform>(_sceneItemList[0], "ButtonSceneFull").rect.height;
for (int i = 0; i < _itemPosYList.Count; i++)
{
var verticalGroup = _sceneScrollRect.GetComponent<VerticalLayoutGroup>();
var contentOffset = _sceneScrollContent.GetComponent<RectTransform>().localPosition.y;
var start = contentOffset + _itemPosYList[i];
var end = start - minDis;
if (_curSceneIndex == i)
{
end = start - maxDis;
}
if (_scrollMidPosY < start && _scrollMidPosY > end)
{
//minDis = dis;
closest = i;
}
}
return closest;
}
private void _SetPosYListData()
{
_itemPosYList.Clear();
for (int i = 0; i < _sceneItemList.Count; i++)
{
var item = _sceneItemList[i];
var rectTrans = item.GetComponent<RectTransform>();
var posY = rectTrans.localPosition.y;
var contentPosY = _sceneScrollContent.GetComponent<RectTransform>().localPosition.y;
_itemPosYList.Add(posY);// - _itemRectTrans.rect.height);
}
}
private async void _InitSceneScroll()
{
var storeData = StorageMgr.Instance.GetStorage<MainPanelSceneStoreData>("MainPanelSceneStoreData");
_curSceneIndex = storeData.SceneIdx;
_curCameraPosIdx = storeData.CameraPosIdx;
_RefreshSceneScroll();
await UniTask.DelayFrame(1);
_SetPosYListData();
_RefreshSceneButtons();
}
#endregion
/// <summary>
/// 更换看板娘
/// </summary>
#region PosterPage
private void _InitPosterScroll()
{
_InitSelectCharacter();
_CreatePoolScroll();
_CreateSkinScroll();
_InitPosterImg();
}
private async void _InitPosterImg()
{
var posterPath = CommonUtils.GetCharacterPicPath((int)_charIDList[_curSelect],
CommonUtils.ECharacterPicPathType.Poster, _curSelectSkin + 1);
var posterSprite = await LoadAssetAsync<Sprite>(posterPath);
Image_CBG.sprite = posterSprite;
}
private void _RefreshCharList()
{
switch (_sortType)
{
case SortType.Level:
{
_charIDList.Sort((a, b) =>
{
var dataA = CharacterDataInfoManager.Instance.DataDic[a];
var dataB = CharacterDataInfoManager.Instance.DataDic[b];
if (dataA.Level > dataB.Level)
{
return _isUpSort? 1 : -1;
}
if (dataA.Level < dataB.Level)
{
return _isUpSort? -1 : 1;
}
return 0;
});
break;
}
case SortType.Rarity:
{
_charIDList.Sort((a, b) =>
{
var dataA = CharacterDataInfoManager.Instance.DataDic[a];
var dataB = CharacterDataInfoManager.Instance.DataDic[b];
return _isUpSort ? dataA.Cfg.StartStar.CompareTo(dataB.Cfg.StartStar) :
dataB.Cfg.StartStar.CompareTo(dataA.Cfg.StartStar);
});
break;
}
case SortType.Likely:
{
_charIDList.Sort((a, b) =>
{
var dataA = CharacterDataInfoManager.Instance.DataDic[a];
var dataB = CharacterDataInfoManager.Instance.DataDic[b];
return _isUpSort ? dataA.LikelyLevel.CompareTo(dataB.LikelyLevel) :
dataB.LikelyLevel.CompareTo(dataA.LikelyLevel);
});
break;
}
default:
{
_charIDList.Clear();
var charList = CharacterDataInfoManager.Instance.DataList;
for (int i = 0; i < charList.Count; i++)
{
_charIDList.Add(charList[i].Uid);
}
break;
}
}
}
private void _RefreshPosterPanel()
{
_RefreshCharList();
MainPanelSceneStoreData data;
if (_saveData != null)
{
data = _saveData;
}
else
{
data = StorageMgr.Instance.GetStorage<MainPanelSceneStoreData>("MainPanelSceneStoreData");
}
if (data != null)
{
_curSelect = GetPosterIndexByID(data.PosterID);
_curSelectSkin = data.PosterSkinIdx;
}
_RefreshImageMenu();
_RefreshPoolScroll();
_RefreshSkinScroll();
_RefreshPosterButton();
}
private void _RefreshImageMenu()
{
Text_RaritySelect.gameObject.SetActive(_sortType == SortType.Rarity);
Text_LvSelect.gameObject.SetActive(_sortType == SortType.Level);
Text_AdvSelect.gameObject.SetActive(_sortType == SortType.Likely);
var imgUpRarity = CommonUtils.GetGameObject(Button_Rarity.gameObject, "ImageDefault/ImageUP");
var imgDownRarity = CommonUtils.GetGameObject(Button_Rarity.gameObject, "ImageDefault/ImageDown");
var imgUpLevel = CommonUtils.GetGameObject(Image_Lv.gameObject, "ImageUP");
var imgDownLevel = CommonUtils.GetGameObject(Image_Lv.gameObject, "ImageDown");
var imgUpLikely = CommonUtils.GetGameObject(Button_AdvanceLevel.gameObject, "ImageDefault/ImageUP");
var imgDownLikely = CommonUtils.GetGameObject(Button_AdvanceLevel.gameObject, "ImageDefault/ImageDown");
imgUpRarity.SetActive(_sortType == SortType.Rarity && _isUpSort);
imgDownRarity.SetActive(_sortType == SortType.Rarity && !_isUpSort);
imgUpLevel.SetActive(_sortType == SortType.Level && _isUpSort);
imgDownLevel.SetActive(_sortType == SortType.Level && !_isUpSort);
imgUpLikely.SetActive(_sortType == SortType.Likely && _isUpSort);
imgDownLikely.SetActive(_sortType == SortType.Likely && !_isUpSort);
}
//右侧角色池列表
private void _CreatePoolScroll()
{
// var content = CommonUtils.GetGameObject(_scrollPosterPool.gameObject, "Viewport/Content");
// if (content)
// {
// CommonUtils.DestoryAllChildGameObject(content);
// }
_scrollPosterPool.Init(_RefreshPoolItem);
_RefreshPoolScroll();
}
private void _RefreshPoolScroll()
{
// _scrollPosterPool.SetUpdateFunc(_RefreshPoolItem);
// _scrollPosterPool.SetItemCountFunc(_GetPoolCountFunc);
// _scrollPosterPool.UpdateData(false);
// _scrollPosterPool.SetButton(_SetPoolItemButton);
_scrollPosterPool.ShowList(_GetPoolCountFunc());
}
private async void _RefreshPoolItem(GameObject go, int index)
{
//var go = item.gameObject;
var uid = _charIDList[index];
var headPicPath = CommonUtils.GetDefaultHeadPathByUid(uid);
var imgHead = CommonUtils.GetComponent<Image>(go, "ImageHead");
var btn = CommonUtils.GetComponent<Button>(go, "ImageHead");
var goSelect = CommonUtils.GetGameObject(go, "ImageHead/ImageChooseRect");
imgHead.sprite = await LoadAssetAsync<Sprite>(headPicPath);
goSelect.SetActive(_curSelect == index);
ClearBind(btn);
BindButton(btn, _OnClickPoolHeadItem, index);
go.SetActive(true);
}
private int _GetPoolCountFunc()
{
return _charIDList.Count;
}
//左侧角色皮肤列表
private void _CreateSkinScroll()
{
var content = CommonUtils.GetGameObject(_scrollSkin.gameObject, "Viewport/Content");
if (content)
{
CommonUtils.DestoryAllChildGameObject(content);
}
_RefreshSkinScroll();
}
private async void _RefreshSkinScroll()
{
// _scrollSkin.SetUpdateFunc(_RefreshSkinItem);
// _scrollSkin.SetItemCountFunc(_GetSkinItemFunc);
// _scrollSkin.UpdateData(false);
// _scrollSkin.SetButton(_SetSkinItemButton);
var content = CommonUtils.GetGameObject(_scrollSkin.gameObject, "Viewport/Content");
if (content)
{
CommonUtils.DestoryAllChildGameObject(content);
}
var contentTrans = content.transform;
int count = _GetSkinItemFunc();
for (int i = 0; i < count; i++)
{
var goItem = Instantiate(_skinItemTemp);
goItem.transform.SetParent(contentTrans);
await _RefreshSkinItem(i, goItem);
//LayoutRebuilder.ForceRebuildLayoutImmediate(goItem.GetComponent<RectTransform>());
}
await UniTask.DelayFrame(1);
LayoutRebuilder.ForceRebuildLayoutImmediate(content.GetComponent<RectTransform>());
}
private async UniTask _RefreshSkinItem(int index, GameObject go)
{
//var go = item.gameObject;
go.SetActive(true);
//var skinDataCfg = _skinDataList[index];
if (_curSelectSkin == index)
{
var posterPic =
CommonUtils.GetCharacterPicPath((int)_charIDList[_curSelect], CommonUtils.ECharacterPicPathType.Favorable, index + 1);
var imgSkin = CommonUtils.GetComponent<Image>(go, "ButtonChange/ImageSkin");
var imgSelect = CommonUtils.GetGameObject(go, "ButtonChange/ImageChooseRect");
var imgDoSelect = CommonUtils.GetGameObject(go, "ButtonChange/ImageCover");
var btnChange = CommonUtils.GetComponent<Button>(go, "ButtonChange");
var btnNotSelect = CommonUtils.GetComponent<Button>(go, "ButtonNotSelect");
imgSkin.sprite = await LoadAssetAsync<Sprite>(posterPic);
btnChange.gameObject.SetActive(true);
btnNotSelect.gameObject.SetActive(false);
imgSelect.SetActive(_curSelectSkin == index);
imgDoSelect.SetActive(_curSelectSkin != index);
ClearBind(btnChange);
ClearBind(btnNotSelect);
BindButton(btnChange, _OnClickSkinItem, index);
}
else
{
var imgSkin = CommonUtils.GetComponent<Image>(go, "ButtonNotSelect/ImageSkin");
//var imgSelect = CommonUtils.GetGameObject(go, "ButtonNotSelect/ImageChooseRect");
var posterPic =
CommonUtils.GetCharacterPicPath((int)_charIDList[_curSelect], CommonUtils.ECharacterPicPathType.Favorable, index + 1);
var sprite = await LoadAssetAsync<Sprite>(posterPic);
var rect = imgSkin.GetComponent<RectTransform>().rect;
//sprtie.rect.Set(sprtie.rect.x, sprtie.rect.y, rect.width, rect.height);
//sprite = _CropSprite(sprite, new Rect(sprite.rect.x, sprite.rect.y, rect.width, rect.height));
imgSkin.sprite = sprite;
var btnChange = CommonUtils.GetComponent<Button>(go, "ButtonChange");
var btnNotSelect = CommonUtils.GetComponent<Button>(go, "ButtonNotSelect");
btnChange.gameObject.SetActive(false);
btnNotSelect.gameObject.SetActive(true);
ClearBind(btnNotSelect);
BindButton(btnNotSelect, _OnClickSkinItem, index);
}
}
private Sprite _CropSprite(Sprite sprite, Rect rect)
{
Texture2D texture = sprite.texture;
Texture2D croppedTexture = new Texture2D((int)rect.width, (int)rect.height);
Color[] pixels = texture.GetPixels((int)rect.x, (int)rect.y, (int)rect.width, (int)rect.height);
croppedTexture.SetPixels(pixels);
croppedTexture.Apply();
Sprite croppedSprite = Sprite.Create(croppedTexture, new Rect(0, 0, rect.width, rect.height), Vector2.one * 0.5f);
return croppedSprite;
}
private int _GetSkinItemFunc()
{
return _skinDataList.Count;
}
private void _ChangeSelectCharacter(int index)
{
if (_curSelect == index)
{
return;
}
_curSelect = index;
_curSelectSkin = 0;
_skinDataList = CommonUtils.GetCharacterSkinCfgList((int)_charIDList[_curSelect]);
}
private void _InitSelectCharacter()
{
var storeData =
StorageMgr.Instance.GetStorage<MainPanelSceneStoreData>("MainPanelSceneStoreData");
if (storeData != null)
{
_curSelect = GetPosterIndexByID(storeData.PosterID);
_curSelectSkin = storeData.PosterSkinIdx;
}
_skinDataList = CommonUtils.GetCharacterSkinCfgList((int)_charIDList[_curSelect]);
}
private int GetPosterIndexByID(int id)
{
var idx = _charIDList.IndexOf((uint)id);
if (idx < 0)
{
DebugUtil.LogError($"当前选择Poster Uid: {id}不在列表中!!!");
return 0;
}
return idx;
}
private void _RefreshPosterButton()
{
if (_saveData != null)
{
if (_curSelect == GetPosterIndexByID(_saveData.PosterID) && _curSelectSkin == _saveData.PosterSkinIdx)
{
Button_Confirm01.gameObject.SetActive(false);
Button_Cancel01.gameObject.SetActive(true);
}
else
{
Button_Confirm01.gameObject.SetActive(true);
Button_Cancel01.gameObject.SetActive(false);
}
return;
}
var storeData = StorageMgr.Instance.GetStorage<MainPanelSceneStoreData>("MainPanelSceneStoreData");
if (storeData != null)
{
if (_curSelect == GetPosterIndexByID(storeData.PosterID) && _curSelectSkin == storeData.PosterSkinIdx)
{
Button_Confirm01.gameObject.SetActive(false);
Button_Cancel01.gameObject.SetActive(true);
}
else
{
Button_Confirm01.gameObject.SetActive(true);
Button_Cancel01.gameObject.SetActive(false);
}
}
}
#endregion
#endregion
#region ClickEvent
private void _OnClickClose()
{
_CheckAndSaveChange();
CloseWindow();
}
private void _OnClickSceneConfirm()
{
_ConfirmChangeMainScene();
}
private async void _OnClickPoolHeadItem(int index)
{
if (index != _curSelect)
{
_ChangeSelectCharacter(index);
_curSelect = index;
_curSelectSkin = 0;
//_scrollPosterPool.UpdateData();
_RefreshPoolScroll();
//_scrollSkin.UpdateData();
_RefreshSkinScroll();
_RefreshPosterButton();
var posterPath = CommonUtils.GetCharacterPicPath((int)_charIDList[_curSelect],
CommonUtils.ECharacterPicPathType.Poster, _curSelectSkin + 1);
var posterSprite = await LoadAssetAsync<Sprite>(posterPath);
Image_CBG.sprite = posterSprite;
}
}
private void _OnClickSkinItem(int index)
{
_curSelectSkin = index;
_RefreshPosterButton();
//_scrollSkin.UpdateData();
_RefreshSkinScroll();
}
private void _OnClickPosterConfirm()
{
_ConfirmChangePoster();
_RefreshPosterButton();
}
private void _OnClickPosterTab()
{
_curPage = PageEnum.Scene;
_RefreshTab();
}
private void _OnClickSceneTab()
{
_curPage = PageEnum.Poster;
_RefreshTab();
}
private void _OnClickHome()
{
_CheckAndSaveChange();
UIManager.Instance.CloseAllNormalExcept(UINameConst.UI_MainPanel);
}
private void _OnClickSortBtn(SortType sortType)
{
if (_sortType == sortType)
{
_isUpSort = !_isUpSort;
}
else
{
_isUpSort = true;
_sortType = sortType;
}
_RefreshPosterPanel();
}
#endregion
private void _ConfirmChangeMainScene()
{
if (_saveData == null)
{
_saveData = new MainPanelSceneStoreData(_curSceneIndex, _curCameraPosIdx, (int)_charIDList[_curSelect], _curSelectSkin);
}
else
{
_saveData.SceneIdx = _curSceneIndex;
_saveData.CameraPosIdx = _curCameraPosIdx;
}
_RefreshSceneButtons();
}
private void _ConfirmChangePoster()
{
if (_saveData == null)
{
_saveData = new MainPanelSceneStoreData(_curSceneIndex, _curCameraPosIdx, (int)_charIDList[_curSelect], _curSelectSkin);
}
else
{
_saveData.PosterID = (int)_charIDList[_curSelect];
_saveData.PosterSkinIdx = _curSelectSkin;
}
_RefreshPosterButton();
}
private void _CheckAndSaveChange()
{
var oldSaveData = StorageMgr.Instance.GetStorage<MainPanelSceneStoreData>("MainPanelSceneStoreData");
if (oldSaveData != null && _saveData != null)
{
if (CheckIsPosterChange(_saveData, oldSaveData))
{
oldSaveData.PosterID = _saveData.PosterID;
oldSaveData.PosterSkinIdx = _saveData.PosterSkinIdx;
ShowManager.Instance.RefreshShow(E_ShowSceneType.Main);
EventManager.Instance.Send(EventManager.EventName.ChangeMainPanelPoster);
}
if (CheckIsSceneChange(_saveData, oldSaveData))
{
oldSaveData.SceneIdx = _saveData.SceneIdx;
oldSaveData.CameraPosIdx = _saveData.CameraPosIdx;
LoadingExecutorManager.Instance.ExecuteLoading(new MainSceneReLoadingExecutor()).Forget();
}
StorageMgr.Instance.SyncForce = true;
}
}
private bool CheckIsSceneChange(MainPanelSceneStoreData newStoreData, MainPanelSceneStoreData oldStoreData)
{
if (newStoreData.SceneIdx != oldStoreData.SceneIdx)
{
return true;
}
return false;
}
private bool CheckIsPosterChange(MainPanelSceneStoreData newStoreData, MainPanelSceneStoreData oldStoreData)
{
if (newStoreData.PosterID != oldStoreData.PosterID)
{
return true;
}
if (newStoreData.PosterSkinIdx != oldStoreData.PosterSkinIdx)
{
return true;
}
return false;
}
private void _OnClickCameraPos(int index)
{
if (_curCameraPosIdx == index)
{
return;
}
_curCameraPosIdx = index;
_RefreshItemView(_sceneItemList[_curSceneIndex]);
}
}
public class MainPanelSceneStoreData
{
public int SceneIdx = 0;
public int CameraPosIdx = 0;
public int PosterID = 0;
public int PosterSkinIdx = 0;
public MainPanelSceneStoreData()
{
}
public MainPanelSceneStoreData(int sceneIdx, int cameraPosIdx, int posterID, int posterSkinIdx)
{
SceneIdx = sceneIdx;
CameraPosIdx = cameraPosIdx;
if (posterID <= 0)
{
if (CharacterDataInfoManager.Instance.DataList.Count > 0)
{
PosterID = CharacterDataInfoManager.Instance.DataList[0].Cfg.RoleID;
}
else
{
DebugUtil.LogError("初始角色为空咯!!!请检查数据!!!");
}
}
else
{
PosterID = posterID;
}
PosterSkinIdx = posterSkinIdx;
}
}