TH1/Unity/Assets/Scripts/TH1_DataAssetsScript/DiplomacyDataAssets.cs
2025-08-27 19:49:41 +08:00

164 lines
5.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics;
using UnityEngine;
using RuntimeData;
using Logic.Multilingual;
using TH1_Logic.Action;
using TH1Resource;
[Serializable]
[CreateAssetMenu(fileName = "DiplomacyDataAssets", menuName = "TH1 Game Data/Diplomacy Data Asset")]
public class DiplomacyDataAssets : ScriptableObject
{
[MultilingualField] public string NoMeetText;
[MultilingualField] public string DiplomacyUITitle;
[MultilingualField] public string DiplomacyUITitleSelf;
[MultilingualField] public string DiplomacyUIAnnounceOfferAlly;
[MultilingualField] public string DiplomacyUIAnnounceAcceptAlly;
[MultilingualField] public string DiplomacyUIAnnounceRefuseAlly;
[MultilingualField] public string DiplomacyUIAnnounceBreakAlly;
[MultilingualField] public string DiplomacyUIAnnounceEmbassy;
[MultilingualField] public string DiplomacyUIAnnounceEmbassyPassive;
[MultilingualField] public string DiplomacyUIAnnounceBreakEmbassy;
[MultilingualField] public string DiplomacyUIAnnounceBreakEmbassyPassive;
[MultilingualField] public string DiplomacyUINotifyOfferAlly;
[MultilingualField] public string DiplomacyUINotifyEmbassy;
[MultilingualField] public string DiplomacyUIOtherRelationTitle;
public List<DiplomacyStateInfo> DiplomacyStateInfoList;
public List<FeelingStateInfo> FeelingStateInfoList;
public List<FeelingStrategyInfo> FeelingStrategyInfoList;
public List<DiplomacyChatInfo> DiplomacyChatInfoList;
public bool GetStateInfo(DiplomacyState state,out DiplomacyStateInfo info)
{
foreach(var t in DiplomacyStateInfoList)
if (state == t.DiplomacyState)
{
info = t;
return true;
}
info = null;
return false;
}
public bool GetFeelingInfo(FeelingState state,out FeelingStateInfo info)
{
foreach(var t in FeelingStateInfoList)
if (state == t.FeelingState)
{
info = t;
return true;
}
info = null;
return false;
}
public bool GetFeelingStragegyInfo(FeelingStrategy feelingStrategy,out FeelingStrategyInfo info)
{
foreach(var t in FeelingStrategyInfoList)
if (feelingStrategy == t.FeelingStrategy)
{
info = t;
return true;
}
info = null;
return false;
}
public bool GetDiplomacyChatInfo(Forces force,out DiplomacyChatInfo info)
{
foreach(var t in DiplomacyChatInfoList)
if (force == t.force)
{
info = t;
return true;
}
info = null;
return false;
}
public string GetDiplomacyAnnounceText(PlayerActionType type,bool breakEmbassy = false)
{
switch(type)
{
case PlayerActionType.AcceptAlly:
return DiplomacyUIAnnounceAcceptAlly;
case PlayerActionType.OfferAlly:
return DiplomacyUIAnnounceOfferAlly;
case PlayerActionType.RefuseAlly:
return DiplomacyUIAnnounceRefuseAlly;
case PlayerActionType.BreakAlly:
return DiplomacyUIAnnounceBreakAlly;
case PlayerActionType.Embassy:
return breakEmbassy ? DiplomacyUIAnnounceBreakEmbassy : DiplomacyUIAnnounceEmbassy;
}
return "";
}
public Sprite GetDiplomacyAnnounceStateSprite(PlayerActionType type)
{
switch(type)
{
case PlayerActionType.AcceptAlly:
return ResourceCache.Instance.SpriteCache.Ally;
case PlayerActionType.OfferAlly:
return ResourceCache.Instance.SpriteCache.Ally;
case PlayerActionType.RefuseAlly:
return ResourceCache.Instance.SpriteCache.BreakAlly;
case PlayerActionType.BreakAlly:
return ResourceCache.Instance.SpriteCache.BreakAlly;
case PlayerActionType.Embassy:
return ResourceCache.Instance.SpriteCache.Embassy;
}
return null;
}
}
[Serializable]
public class DiplomacyStateInfo
{
public DiplomacyState DiplomacyState;
[MultilingualField] public string stateText;
public Color stateColor;
public Material stateBGMat;
}
[Serializable]
public class FeelingStateInfo
{
public FeelingState FeelingState;
[MultilingualField] public string feelingText;
public Color feelingColor;
}
[Serializable]
public class FeelingStrategyInfo
{
public FeelingStrategy FeelingStrategy;
[MultilingualField] public string FeelingStrategyTitle;
[MultilingualField] public string FeelingStrategyDesc;
public Color FeelingStrategyColor;
}
[Serializable]
public class DiplomacyChatInfo
{
public Forces force;
public List<string> AllyBreakText;
public List<string> AllyOfferText;
public List<string> AllyAcceptText;
public List<string> AllyRefuseText;
public List<string> RelationTrustText;
public List<string> RelationAppreciateText;
public List<string> RelationIndifferentText;
public List<string> RelationSuspicionText;
public List<string> RelationTerribleText;
}