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

1192 lines
33 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 static UINoticeOneController;
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;
public Button Button_ChangeLocation;
public Button Button_HidePic;
public Button Button_HidePicDown;
///Auto Gen End///
public static async UniTask<UIWindow> Open()
{
CommonUtils.CaptureScreenshot();
return await UIManager.Instance.CreateAndOpenWindow(UINameConst.UICameraAndPosterChange);
}
/// <summary>
/// 在首页编辑完成看板娘之后重新激活显示此界面
/// </summary>
/// <param name="deltaPos"></param>
/// <param name="scale"></param>
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));
}
/// <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 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()
{
//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);
BindButton(Button_HidePic, OnClickHideKanbanban);
BindButton(Button_HidePicDown, OnClickHideKanbanban);
BindButton(Button_ChangeLocation, OnClickAdjustPoster);
EventManager.Instance.Register<MainPanelSceneStoreData>(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();
_sceneItemList.Clear();
_itemPosYList.Clear();
EventManager.Instance.Unregister<MainPanelSceneStoreData>(EventManager.EventName.MainPanelPosterRelocate, ResetPosterPosition);
}
#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);
Button_ChangeLocation.gameObject.SetActive(false);
Button_HidePic.gameObject.SetActive(false);
Button_HidePicDown.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;
PosterHide = data.hideKanbanban;
}
_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()
{
if (_saveData == null)
{
var storeData =
StorageMgr.Instance.GetStorage<MainPanelSceneStoreData>("MainPanelSceneStoreData");
if (storeData != null)
{
_curSelect = GetPosterIndexByID(storeData.PosterID);
_curSelectSkin = storeData.PosterSkinIdx;
PosterHide = storeData.hideKanbanban;
}
}
else
{
_curSelect = GetPosterIndexByID(_saveData.PosterID);
_curSelectSkin = _saveData.PosterSkinIdx;
PosterHide = _saveData.hideKanbanban;
}
_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);
Button_ChangeLocation.gameObject.SetActive(true);
Button_HidePic.gameObject.SetActive(!_isHidePoster);
Button_HidePicDown.gameObject.SetActive(_isHidePoster);
}
else//非当前展示角色
{
Button_Confirm01.gameObject.SetActive(true);
Button_Cancel01.gameObject.SetActive(false);
Button_ChangeLocation.gameObject.SetActive(false);
Button_HidePic.gameObject.SetActive(false);
Button_HidePicDown.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);
Button_ChangeLocation.gameObject.SetActive(true);
Button_HidePic.gameObject.SetActive(!_isHidePoster);
Button_HidePicDown.gameObject.SetActive(_isHidePoster);
}
else//非当前展示角色
{
Button_Confirm01.gameObject.SetActive(true);
Button_Cancel01.gameObject.SetActive(false);
Button_ChangeLocation.gameObject.SetActive(false);
Button_HidePic.gameObject.SetActive(false);
Button_HidePicDown.gameObject.SetActive(false);
}
}
}
private void RefreshPosterHideButton()
{
Button_HidePic.gameObject.SetActive(!_isHidePoster);
Button_HidePicDown.gameObject.SetActive(_isHidePoster);
}
private void ResetPosterPosition(MainPanelSceneStoreData data)
{
if (_saveData != null)
{
_saveData.deltaPos = data.deltaPos;
_saveData.scale = data.scale;
//DebugUtil.Log("调整看板娘位置,saveData不为空在原先数据更改");
}
else
{
_saveData = new MainPanelSceneStoreData(_curSceneIndex, _curCameraPosIdx, (int)_charIDList[_curSelect], _curSelectSkin, data.PositionDelta(), data.scale);
//DebugUtil.Log("调整看板娘位置,saveData为空重新赋值");
}
}
#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;
}
}
/// <summary>
/// 看板娘调整位置
/// </summary>
private void OnClickAdjustPoster()
{
if (_saveData != null)
{
UIManager.Instance.Hide(UINameConst.UICameraAndPosterChange, isMainCameraActive: true);
_saveData.hideKanbanban = false;
PosterHide = false;
EventManager.Instance.Send(EventManager.EventName.PreviewMainPanelPoster, _saveData);
}
else
{
var sendData = StorageMgr.Instance.GetStorage<MainPanelSceneStoreData>("MainPanelSceneStoreData");
UIManager.Instance.Hide(UINameConst.UICameraAndPosterChange, isMainCameraActive: true);
sendData.hideKanbanban = false;
PosterHide = false;
EventManager.Instance.Send(EventManager.EventName.PreviewMainPanelPoster, sendData);
}
}
private void OnClickHideKanbanban()
{
PosterHide = !_isHidePoster;
if (_saveData == null)
{
var storeData = StorageMgr.Instance.GetStorage<MainPanelSceneStoreData>("MainPanelSceneStoreData");
_saveData = new MainPanelSceneStoreData(_curSceneIndex, _curCameraPosIdx, (int)_charIDList[_curSelect], _curSelectSkin, storeData.PositionDelta(), storeData.scale);
}
_saveData.hideKanbanban = _isHidePoster;
DebugUtil.Log("poster hide: "+_isHidePoster);
}
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);
PosterHide = false;
}
else
{
_saveData.PosterID = (int)_charIDList[_curSelect];
_saveData.PosterSkinIdx = _curSelectSkin;
_saveData.deltaPos = new float[2] { 0, 0 };
_saveData.scale = 0;
_saveData.hideKanbanban = false;
PosterHide = false;
}
_RefreshPosterButton();
}
private void _CheckAndSaveChange()
{
var oldSaveData = StorageMgr.Instance.GetStorage<MainPanelSceneStoreData>("MainPanelSceneStoreData");
if (oldSaveData != null && _saveData != null)
{
bool refreshPoster = false;
if (CheckIsPosterChange(_saveData, oldSaveData))//更换看板娘或调整位置
{
oldSaveData.PosterID = _saveData.PosterID;
oldSaveData.PosterSkinIdx = _saveData.PosterSkinIdx;
oldSaveData.deltaPos = _saveData.deltaPos;
oldSaveData.scale = _saveData.scale;
refreshPoster = true;
DebugUtil.Log("保存看板娘调整数据");
}
if (oldSaveData.hideKanbanban != _isHidePoster)//隐藏看板娘
{
oldSaveData.hideKanbanban = _isHidePoster;
refreshPoster = true;
DebugUtil.Log("保存看板娘隐藏数据");
}
if (refreshPoster)
{
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();
DebugUtil.Log("保存场景调整数据,当前场景: " + _saveData.SceneIdx);
}
StorageMgr.Instance.SyncForce = true;
}
}
private bool CheckIsSceneChange(MainPanelSceneStoreData newStoreData, MainPanelSceneStoreData oldStoreData)
{
if (newStoreData.SceneIdx != oldStoreData.SceneIdx)
{
return true;
}
if (newStoreData.CameraPosIdx != oldStoreData.CameraPosIdx)
{
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;
}
if (newStoreData.deltaPos[0] != oldStoreData.deltaPos[0] || newStoreData.deltaPos[1] != oldStoreData.deltaPos[1])
{
return true;
}
if (newStoreData.scale != oldStoreData.scale)
{
return true;
}
return false;
}
private void _OnClickCameraPos(int index)
{
if (_curCameraPosIdx == index)
{
return;
}
_curCameraPosIdx = index;
_RefreshItemView(_sceneItemList[_curSceneIndex]);
_RefreshSceneButtons();
}
}
public class MainPanelSceneStoreData
{
public int SceneIdx = 0;
public int CameraPosIdx = 0;
public int PosterID = 0;
public int PosterSkinIdx = 0;
//看板娘自定义数据
public float[] deltaPos = new float[2] { 0, 0 };//位置偏移量
public float scale = 0f;//缩放比例指数底数为2
public bool hideKanbanban = false;//是否隐藏看板娘
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;
}
public MainPanelSceneStoreData(int sceneIdx, int cameraPosIdx, int posterID, int posterSkinIdx, Vector2 deltaPos, float scale)
{
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;
this.deltaPos = new float[2] { deltaPos.x, deltaPos.y };
this.scale = scale;
}
public Vector2 PositionDelta()
{
return new Vector2(deltaPos[0], deltaPos[1]);
}
}