Files
5.24BuYu/Assets/MyGame/aa/UI/Game/XJMH/GameMainPanel_XJMH.cs
T
2026-09-30 03:36:44 +08:00

124 lines
3.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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();
}
}