1013 lines
26 KiB
C#
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;
|
|
}
|
|
}
|