169 lines
5.6 KiB
C#
169 lines
5.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Logic;
|
|
using Logic.Action;
|
|
using Logic.Multilingual;
|
|
using Microsoft.Win32.SafeHandles;
|
|
using RuntimeData;
|
|
using TH1_Logic.Core;
|
|
using TH1_UI.View.Announce;
|
|
using TH1_UI.View.Info;
|
|
using TH1Resource;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace TH1_UI.View.Interaction
|
|
{
|
|
public class UIInteractionCityLevelupView : Base.View
|
|
{
|
|
|
|
public TextMeshProUGUI Title;
|
|
public MultilingualTextMono TitleMultilingual;
|
|
public UIInfoCommonBaseActionCircleMono ChoiceCircleA;
|
|
public UIInfoCommonBaseActionCircleMono ChoiceCircleB;
|
|
|
|
private CommonActionId _choiceA;
|
|
private CommonActionId _choiceB;
|
|
public ViDelegateAssisstant.Dele OnItemClick;
|
|
protected override void OnInit()
|
|
{
|
|
base.OnInit();
|
|
|
|
|
|
|
|
}
|
|
|
|
public void SetContent(int cid, CommonActionId choiceA,CommonActionId choiceB,CommonActionParams choiceParamA,CommonActionParams choiceParamB,Action<CommonActionId,CommonActionParams> onChoice)
|
|
{
|
|
//Step #1 设置城市标题
|
|
_choiceA = choiceA;
|
|
_choiceB = choiceB;
|
|
if (Main.MapData.CityMap.GetCityById((uint)cid, out var city)
|
|
&& Table.Instance.CivDataAssets.GetCityInfo(city.Name, out var cityInfo))
|
|
MultilingualManager.Instance.SetUIText(Title,TitleMultilingual.ID.ToString(),new List<string>(){MultilingualManager.Instance.GetMultilingualTextSafe(cityInfo.CityName)});
|
|
|
|
//Step #2 设置ChoiceA
|
|
ChoiceCircleA.SetContent(choiceA,ShowType.None,choiceParamA,onChoice);
|
|
|
|
//Step #3 设置ChoiceB
|
|
ChoiceCircleB.SetContent(choiceB,ShowType.None,choiceParamB,onChoice);
|
|
}
|
|
|
|
public bool GetPos(CityLevelUpActionType actionType, out Vector3 pos)
|
|
{
|
|
pos = Vector3.zero;
|
|
if (_choiceA.CityLevelUpActionType == actionType)
|
|
{
|
|
pos = ChoiceCircleA.transform.position;
|
|
return true;
|
|
}
|
|
if (_choiceB.CityLevelUpActionType == actionType)
|
|
{
|
|
pos = ChoiceCircleB.transform.position;
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
public class UIInteractionTreasureView : Base.View
|
|
{
|
|
public TextMeshProUGUI Title;
|
|
public MultilingualTextMono TitleMultilingual;
|
|
public Transform CircleRow;
|
|
public GameObject ActionCirclePrefab;
|
|
|
|
private readonly List<UIInfoCommonBaseActionCircleMono> _actionCircleMonoList = new();
|
|
private Action<CommonActionId, CommonActionParams> _onChoice;
|
|
|
|
protected override void OnInit()
|
|
{
|
|
base.OnInit();
|
|
AutoBindReferences();
|
|
}
|
|
|
|
public void SetContent(ActionOptionGroup optionGroup, Action<CommonActionId, CommonActionParams> onChoice)
|
|
{
|
|
AutoBindReferences();
|
|
_onChoice = onChoice;
|
|
if (optionGroup?.ActionOptionList == null || CircleRow == null) return;
|
|
|
|
if (Title != null)
|
|
{
|
|
if (TryGetTreasureTitle(out var title))
|
|
Title.text = title;
|
|
else if (TitleMultilingual != null)
|
|
MultilingualManager.Instance.SetUIText(Title, TitleMultilingual.ID.ToString());
|
|
else
|
|
Title.text = "";
|
|
}
|
|
|
|
EnsureActionCircleCount(optionGroup.ActionOptionList.Count);
|
|
|
|
for (var i = 0; i < _actionCircleMonoList.Count; i++)
|
|
{
|
|
var mono = _actionCircleMonoList[i];
|
|
mono.gameObject.SetActive(i < optionGroup.ActionOptionList.Count);
|
|
if (i >= optionGroup.ActionOptionList.Count) continue;
|
|
mono.SetTreasureOptionContent(optionGroup.ActionOptionList[i], OnActionCircleClicked);
|
|
}
|
|
}
|
|
|
|
public void CloseView()
|
|
{
|
|
_onChoice = null;
|
|
}
|
|
|
|
private void EnsureActionCircleCount(int count)
|
|
{
|
|
if (ActionCirclePrefab == null)
|
|
ActionCirclePrefab = ResourceLoader.Load<GameObject>("Prefab/UI/Info/UIInfoCommonBaseActionCircle");
|
|
if (ActionCirclePrefab == null || CircleRow == null) return;
|
|
|
|
while (_actionCircleMonoList.Count < count)
|
|
{
|
|
var actionCircle = Instantiate(ActionCirclePrefab, CircleRow, false);
|
|
actionCircle.transform.localScale = Vector3.one;
|
|
actionCircle.transform.localPosition = Vector3.zero;
|
|
if (!actionCircle.TryGetComponent<UIInfoCommonBaseActionCircleMono>(out var mono))
|
|
{
|
|
Debug.LogError("UIInteractionTreasureView: UIInfoCommonBaseActionCircle prefab missing UIInfoCommonBaseActionCircleMono.");
|
|
Destroy(actionCircle);
|
|
break;
|
|
}
|
|
_actionCircleMonoList.Add(mono);
|
|
}
|
|
}
|
|
|
|
private void OnActionCircleClicked(CommonActionId actionId, CommonActionParams param)
|
|
{
|
|
_onChoice?.Invoke(actionId, param);
|
|
}
|
|
|
|
private void AutoBindReferences()
|
|
{
|
|
if (Title == null)
|
|
Title = transform.Find("Name")?.GetComponent<TextMeshProUGUI>();
|
|
if (TitleMultilingual == null)
|
|
TitleMultilingual = transform.Find("Name")?.GetComponent<MultilingualTextMono>();
|
|
if (CircleRow == null)
|
|
CircleRow = transform.Find("CircleRow");
|
|
}
|
|
|
|
private bool TryGetTreasureTitle(out string title)
|
|
{
|
|
title = "";
|
|
if (!Table.Instance.GridAndResourceDataAssets.GetResourceInfo(ResourceType.Treasure, out var resourceInfo))
|
|
return false;
|
|
title = MultilingualManager.Instance.GetMultilingualTextSafe(resourceInfo.ResourceName);
|
|
return !string.IsNullOrEmpty(title);
|
|
}
|
|
}
|
|
|
|
}
|