using System; using System.Collections.Generic; using System.Linq; using Core.Runtime; using EventSystem.Runtime; using Quests.Runtime; using TMPro; using UnityEngine; using UnityEngine.Serialization; namespace GameUI.Runtime { public class QuestsPanel : BaseMonobehaviour { #region Publics // #endregion #region Unity API private void Start() { QuestSignals.OnRefresh += QuestList; QuestManager.OnQuestCompleted += QuestCompleted; foreach (var txt in GetComponentsInChildren()) { txt.text = LocalizationSystem.Instance.GetLocalizedText(txt.text); } QuestList(); } #endregion #region Utils void QuestList() { foreach (Transform child in _panel.transform) { Destroy(child.gameObject); } if (FactExists>(("accepted_quests"), out _)) { List questsFromSave = GetFact>(("accepted_quests")); List quests = QuestManager.Instance.ResolveQuestsList(questsFromSave); foreach (var quest in quests) { DisplayQuest(quest); //=> Key : L'id de la quĂȘte, Value : Le State } } } void DisplayQuest(QuestClass quest) { GameObject questGO = Instantiate(_questMiniPrefab, _panel.transform); TMP_Text questNameLabel = questGO.GetComponentInChildren(); questNameLabel.text = LocalizationSystem.Instance.GetLocalizedText(quest.Name); var questMini = questGO.GetComponent(); if (questMini != null) { questMini.SetQuestName(quest.Name); bool isCompleted = QuestManager.Instance?.IsQuestCompleted(quest.Name) == true; questMini.m_check?.SetActive(isCompleted); } questGO.GetComponent().SetQuest(quest); } void QuestCompleted(QuestClass quest) { CheckCompleted(quest); } void CheckCompleted(QuestClass quest) { foreach (Transform child in _panel.transform) { var questMini = child.GetComponent(); if (questMini != null && questMini.MatchesQuest(quest.Name)) { questMini.m_check?.SetActive(true); } } } #endregion #region privates and protected [SerializeField] GameObject _panel; [SerializeField] GameObject _questMiniPrefab; #endregion } }