Files
5.24BuYu/Assets/MyGame/aa/UI/Game/Sub/HHWKTuJianPanel.cs
T
2026-10-06 15:53:32 +08:00

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;
}
}