Files
MinFt/Client/Assets/Scripts/UI/Home/HomeBeilvPanel.cs
2026-04-27 12:07:32 +08:00

111 lines
3.7 KiB
C#

using asap.core;
using cfg;
using GameCore;
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
public class HomeBeilvPanel : MonoBehaviour
{
public Button btn_close;
public List<BeilvItem> beilv_special;
public List<BeilvItem> beilv_normal;
public Action<BeilvItem> OnBeilvClick;
PlayerData playerData;
Tables _tables;
public void Init()
{
playerData = GContext.container.Resolve<PlayerData>();
_tables = GContext.container.Resolve<Tables>();
for (int i = 0; i < beilv_special.Count; i++)
{
BeilvItem index = beilv_special[i];
beilv_special[i].btn.onClick.AddListener(() =>
{
OnClick(index);
});
}
for (int i = 0; i < beilv_normal.Count; i++)
{
BeilvItem index = beilv_normal[i];
beilv_normal[i].btn.onClick.AddListener(() =>
{
OnClick(index);
});
}
btn_close.onClick.AddListener(() =>
{
gameObject.SetActive(false);
});
}
public void OnShow()
{
var DataList = _tables.TbEnergyDef.DataList;
int normalCount = beilv_normal.Count;
int Mag;
int energy = playerData.Energy;
int index = 0;
var buffTimeData = GContext.container.Resolve<BuffDataCenter>().GetWeelyBuffTimeData<SuperEnergyMag>();
bool isSuperEnergy = buffTimeData != null;
for (int i = 0; i < DataList.Count; i++)
{
int demandEnergy = DataList[i].Energy;
if (isSuperEnergy)
{
demandEnergy = DataList[i].FishBuffEnergy;
}
Mag = DataList[i].Mag;
if (i < normalCount)
{
beilv_normal[i].beilvIndex = i;
beilv_normal[i].beilv = Mag;
beilv_normal[i].text_beilv.text = $"x{Mag}";
beilv_normal[i].isLock = energy < demandEnergy;
beilv_normal[i].isShow = true;
}
if (DataList[i].Energy == -1 && index < beilv_special.Count)
{
beilv_special[index].beilvIndex = i;
beilv_special[index].beilv = Mag;
beilv_special[index].text_beilv.text = $"x{Mag}";
beilv_special[index].isLock = energy < demandEnergy;
beilv_special[index].isShow = isSuperEnergy;
index++;
}
}
SetSelect();
}
void SetSelect()
{
int normalCount = _tables.TbEnergyDef.DataList.Where(x => x.Energy != -1).Count();
for (int i = 0; i < beilv_normal.Count; i++)
{
if (beilv_normal[i].isShow)
{
beilv_normal[i].bg_selected.gameObject.SetActive(playerData.magnification == i);
beilv_normal[i].bg_normal.SetActive(!beilv_normal[i].isLock);
beilv_normal[i].bg_gray.SetActive(beilv_normal[i].isLock);
}
beilv_normal[i].gameObject.SetActive(beilv_normal[i].isShow);
}
for (int i = 0; i < beilv_special.Count; i++)
{
if (beilv_special[i].isShow)
{
beilv_special[i].bg_selected.gameObject.SetActive(playerData.magnification - normalCount == i);
beilv_special[i].bg_normal.SetActive(!beilv_special[i].isLock);
beilv_special[i].bg_gray.SetActive(beilv_special[i].isLock);
}
beilv_special[i].gameObject.SetActive(beilv_special[i].isShow);
}
}
public void OnClick(BeilvItem beilv)
{
OnBeilvClick?.Invoke(beilv);
}
}