using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; /// /// Defines the logic behind a single achievement on the UI /// public class UIAchievement : MonoBehaviour { public TMP_Text Title, Description, Percent; public Image Icon, OverlayIcon, ProgressBar; public GameObject SpoilerOverlay; public TMP_Text SpoilerText; public AchievenmentStack AS; /// /// Destroy object after a certain amount of time /// public void StartDeathTimer () { StartCoroutine(Wait()); } /// /// Add information about an Achievement to the UI elements /// public void Set (AchievementInfromation Information, AchievementState State) { if(Information.Spoiler && !State.Achieved) { if(SpoilerOverlay) SpoilerOverlay.SetActive(true); if(SpoilerText) SpoilerText.text = AchievementManager.instance.SpoilerAchievementMessage; } else { // Title.text = Information.DisplayName; Description.text = Information.Description; if (Information.LockOverlay && !State.Achieved) { if (OverlayIcon) { OverlayIcon.gameObject.SetActive(true); OverlayIcon.sprite = Information.LockedIcon; } if(Icon) Icon.sprite = Information.AchievedIcon; } else { if(Icon) Icon.sprite = State.Achieved ? Information.AchievedIcon : Information.LockedIcon; } if (Information.Progression) { float CurrentProgress = AchievementManager.instance.ShowExactProgress ? State.Progress : (State.LastProgressUpdate * Information.NotificationFrequency); float DisplayProgress = State.Achieved ? Information.ProgressGoal : CurrentProgress; if (State.Achieved) { if(Percent) Percent.text = Information.ProgressGoal + Information.ProgressSuffix + " / " + Information.ProgressGoal + Information.ProgressSuffix + " (Achieved)"; } else { if(Percent) Percent.text = DisplayProgress + Information.ProgressSuffix + " / " + Information.ProgressGoal + Information.ProgressSuffix; } ProgressBar.fillAmount = DisplayProgress / Information.ProgressGoal; } else //Single Time { ProgressBar.fillAmount = State.Achieved ? 1 : 0; Percent.text = State.Achieved ? "(Achieved)" : "(Locked)"; } } } private IEnumerator Wait () { yield return new WaitForSeconds(AchievementManager.instance.DisplayTime); GetComponent().SetTrigger("ScaleDown"); yield return new WaitForSeconds(0.1f); AS.CheckBackLog(); Destroy(gameObject); } }