using System.Collections.Generic; using System.Linq; using Core.Runtime; using Player.Runtime; using Quest.Runtime; using Quests.Runtime; using TMPro; using UnityEngine; namespace GameUI.Runtime { public class QuestsBoardPanel : BaseMonobehaviour { #region Unity API void OnEnable() { _player = GetFact(GameManager.Instance.Profile); QuestManager.OnAvailableQuestsUpdated += OnAvailableQuestsChanged; } void OnDisable() { QuestManager.OnAvailableQuestsUpdated -= OnAvailableQuestsChanged; } void Start() { InitializeLocalization(); List availableTemplates = QuestManager.Instance.GetAvailableQuests(_player.GuildLevel); List acceptedQuests = QuestManager.Instance.ActiveQuests; DisplayAvailableQuests(availableTemplates, acceptedQuests); } #endregion #region Public void OnAvailableQuestsChanged(List availableTemplates) { List acceptedQuests = QuestManager.Instance.ActiveQuests; ClearPanel(); DisplayAvailableQuests(availableTemplates, acceptedQuests); } #endregion #region Utils void InitializeLocalization() { foreach (var txt in GetComponentsInChildren()) { txt.text = LocalizationSystem.Instance.GetLocalizedText(txt.text); } } void ClearPanel() { foreach (Transform child in _panel.transform) { Destroy(child.gameObject); } } void DisplayAvailableQuests(List availableTemplates, List acceptedQuests) { foreach (var quest in availableTemplates) { if (acceptedQuests.Any(q => q.Name == quest.data.Name)) { continue; } DisplayCard(quest); } } void DisplayCard(QuestTemplate quest) { GameObject GO = Instantiate(_questCardPrefab, _panel.transform); QuestCardUI card = GO.GetComponent(); card.Setup(quest.ToQuestClass(QuestStateEnum.Disponible)); } #endregion #region Privates and Protected PlayerClass _player; [SerializeField] GameObject _panel; [SerializeField] GameObject _questCardPrefab; #endregion } }