备份CatanBuilding瘦身独立工程
This commit is contained in:
192
Assets/Scripts/UI/FishCardReviewPopupPanel.cs
Normal file
192
Assets/Scripts/UI/FishCardReviewPopupPanel.cs
Normal file
@@ -0,0 +1,192 @@
|
||||
using System.Collections.Generic;
|
||||
using cfg;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using GameCore;
|
||||
using UnityEngine.AddressableAssets;
|
||||
using asap.core;
|
||||
using Game;
|
||||
public class OnFishLoadEvent
|
||||
{
|
||||
public OnFishLoadEvent(GameObject fish, string fishName)
|
||||
{
|
||||
this.fish = fish;
|
||||
this.fishName = fishName;
|
||||
}
|
||||
public GameObject fish;
|
||||
public string fishName;
|
||||
}
|
||||
|
||||
|
||||
public class FishCardReviewPopupPanel : MonoBehaviour
|
||||
{
|
||||
public Button btn_mask;
|
||||
public Button btn_close;
|
||||
private RectTransform content;
|
||||
public PanelScroll panelScroll;
|
||||
public GameObject cardItem;
|
||||
public Button btn_left;
|
||||
public Button btn_right;
|
||||
public GameObject btn_left_icon;
|
||||
public GameObject btn_left_icon_gray;
|
||||
public GameObject btn_right_icon;
|
||||
public GameObject btn_right_icon_gray;
|
||||
public float speed = 0.5f;
|
||||
public List<FishCardItemData> fishCardItemData = new List<FishCardItemData>();
|
||||
private Dictionary<string, GameObject> fishAvatar = new Dictionary<string, GameObject>();
|
||||
private Dictionary<string, GameObject> fishPrefabs = new Dictionary<string, GameObject>();
|
||||
List<string> fishNameList = new List<string>();
|
||||
float itemWidth;
|
||||
bool isShow = false;
|
||||
int index = 0;
|
||||
public List<FishData> fishDatas;
|
||||
//创建一个实例
|
||||
public static FishCardReviewPopupPanel Instance;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
btn_mask = transform.Find("mask").GetComponent<Button>();
|
||||
btn_close = transform.Find("btn_close").GetComponent<Button>();
|
||||
panelScroll = transform.Find("root").GetComponent<PanelScroll>();
|
||||
cardItem = transform.Find("root/Viewport/Content/root").gameObject;
|
||||
content = transform.Find("root/Viewport/Content").GetComponent<RectTransform>();
|
||||
btn_left = transform.Find("btn_close/btn_arrow_left").GetComponent<Button>();
|
||||
btn_right = transform.Find("btn_close/btn_arrow_right").GetComponent<Button>();
|
||||
btn_left_icon = transform.Find("btn_close/btn_arrow_left/icon").gameObject;
|
||||
btn_left_icon_gray = transform.Find("btn_close/btn_arrow_left/icon_gray").gameObject;
|
||||
btn_right_icon = transform.Find("btn_close/btn_arrow_right/icon").gameObject;
|
||||
btn_right_icon_gray = transform.Find("btn_close/btn_arrow_right/icon_gray").gameObject;
|
||||
Instance = this;
|
||||
}
|
||||
//private void OnEnable()
|
||||
//{
|
||||
// FishingSystem.Instance.HideFishenv();
|
||||
//}
|
||||
void Start()
|
||||
{
|
||||
itemWidth = cardItem.GetComponent<RectTransform>().sizeDelta.x;
|
||||
btn_close.onClick.AddListener(() => { UIManager.Instance.HideUI(UITypes.FishCardReviewPopupPanel); });
|
||||
btn_mask.onClick.AddListener(() => { UIManager.Instance.HideUI(UITypes.FishCardReviewPopupPanel); });
|
||||
btn_left.onClick.AddListener(OnLeftClick);
|
||||
btn_right.onClick.AddListener(OnRightClick);
|
||||
panelScroll.loop = false;
|
||||
isShow = true;
|
||||
ScrollInit();
|
||||
}
|
||||
|
||||
public void SetFish(int _index, List<FishData> _fishDatas, bool isMask = true)
|
||||
{
|
||||
index = _index;
|
||||
fishCardItemData.Clear();
|
||||
fishDatas = _fishDatas;
|
||||
for (int i = 0; i < _fishDatas.Count; i++)
|
||||
{
|
||||
fishCardItemData.Add(new FishCardItemData(_fishDatas[i], SetFishAsync, speed, isMask));
|
||||
}
|
||||
if (isShow)
|
||||
{
|
||||
ScrollInit();
|
||||
}
|
||||
}
|
||||
async void SetFishAsync(FishCardItem fishCardItem)
|
||||
{
|
||||
FishData fishData = fishCardItem.data.fishData;
|
||||
//fishAvatar是否包含data.Fbx,包含则取出来,不包含则加载
|
||||
|
||||
if (!fishAvatar.ContainsKey(fishData.Fbx))
|
||||
{
|
||||
if (fishNameList.Contains(fishData.Fbx))
|
||||
{
|
||||
return;
|
||||
}
|
||||
fishNameList.Add(fishData.Fbx);
|
||||
var fishPrefab = await Addressables.LoadAssetAsync<GameObject>(fishData.Fbx).Task;
|
||||
|
||||
if (fishPrefab != null)
|
||||
{
|
||||
if (this == null)
|
||||
{
|
||||
Addressables.Release(fishPrefab);
|
||||
return;
|
||||
}
|
||||
if (fishPrefabs.ContainsKey(fishData.Fbx))
|
||||
{
|
||||
Addressables.Release(fishPrefab);
|
||||
}
|
||||
else
|
||||
{
|
||||
fishPrefabs.Add(fishData.Fbx, fishPrefab);
|
||||
var go = Instantiate(fishPrefab, fishCardItem.avatar);
|
||||
go.SetActive(false);
|
||||
fishAvatar.Add(fishData.Fbx, go);
|
||||
go.transform.localRotation = Quaternion.Euler(fishData.TankRotation[0], fishData.TankRotation[1], fishData.TankRotation[2]);
|
||||
go.transform.localScale = Vector3.one * fishData.TankScale;
|
||||
}
|
||||
}
|
||||
}
|
||||
GameObject fish = fishAvatar.GetValueOrDefault(fishData.Fbx);
|
||||
|
||||
GContext.Publish(new OnFishLoadEvent(fish, fishData.Fbx));
|
||||
}
|
||||
public void SetFish(int _index)
|
||||
{
|
||||
index = _index;
|
||||
if (isShow)
|
||||
{
|
||||
ScrollInit();
|
||||
}
|
||||
}
|
||||
void ScrollInit()
|
||||
{
|
||||
panelScroll.Init<FishCardItem, FishCardItemData>(itemWidth, cardItem, OnClickItem, fishCardItemData, true, index);
|
||||
OnLeftOrRight();
|
||||
}
|
||||
void OnClickItem(FishCardItem item)
|
||||
{
|
||||
GContext.Publish(new EventUISound(SoundType.audio_ui_fishingmap_btn_detail));
|
||||
index = panelScroll.currentIndex;
|
||||
btn_left.interactable = true;
|
||||
btn_right.interactable = true;
|
||||
OnLeftOrRight();
|
||||
}
|
||||
void OnLeftClick()
|
||||
{
|
||||
if (index > 0)
|
||||
{
|
||||
btn_left.interactable = false;
|
||||
index--;
|
||||
panelScroll.JumpToTarget(index);
|
||||
OnLeftOrRight();
|
||||
}
|
||||
}
|
||||
void OnRightClick()
|
||||
{
|
||||
if (index < fishCardItemData.Count - 1)
|
||||
{
|
||||
btn_right.interactable = false;
|
||||
index++;
|
||||
panelScroll.JumpToTarget(index);
|
||||
OnLeftOrRight();
|
||||
}
|
||||
}
|
||||
void OnLeftOrRight()
|
||||
{
|
||||
btn_left_icon.SetActive(index > 0);
|
||||
btn_left_icon_gray.SetActive(index <= 0);
|
||||
btn_right_icon.SetActive(index < fishCardItemData.Count - 1);
|
||||
btn_right_icon_gray.SetActive(index >= fishCardItemData.Count - 1);
|
||||
}
|
||||
//private void OnDisable()
|
||||
//{
|
||||
// FishingSystem.Instance.ShowFishenv();
|
||||
//}
|
||||
private void OnDestroy()
|
||||
{
|
||||
foreach (KeyValuePair<string, GameObject> v in fishPrefabs)
|
||||
{
|
||||
Addressables.Release(v.Value);
|
||||
}
|
||||
fishPrefabs.Clear();
|
||||
fishAvatar.Clear();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user