124 lines
3.9 KiB
C#
124 lines
3.9 KiB
C#
using DG.Tweening;
|
||
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
|
||
public class GameMainPanel_XJMH : GameMainPanel_FishBase
|
||
{
|
||
// ==================== 炮台切换面板(按钮式) ====================
|
||
[Header("炮台切换面板")]
|
||
[Tooltip("长按 img_OpenPT 弹出的切换面板")]
|
||
public GameObject ChangePTPanel;
|
||
public Button btn_GreenPT; // 对应 xjmhTurretList[0]
|
||
public Button btn_BluePT; // 对应 xjmhTurretList[1]
|
||
public Button btn_GoldPT; // 对应 xjmhTurretList[2]
|
||
public Button btn_VIPPT; // 对应 xjmhTurretList[3]
|
||
|
||
// 按钮与列表索引的映射(顺序固定:Green=0, Blue=1, Gold=2, VIP=3)
|
||
private Button[] _ptButtons;
|
||
|
||
public override void Awake()
|
||
{
|
||
base.Awake();
|
||
InitPTPanel();
|
||
}
|
||
|
||
public override void Start()
|
||
{
|
||
base.Start();
|
||
}
|
||
|
||
protected override void OnShow(object args = null)
|
||
{
|
||
base.OnShow(args);
|
||
AudioManager.Instance.ChangeBG(61109);
|
||
}
|
||
|
||
// ==================== 切换面板:初始化/显示/隐藏 ====================
|
||
|
||
/// <summary>初始化切换面板:绑定按钮点击事件,默认隐藏</summary>
|
||
private void InitPTPanel()
|
||
{
|
||
_ptButtons = new Button[] { btn_GreenPT, btn_BluePT, btn_GoldPT, btn_VIPPT };
|
||
|
||
for (int i = 0; i < _ptButtons.Length; i++)
|
||
{
|
||
int idx = i; // 闭包捕获
|
||
if (_ptButtons[i] != null)
|
||
_ptButtons[i].onClick.AddListener(() => OnPTButtonClicked(idx));
|
||
}
|
||
|
||
if (ChangePTPanel != null)
|
||
ChangePTPanel.SetActive(false);
|
||
}
|
||
|
||
/// <summary>长按 img_OpenPT → 开关切换面板</summary>
|
||
protected override void OnOpenPTLongPressTriggered()
|
||
{
|
||
if (ChangePTPanel == null)
|
||
{
|
||
Debug.LogWarning("[XJMH] ChangePTPanel 未配置");
|
||
return;
|
||
}
|
||
|
||
// 开着就关
|
||
if (ChangePTPanel.activeSelf)
|
||
{
|
||
HidePTPanel();
|
||
return;
|
||
}
|
||
|
||
// 按钮可用性:超出 xjmhTurretList 数量的按钮隐藏
|
||
var list = currSitData != null ? currSitData.xjmhTurretList : null;
|
||
int count = (list != null) ? list.Count : 0;
|
||
for (int i = 0; i < _ptButtons.Length; i++)
|
||
{
|
||
if (_ptButtons[i] == null) continue;
|
||
bool available = i < count && list[i] != null;
|
||
_ptButtons[i].gameObject.SetActive(available);
|
||
}
|
||
|
||
ChangePTPanel.SetActive(true);
|
||
ChangePTPanel.transform.localScale = Vector3.zero;
|
||
ChangePTPanel.transform.DOScale(Vector3.one, 0.2f).SetEase(Ease.OutBack);
|
||
}
|
||
|
||
/// <summary>面板隐藏时清理</summary>
|
||
protected override void CleanupTurretPanel()
|
||
{
|
||
base.CleanupTurretPanel();
|
||
HidePTPanel();
|
||
}
|
||
|
||
/// <summary>隐藏切换面板(带缩放动画)</summary>
|
||
private void HidePTPanel()
|
||
{
|
||
if (ChangePTPanel == null || !ChangePTPanel.activeSelf) return;
|
||
|
||
ChangePTPanel.transform.DOKill();
|
||
ChangePTPanel.transform.localScale = Vector3.one;
|
||
ChangePTPanel.transform.DOScale(Vector3.zero, 0.15f).SetEase(Ease.InBack)
|
||
.OnComplete(() => { if (ChangePTPanel != null) ChangePTPanel.SetActive(false); });
|
||
}
|
||
|
||
/// <summary>按钮点击:按索引切换炮台</summary>
|
||
private void OnPTButtonClicked(int index)
|
||
{
|
||
if (currSitData == null) return;
|
||
|
||
int prevIndex = currSitData.currentTurretIndex;
|
||
bool success = currSitData.SwitchTurretByIndex(index);
|
||
if (!success)
|
||
{
|
||
Debug.LogWarning($"[XJMH] 切换炮台失败,索引越界或列表为空: {index}");
|
||
return;
|
||
}
|
||
|
||
// 实际发生切换才同步(XJMH 炮台没有编号,帧同步同样传列表索引)
|
||
if (currSitData.currentTurretIndex != prevIndex)
|
||
SyncChangeTurret(currSitData.currentTurretIndex);
|
||
|
||
// 点击按钮后关闭面板
|
||
HidePTPanel();
|
||
}
|
||
}
|