257 lines
8.0 KiB
C#
257 lines
8.0 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Logic.CrashSight;
|
|
using Logic.Multilingual;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace TH1_Renderer
|
|
{
|
|
public class CityInfoMono : MonoBehaviour
|
|
{
|
|
public RectTransform CityInfoBar;
|
|
public Image BG;
|
|
public Image ConnectIcon;
|
|
public Image CapitalIcon;
|
|
public Image EmbassyIcon;
|
|
public Image EmbassyWarIcon;
|
|
public Image CityStolenIcon;
|
|
public Image CoinIcon;
|
|
public TextMeshProUGUI CoinText;
|
|
public Image TechIcon;
|
|
public TextMeshProUGUI TechText;
|
|
public Image CultureIcon;
|
|
public TextMeshProUGUI CultureText;
|
|
|
|
public TextMeshProUGUI CityName;
|
|
public Transform LevelBar;
|
|
|
|
public GameObject HousePrefab;
|
|
|
|
public Color BGBlue;
|
|
public Color BGRed;
|
|
private List<CityInfoHouseMono> _houseList = null;
|
|
|
|
|
|
|
|
private void RebuildCityInfoBar()
|
|
{
|
|
if (CityInfoBar == null)
|
|
{
|
|
LogSystem.LogError("CityInfoMono.RebuildCityInfoBar: CityInfoBar is null.");
|
|
return;
|
|
}
|
|
|
|
LayoutRebuilder.ForceRebuildLayoutImmediate(CityInfoBar);
|
|
}
|
|
|
|
|
|
private bool PrepareHouseList(int level)
|
|
{
|
|
if (LevelBar == null)
|
|
{
|
|
LogSystem.LogError("CityInfoMono.PrepareHouseList: LevelBar is null.");
|
|
return false;
|
|
}
|
|
if(_houseList == null)
|
|
_houseList = new List<CityInfoHouseMono>();
|
|
while (_houseList.Count < level)
|
|
{
|
|
if (HousePrefab == null)
|
|
{
|
|
LogSystem.LogError("CityInfoMono.PrepareHouseList: HousePrefab is null.");
|
|
return false;
|
|
}
|
|
|
|
var obj = Instantiate(HousePrefab,LevelBar);
|
|
if (obj == null)
|
|
{
|
|
LogSystem.LogError("CityInfoMono.PrepareHouseList: Instantiate HousePrefab failed.");
|
|
return false;
|
|
}
|
|
var mono = obj.GetComponent<CityInfoHouseMono>();
|
|
if (mono == null)
|
|
{
|
|
LogSystem.LogError("CityInfoMono.PrepareHouseList: HousePrefab missing CityInfoHouseMono.");
|
|
Destroy(obj);
|
|
return false;
|
|
}
|
|
if (mono.House == null || mono.People == null)
|
|
{
|
|
LogSystem.LogError("CityInfoMono.PrepareHouseList: CityInfoHouseMono missing House or People reference.");
|
|
Destroy(obj);
|
|
return false;
|
|
}
|
|
_houseList.Add(mono);
|
|
obj.SetActive(true);
|
|
}
|
|
for(int i = level;i < _houseList.Count;i++)
|
|
_houseList[i]?.gameObject.SetActive(false);
|
|
|
|
//TODO 这里check是否要强制刷新layout group
|
|
return true;
|
|
}
|
|
|
|
public void SetBG(bool self)
|
|
{
|
|
if (BG == null)
|
|
{
|
|
LogSystem.LogError("CityInfoMono.SetBG: BG is null.");
|
|
return;
|
|
}
|
|
|
|
BG.color = self ? BGBlue : BGRed;
|
|
}
|
|
|
|
public void SetLevelBar(bool showLevelBar,int level,int levelExp,int pop)
|
|
{
|
|
if (LevelBar == null)
|
|
{
|
|
LogSystem.LogError("CityInfoMono.SetLevelBar: LevelBar is null.");
|
|
return;
|
|
}
|
|
|
|
LevelBar.gameObject.SetActive(showLevelBar);
|
|
if (!showLevelBar) return;
|
|
|
|
level = Mathf.Max(0, level);
|
|
if (!PrepareHouseList(level)) return;
|
|
var houseCount = _houseList?.Count ?? 0;
|
|
var count = Mathf.Min(level, houseCount);
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
if (_houseList[i] == null)
|
|
{
|
|
LogSystem.LogError("CityInfoMono.SetLevelBar: houseList item is null.");
|
|
continue;
|
|
}
|
|
|
|
CityInfoHouseMono.CityInfoHouseStatusEnum status = i + 1 > Mathf.Abs(levelExp) ? CityInfoHouseMono.CityInfoHouseStatusEnum.NoExp:
|
|
(levelExp > 0 ? CityInfoHouseMono.CityInfoHouseStatusEnum.Exp: CityInfoHouseMono.CityInfoHouseStatusEnum.LackExp);
|
|
_houseList[i].SetContent(pop > i,status);
|
|
}
|
|
|
|
}
|
|
|
|
public void SetConnect(bool connect)
|
|
{
|
|
if (ConnectIcon == null)
|
|
{
|
|
LogSystem.LogError("CityInfoMono.SetConnect: ConnectIcon is null.");
|
|
return;
|
|
}
|
|
|
|
ConnectIcon.gameObject.SetActive(connect);
|
|
RebuildCityInfoBar();
|
|
}
|
|
|
|
public void SetCapital(bool capital)
|
|
{
|
|
if (CapitalIcon == null)
|
|
{
|
|
LogSystem.LogError("CityInfoMono.SetCapital: CapitalIcon is null.");
|
|
return;
|
|
}
|
|
|
|
CapitalIcon.gameObject.SetActive(capital);
|
|
RebuildCityInfoBar();
|
|
}
|
|
|
|
public void SetEmbassy(bool embassy)
|
|
{
|
|
if (EmbassyIcon == null)
|
|
{
|
|
LogSystem.LogError("CityInfoMono.SetEmbassy: EmbassyIcon is null.");
|
|
return;
|
|
}
|
|
|
|
EmbassyIcon.gameObject.SetActive(embassy);
|
|
RebuildCityInfoBar();
|
|
}
|
|
|
|
public void SetWarEmbassy(bool warEmbassy)
|
|
{
|
|
if (EmbassyWarIcon == null)
|
|
{
|
|
LogSystem.LogError("CityInfoMono.SetWarEmbassy: EmbassyWarIcon is null.");
|
|
return;
|
|
}
|
|
|
|
EmbassyWarIcon.gameObject.SetActive(warEmbassy);
|
|
RebuildCityInfoBar();
|
|
}
|
|
|
|
public void SetCityStolen(bool stolen)
|
|
{
|
|
if (CityStolenIcon == null)
|
|
{
|
|
LogSystem.LogError("CityInfoMono.SetCityStolen: CityStolenIcon is null.");
|
|
return;
|
|
}
|
|
|
|
CityStolenIcon.gameObject.SetActive(stolen);
|
|
RebuildCityInfoBar();
|
|
}
|
|
|
|
public void SetCoin(bool coinIcon,int coin)
|
|
{
|
|
if (CoinIcon == null || CoinText == null)
|
|
{
|
|
LogSystem.LogError("CityInfoMono.SetCoin: CoinIcon or CoinText is null.");
|
|
return;
|
|
}
|
|
|
|
CoinIcon.gameObject.SetActive(coinIcon);
|
|
CoinText.gameObject.SetActive(coinIcon);
|
|
if (coinIcon)
|
|
CoinText.text = coin.ToString();
|
|
RebuildCityInfoBar();
|
|
}
|
|
public void SetTech(bool techIcon,int tech)
|
|
{
|
|
if (TechIcon == null || TechText == null)
|
|
{
|
|
LogSystem.LogError("CityInfoMono.SetTech: TechIcon or TechText is null.");
|
|
return;
|
|
}
|
|
|
|
TechIcon.gameObject.SetActive(techIcon);
|
|
TechText.gameObject.SetActive(techIcon);
|
|
if (techIcon)
|
|
TechText.text = tech.ToString();
|
|
RebuildCityInfoBar();
|
|
}
|
|
|
|
public void SetCulture(bool cultureIcon,int culture)
|
|
{
|
|
if (CultureIcon == null || CultureText == null)
|
|
{
|
|
LogSystem.LogError("CityInfoMono.SetCulture: CultureIcon or CultureText is null.");
|
|
return;
|
|
}
|
|
|
|
CultureIcon.gameObject.SetActive(cultureIcon);
|
|
CultureText.gameObject.SetActive(cultureIcon);
|
|
if (cultureIcon)
|
|
CultureText.text = culture.ToString();
|
|
RebuildCityInfoBar();
|
|
}
|
|
|
|
public void SetCityName(string cityName_ENCODE)
|
|
{
|
|
if (CityName == null)
|
|
{
|
|
LogSystem.LogError("CityInfoMono.SetCityName: CityName is null.");
|
|
return;
|
|
}
|
|
|
|
MultilingualManager.Instance.SetUIText(CityName,cityName_ENCODE);
|
|
RebuildCityInfoBar();
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|