TH1/Unity/Assets/Scripts/TH1_UI/View/Bottom/UIBottomBottomBarQuitPanelMono.cs
2026-04-08 22:15:13 +08:00

79 lines
2.0 KiB
C#

using Animancer;
using Logic;
using Logic.Action;
using RuntimeData;
using TH1_Core.Events;
using TH1_Core.Managers;
using TH1_Logic.Core;
using TH1_Logic.Net;
using TH1Resource;
using TH1Renderer;
using UnityEngine;
using UnityEngine.UI;
namespace TH1_UI.View.Bottom
{
public class UIBottomBottomBarQuitPanelMono : MonoBehaviour
{
public AnimancerComponent Animancer;
public Button CancelButton;
public Button SurrenderButton;
public Button CheckButton;
// 确认退出时执行的委托
public ViDelegateAssisstant.Dele OnQuitConfirm;
public void OnInit()
{
CancelButton.onClick.RemoveAllListeners();
CancelButton.onClick.AddListener(OnClose);
CheckButton.onClick.RemoveAllListeners();
CheckButton.onClick.AddListener(OnConfirm);
SurrenderButton.onClick.RemoveAllListeners();
SurrenderButton.onClick.AddListener(OnSurrender);
gameObject.SetActive(false);
}
public void Open()
{
// 只在对局中且玩家存活时显示投降按钮
bool canSurrender = Main.MapData != null
&& Main.MapData.PlayerMap.SelfPlayerData != null
&& Main.MapData.PlayerMap.SelfPlayerData.IsSurvival;
SurrenderButton.gameObject.SetActive(canSurrender);
gameObject.SetActive(true);
Animancer.Play(ResourceCache.Instance.AnimCache.UICommonPanelFadeIn);
}
public void OnClose()
{
AnimancerState state = Animancer.Play(ResourceCache.Instance.AnimCache.UICommonPanelFadeOut);
state.Events.OnEnd += () =>
{
gameObject.SetActive(false);
};
}
private void OnConfirm()
{
OnQuitConfirm?.Invoke();
}
private void OnSurrender()
{
if (Main.MapData == null) return;
var selfPlayer = Main.MapData.PlayerMap.SelfPlayerData;
if (selfPlayer == null) return;
var actionId = new CommonActionId { ActionType = CommonActionType.PlayerSurrender };
var action = ActionLogicFactory.GetActionLogic(actionId);
var param = new CommonActionParams(Main.MapData, playerData: selfPlayer);
if (!action.CheckCan(param)) return;
action.CompleteExecute(param);
OnClose();
}
}
}