110 lines
3.1 KiB
C#
110 lines
3.1 KiB
C#
|
using UnityEngine;
|
||
|
using UnityEngine.UI;
|
||
|
|
||
|
namespace RoR2.UI;
|
||
|
|
||
|
public class AchievementCardController : MonoBehaviour
|
||
|
{
|
||
|
public Image iconImage;
|
||
|
|
||
|
public LanguageTextMeshController nameLabel;
|
||
|
|
||
|
public LanguageTextMeshController descriptionLabel;
|
||
|
|
||
|
public LayoutElement tabLayoutElement;
|
||
|
|
||
|
public float tabWidth;
|
||
|
|
||
|
public GameObject unlockedImage;
|
||
|
|
||
|
public GameObject cantBeAchievedImage;
|
||
|
|
||
|
public TooltipProvider tooltipProvider;
|
||
|
|
||
|
private static string GetAchievementParentIdentifier(string achievementIdentifier)
|
||
|
{
|
||
|
return AchievementManager.GetAchievementDef(achievementIdentifier)?.prerequisiteAchievementIdentifier;
|
||
|
}
|
||
|
|
||
|
private static int CalcAchievementTabCount(string achievementIdentifier)
|
||
|
{
|
||
|
int num = -1;
|
||
|
while (!string.IsNullOrEmpty(achievementIdentifier))
|
||
|
{
|
||
|
num++;
|
||
|
achievementIdentifier = GetAchievementParentIdentifier(achievementIdentifier);
|
||
|
}
|
||
|
return num;
|
||
|
}
|
||
|
|
||
|
public void SetAchievement(string achievementIdentifier, UserProfile userProfile)
|
||
|
{
|
||
|
AchievementDef achievementDef = AchievementManager.GetAchievementDef(achievementIdentifier);
|
||
|
if (achievementDef == null)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
bool flag = userProfile.HasAchievement(achievementIdentifier);
|
||
|
bool flag2 = userProfile.CanSeeAchievement(achievementIdentifier);
|
||
|
if ((bool)iconImage)
|
||
|
{
|
||
|
iconImage.sprite = (flag ? achievementDef.GetAchievedIcon() : achievementDef.GetUnachievedIcon());
|
||
|
}
|
||
|
if ((bool)nameLabel)
|
||
|
{
|
||
|
nameLabel.token = (userProfile.CanSeeAchievement(achievementIdentifier) ? achievementDef.nameToken : "???");
|
||
|
}
|
||
|
if ((bool)descriptionLabel)
|
||
|
{
|
||
|
descriptionLabel.token = (userProfile.CanSeeAchievement(achievementIdentifier) ? achievementDef.descriptionToken : "???");
|
||
|
}
|
||
|
if ((bool)unlockedImage)
|
||
|
{
|
||
|
unlockedImage.gameObject.SetActive(flag);
|
||
|
}
|
||
|
if ((bool)cantBeAchievedImage)
|
||
|
{
|
||
|
cantBeAchievedImage.gameObject.SetActive(!flag2);
|
||
|
}
|
||
|
if ((bool)tooltipProvider)
|
||
|
{
|
||
|
string overrideBodyText = "???";
|
||
|
if (flag2)
|
||
|
{
|
||
|
if (flag)
|
||
|
{
|
||
|
UnlockableDef unlockableDef = UnlockableCatalog.GetUnlockableDef(achievementDef.unlockableRewardIdentifier);
|
||
|
if (unlockableDef != null)
|
||
|
{
|
||
|
string @string = Language.GetString("ACHIEVEMENT_CARD_REWARD_FORMAT");
|
||
|
string string2 = Language.GetString(unlockableDef.nameToken);
|
||
|
overrideBodyText = string.Format(@string, string2);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
string string3 = Language.GetString("ACHIEVEMENT_CARD_REWARD_FORMAT");
|
||
|
string arg = "???";
|
||
|
overrideBodyText = string.Format(string3, arg);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
AchievementDef achievementDef2 = AchievementManager.GetAchievementDef(achievementDef.prerequisiteAchievementIdentifier);
|
||
|
if (achievementDef2 != null)
|
||
|
{
|
||
|
string string4 = Language.GetString("ACHIEVEMENT_CARD_PREREQ_FORMAT");
|
||
|
string string5 = Language.GetString(achievementDef2.nameToken);
|
||
|
overrideBodyText = string.Format(string4, string5);
|
||
|
}
|
||
|
}
|
||
|
tooltipProvider.titleToken = (flag2 ? achievementDef.nameToken : "???");
|
||
|
tooltipProvider.overrideBodyText = overrideBodyText;
|
||
|
}
|
||
|
if ((bool)tabLayoutElement)
|
||
|
{
|
||
|
tabLayoutElement.preferredWidth = (float)CalcAchievementTabCount(achievementIdentifier) * tabWidth;
|
||
|
}
|
||
|
}
|
||
|
}
|