154 lines
5.4 KiB
C#
154 lines
5.4 KiB
C#
using Assets.MyGame.Scripts.Net.API.GameConfig_SubClass;
|
|
using Assets.MyGame.Scripts.Net.APIResponses.Enum;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class HHWKTuJianPanel : SubUIBase
|
|
{
|
|
public Toggle toggle_PuTong;
|
|
[Header("普通鱼 - Item1 预制体")]
|
|
public TuJianItem prefab_Item1;
|
|
[Header("黄金鱼/特殊鱼/Boss/特殊Boss - Item2 预制体")]
|
|
public TuJianItem prefab_Item2;
|
|
|
|
[Header("分类父节点")]
|
|
public Transform parent_普通鱼;
|
|
public Transform parent_黄金鱼;
|
|
public Transform parent_特殊鱼;
|
|
public Transform parent_Boss鱼;
|
|
public Transform parent_特殊Boss鱼;
|
|
|
|
[Header("滚动视图")]
|
|
public ScrollRect scrollRect;
|
|
|
|
public override void Awake()
|
|
{
|
|
base.Awake();
|
|
var addedFishNumbers = new HashSet<string>();
|
|
var fishList = new List<RoomFishDetailConfig>();
|
|
var v = CreateFishManager.Instance.spawnList;
|
|
foreach (var item in v)
|
|
{
|
|
if (item.type == 2)
|
|
{
|
|
// 鱼阵条目:fishNumber 存的是鱼阵编号,解析出阵内实际生成的鱼再加入图鉴
|
|
if (CreateFishManager.Instance.FishArrayDatas.TryGetValue(item.fishNumber, out var yz))
|
|
CollectFish(yz.fishNumber, addedFishNumbers, fishList);
|
|
}
|
|
else
|
|
{
|
|
CollectFish(item.fishNumber, addedFishNumbers, fishList, item);
|
|
}
|
|
}
|
|
|
|
// 按分类(普通鱼/黄金鱼/特殊鱼/Boss鱼/特殊Boss)分桶
|
|
var categoryLists = new Dictionary<FishTypeEnum, List<RoomFishDetailConfig>>();
|
|
foreach (var item in fishList)
|
|
{
|
|
var typeEnum = (FishTypeEnum)GameManager.Instance.dic_fishTypeConfigs[item.fishNumber].fishType;
|
|
if (!categoryLists.TryGetValue(typeEnum, out var list))
|
|
categoryLists[typeEnum] = list = new List<RoomFishDetailConfig>();
|
|
list.Add(item);
|
|
}
|
|
|
|
// 每个分类内部各自按显示倍数从低到高排序后创建,分类之间互不影响
|
|
foreach (var list in categoryLists.Values)
|
|
{
|
|
list.Sort((a, b) => GetDisplayMult(a.fishNumber).CompareTo(GetDisplayMult(b.fishNumber)));
|
|
foreach (var item in list)
|
|
AddFishItem(item);
|
|
}
|
|
|
|
// 加载完毕后滚动到最上方
|
|
if (scrollRect != null)
|
|
scrollRect.normalizedPosition = new Vector2(0, 1);
|
|
}
|
|
|
|
/// <summary>收集要进图鉴的鱼(按编号去重,缺鱼种配置的跳过)</summary>
|
|
private void CollectFish(string fishNumber, HashSet<string> addedFishNumbers, List<RoomFishDetailConfig> fishList, RoomFishDetailConfig detail = null)
|
|
{
|
|
if (string.IsNullOrEmpty(fishNumber) || !addedFishNumbers.Add(fishNumber))
|
|
return;
|
|
|
|
if (!GameManager.Instance.dic_fishTypeConfigs.ContainsKey(fishNumber))
|
|
return;
|
|
|
|
fishList.Add(detail ?? new RoomFishDetailConfig { fishNumber = fishNumber });
|
|
}
|
|
|
|
/// <summary>取图鉴条目显示的倍数值:优先解析 fishMultipleDesc 中的数字(如"最高500倍"→500),否则用 fishScore</summary>
|
|
private long GetDisplayMult(string fishNumber)
|
|
{
|
|
var cfg = GameManager.Instance.dic_fishTypeConfigs[fishNumber];
|
|
if (!string.IsNullOrEmpty(cfg.fishMultipleDesc))
|
|
{
|
|
long val = 0;
|
|
bool hasDigit = false;
|
|
foreach (char c in cfg.fishMultipleDesc)
|
|
{
|
|
if (c >= '0' && c <= '9')
|
|
{
|
|
val = val * 10 + (c - '0');
|
|
hasDigit = true;
|
|
}
|
|
else if (hasDigit)
|
|
break;
|
|
}
|
|
if (hasDigit) return val;
|
|
}
|
|
return cfg.fishScore;
|
|
}
|
|
|
|
private void AddFishItem(RoomFishDetailConfig detail)
|
|
{
|
|
if (!GameManager.Instance.dic_fishTypeConfigs.TryGetValue(detail.fishNumber, out var cfg))
|
|
return;
|
|
|
|
TuJianItem prefabToUse;
|
|
Transform parentToUse;
|
|
bool isGuDingBeiShu=true;
|
|
int fishType = cfg.fishType;
|
|
switch ((FishTypeEnum)fishType)
|
|
{
|
|
case FishTypeEnum.普通鱼:
|
|
prefabToUse = prefab_Item1;
|
|
parentToUse = parent_普通鱼;
|
|
break;
|
|
case FishTypeEnum.黄金鱼:
|
|
prefabToUse = prefab_Item2;
|
|
parentToUse = parent_黄金鱼;
|
|
break;
|
|
case FishTypeEnum.特殊鱼:
|
|
prefabToUse = prefab_Item2;
|
|
parentToUse = parent_特殊鱼;
|
|
isGuDingBeiShu = false;
|
|
break;
|
|
case FishTypeEnum.Boss鱼:
|
|
prefabToUse = prefab_Item2;
|
|
parentToUse = parent_Boss鱼;
|
|
isGuDingBeiShu = false;
|
|
|
|
break;
|
|
case FishTypeEnum.特殊Boss:
|
|
prefabToUse = prefab_Item2;
|
|
parentToUse = parent_特殊Boss鱼;
|
|
isGuDingBeiShu = false;
|
|
|
|
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
|
|
if (prefabToUse != null && parentToUse != null)
|
|
Instantiate(prefabToUse.gameObject, parentToUse).GetComponent<TuJianItem>().InItItem(detail, isGuDingBeiShu);
|
|
}
|
|
protected override void OnShow(object args = null)
|
|
{
|
|
base.OnShow(args);
|
|
toggle_PuTong.isOn = true;
|
|
}
|
|
}
|