TH1/Unity/Assets/Scripts/TH1_UI/Controller/Interaction/UIInterationDiplomacyOfferAllyController.cs
2025-11-04 13:47:22 +08:00

104 lines
3.9 KiB
C#

// 文件位置建议: Assets/Scripts/TH1_UI/Controller/UIAnnounceMajorEventController.cs
using Logic;
using Logic.Action;
using TH1_Core.Events;
using TH1_Core.Managers;
using TH1_Logic.Action;
using TH1_Logic.Core;
using TH1_UI.Controller.Base;
using TH1_UI.View.Interaction;
using UnityEngine;
// 确保这里引用了View脚本的命名空间
namespace TH1_UI.Controller.Interaction
{
/// <summary>
/// 重大事件公告界面的控制器。
/// 它的职责是处理玩家相遇、玩家被消灭之类的宣告
/// </summary>
public class UIInteractionDiplomacyOfferAllyController : ViewController<UIInteractionDiplomacyOfferAllyView> // 泛型参数是对应的View脚本
{
public UIInteractionDiplomacyOfferAllyController() { }
private ShowUIInteractionDiplomacyOfferAlly _evt;
protected override void RegisterEventCallback()
{
base.RegisterEventCallback();
if (WindowScript != null)
{
WindowScript.OnYesChoiceMade += _OnYesChoiceMadeHandler;
WindowScript.OnNoChoiceMade += _OnNoChoiceMadeHandler;
}
}
protected override void UnregisterEventCallback()
{
if (WindowScript != null)
{
WindowScript.OnYesChoiceMade -= _OnYesChoiceMadeHandler;
WindowScript.OnNoChoiceMade -= _OnNoChoiceMadeHandler;
}
base.UnregisterEventCallback();
}
protected override void OnOpen()
{
base.OnOpen();
// 检查暂存的参数是否存在且类型正确
if (_openParameter is ShowUIInteractionDiplomacyOfferAlly evt)
{
_evt = evt;
// 使用接收到的数据设置UI内容
if (WindowScript != null)
{
//Param1 = cid Param2 = cityLv
WindowScript.SetContent(evt);
}
}
else
{
// 如果没有参数或参数类型不符,可以提供默认内容或打印警告
Debug.LogWarning("[UIAnnounceMajorEventController] Opened without valid parameters.");
if (WindowScript != null)
{
//WindowScript.SetContent("警告", "内容未提供");
}
}
}
private void _OnYesChoiceMadeHandler()
{
if (WindowScript != null)
{
if (!Main.MapData.PlayerMap.GetPlayerDataByPlayerID(_evt.PlayerId, out var targetPlayer)) return;
ActionLogicFactory.GetActionLogic(new CommonActionId()
{ ActionType = CommonActionType.PlayerAction, PlayerActionType = PlayerActionType.AcceptAlly })
.CompleteExecute(new CommonActionParams(mapData: Main.MapData,
playerData: Main.MapData.PlayerMap.SelfPlayerData, targetPlayer: targetPlayer, mainObjectType: MainObjectType.Player));
//Debug.Log($"玩家对城市 {eventData.CityId} 做出了选择, 选项ID: {eventData.ChoiceActionId}. 事件已发布。");
}
Close();
}
private void _OnNoChoiceMadeHandler()
{
if (WindowScript != null)
{
if (!Main.MapData.PlayerMap.GetPlayerDataByPlayerID(_evt.PlayerId, out var targetPlayer)) return;
ActionLogicFactory.GetActionLogic(new CommonActionId()
{ ActionType = CommonActionType.PlayerAction, PlayerActionType = PlayerActionType.RefuseAlly })
.CompleteExecute(new CommonActionParams(mapData : Main.MapData,playerData: Main.MapData.PlayerMap.SelfPlayerData,targetPlayer: targetPlayer,mainObjectType : MainObjectType.Player));
}
Close();
}
}
}