using System; 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 Publics public QuestFactoryDatabase _questFactoryDatabase; #endregion #region Unity API void OnEnable() { _player = GetFact(GameManager.Instance.Profile); } /*void Start() { foreach (var txt in GetComponentsInChildren()) { txt.text = LocalizationSystem.Instance.GetLocalizedText(txt.text); } var factory = _questFactoryDatabase.GetFactoryForLevel(_player.GuildLevel); if (factory != null) { var availableTemplates = factory.questTemplates .Where(q => q.data.MinLevel <= _player.GuildLevel) .ToList(); List acceptedQuestNames = new List(); if (FactExists>("quests", out _)) { acceptedQuestNames = GetFact>("quests"); } foreach (var quest in availableTemplates) { if (acceptedQuestNames != null && acceptedQuestNames.Any(q => q.ID == quest.data.ID)) continue; DisplayCard(quest); } } }*/ void Start() { InitializeLocalization(); List availableTemplates = GetAvailableQuests(); List acceptedQuests = GetAcceptedQuests(); DisplayAvailableQuests(availableTemplates, acceptedQuests); } #endregion #region Main Methods // #endregion #region Utils void InitializeLocalization() { foreach (var txt in GetComponentsInChildren()) { txt.text = LocalizationSystem.Instance.GetLocalizedText(txt.text); } } List GetAvailableQuests() { var factory = _questFactoryDatabase.GetFactoryForLevel(_player.GuildLevel); if (factory == null) return new List(); return factory.questTemplates .Where(q => q.data.MinLevel <= _player.GuildLevel) .ToList(); } List GetAcceptedQuests() { if (FactExists>("quests", out _)) { return GetFact>("quests"); } return new List(); } 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 } }