265 lines
10 KiB
C#
265 lines
10 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 NoMeetPlayerName;
|
|
[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 DiplomacyUIAnnounceOfferAllyTitle;
|
|
[MultilingualField] public string DiplomacyUIAnnounceAcceptAllyTitle;
|
|
[MultilingualField] public string DiplomacyUIAnnounceRefuseAllyTitle;
|
|
[MultilingualField] public string DiplomacyUIAnnounceBreakAllyTitle;
|
|
[MultilingualField] public string DiplomacyUIAnnounceEmbassyTitle;
|
|
[MultilingualField] public string DiplomacyUIAnnounceEmbassyPassiveTitle;
|
|
[MultilingualField] public string DiplomacyUIAnnounceBreakEmbassyTitle;
|
|
[MultilingualField] public string DiplomacyUIAnnounceBreakEmbassyPassiveTitle;
|
|
|
|
|
|
[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 string GetDiplomacyAnnounceTextTitle(PlayerActionType type,bool breakEmbassy = false)
|
|
{
|
|
switch(type)
|
|
{
|
|
case PlayerActionType.AcceptAlly:
|
|
return DiplomacyUIAnnounceAcceptAllyTitle;
|
|
case PlayerActionType.OfferAlly:
|
|
return DiplomacyUIAnnounceOfferAllyTitle;
|
|
case PlayerActionType.RefuseAlly:
|
|
return DiplomacyUIAnnounceRefuseAllyTitle;
|
|
case PlayerActionType.BreakAlly:
|
|
return DiplomacyUIAnnounceBreakAllyTitle;
|
|
case PlayerActionType.Embassy:
|
|
return breakEmbassy ? DiplomacyUIAnnounceBreakEmbassyTitle : DiplomacyUIAnnounceEmbassyTitle;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
public string GetDiplomacyTextByFeeling(Forces forces, FeelingState state)
|
|
{
|
|
DiplomacyChatInfo chatInfo = null;
|
|
foreach(var t in DiplomacyChatInfoList)
|
|
if (t.force == forces)
|
|
{
|
|
chatInfo = t;
|
|
break;
|
|
}
|
|
|
|
if (chatInfo == null) return "";
|
|
return state switch
|
|
{
|
|
FeelingState.Trust => chatInfo.RelationTrustText.Count == 0 ? "" : chatInfo.RelationTrustText[UnityEngine.Random.Range(0, chatInfo.RelationTrustText.Count)],
|
|
FeelingState.Appreciate => chatInfo.RelationAppreciateText.Count == 0 ? "" : chatInfo.RelationAppreciateText[UnityEngine.Random.Range(0, chatInfo.RelationAppreciateText.Count)],
|
|
FeelingState.Indifferent => chatInfo.RelationIndifferentText.Count == 0 ? "" : chatInfo.RelationIndifferentText[UnityEngine.Random.Range(0, chatInfo.RelationIndifferentText.Count)],
|
|
FeelingState.Suspicion => chatInfo.RelationSuspicionText.Count == 0 ? "" : chatInfo.RelationSuspicionText[UnityEngine.Random.Range(0, chatInfo.RelationSuspicionText.Count)],
|
|
FeelingState.Terrible => chatInfo.RelationTerribleText.Count == 0 ? "" : chatInfo.RelationTerribleText[UnityEngine.Random.Range(0, chatInfo.RelationTerribleText.Count)],
|
|
_ => ""
|
|
};
|
|
}
|
|
|
|
public string GetDiplomacyTextByAction(Forces forces, PlayerActionType action)
|
|
{
|
|
DiplomacyChatInfo chatInfo = null;
|
|
foreach(var t in DiplomacyChatInfoList)
|
|
if (t.force == forces)
|
|
{
|
|
chatInfo = t;
|
|
break;
|
|
}
|
|
|
|
if (chatInfo == null) return "";
|
|
return action switch
|
|
{
|
|
PlayerActionType.OfferAlly => chatInfo.AllyOfferText.Count == 0 ? "" : chatInfo.AllyOfferText[UnityEngine.Random.Range(0, chatInfo.AllyOfferText.Count)],
|
|
PlayerActionType.BreakAlly => chatInfo.AllyBreakText.Count == 0 ? "" : chatInfo.AllyBreakText[UnityEngine.Random.Range(0, chatInfo.AllyBreakText.Count)],
|
|
PlayerActionType.RefuseAlly => chatInfo.AllyRefuseText.Count == 0 ? "" : chatInfo.AllyRefuseText[UnityEngine.Random.Range(0, chatInfo.AllyRefuseText.Count)],
|
|
PlayerActionType.AcceptAlly => chatInfo.AllyAcceptText.Count == 0 ? "" : chatInfo.AllyAcceptText[UnityEngine.Random.Range(0, chatInfo.AllyAcceptText.Count)],
|
|
_ => ""
|
|
};
|
|
}
|
|
}
|
|
|
|
[Serializable]
|
|
public class DiplomacyStateInfo
|
|
{
|
|
public DiplomacyState DiplomacyState;
|
|
[MultilingualField] public string StateText;
|
|
public Color StateColor;
|
|
public Color StateBGColor;
|
|
public Sprite StateIcon;
|
|
}
|
|
|
|
[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 string GetSpeaker()
|
|
{
|
|
switch (force)
|
|
{
|
|
case Forces.Remilia:
|
|
return nameof(GiantType.EgyptianRemilia);
|
|
case Forces.Kaguya:
|
|
return nameof(GiantType.FrenchKaguya);
|
|
case Forces.Kanako:
|
|
return nameof(GiantType.GermanyKanako);
|
|
case Forces.Satori:
|
|
return nameof(GiantType.IndianSatori);
|
|
case Forces.Reimu:
|
|
return "NorwayReimu";
|
|
case Forces.Byakuren:
|
|
return "BritishByakuren";
|
|
case Forces.Miko:
|
|
return "PersianMiko";
|
|
case Forces.Zanmu:
|
|
return "ByzantineZanmu";
|
|
}
|
|
return nameof(GiantType.None);
|
|
}
|
|
|
|
[MultilingualField(false,true,false)]public List<string> AllyBreakText;
|
|
[MultilingualField(false,true,false)]public List<string> AllyOfferText;
|
|
[MultilingualField(false,true,false)]public List<string> AllyAcceptText;
|
|
[MultilingualField(false,true,false)]public List<string> AllyRefuseText;
|
|
[MultilingualField(false,true,false)]public List<string> RelationTrustText;
|
|
[MultilingualField(false,true,false)]public List<string> RelationAppreciateText;
|
|
[MultilingualField(false,true,false)]public List<string> RelationIndifferentText;
|
|
[MultilingualField(false,true,false)]public List<string> RelationSuspicionText;
|
|
[MultilingualField(false,true,false)]public List<string> RelationTerribleText;
|
|
}
|
|
|
|
|
|
|