using System.Collections.Generic; using EventSystem.Runtime; using Adventurer.Runtime; using Core.Runtime; using Quests.Runtime; using TMPro; using UnityEngine; namespace GameUI.Runtime { public class AdventurersPanel : BasePanel { #region Unity API void OnEnable() { AdventurerSignals.OnPortraitCaptured += OnPortraitCapturedHandler; AdventurerSignals.OnRefresh += DisplayAdventurers; } private void Start() { foreach (var txt in GetComponentsInChildren()) { txt.text = LocalizationSystem.Instance.GetLocalizedText(txt.text); } DisplayAdventurers(); } private void OnDisable() { AdventurerSignals.OnPortraitCaptured -= OnPortraitCapturedHandler; AdventurerSignals.OnRefresh -= DisplayAdventurers; } #endregion #region Utils void OnPortraitCapturedHandler(AdventurerClass adventurer, Sprite portrait) { foreach (Transform child in _heroesPanel.transform) { AdventurerCardUI card = child.GetComponent(); if (card != null && card.Adventurer == adventurer) { card.SetPortrait(portrait); break; } } } void DisplayAdventurers() { foreach (Transform child in _heroesPanel.transform) { Destroy(child.gameObject); } List filtered = FilterAdventurers(_sort); foreach (AdventurerClass adventurer in filtered) { GameObject cardAdventurerGO = Instantiate(_adventurerPrefab, _heroesPanel.transform); cardAdventurerGO.transform.SetAsLastSibling(); AdventurerCardUI card = cardAdventurerGO.GetComponent(); card.setup(adventurer); } } List FilterAdventurers(AdventurerSortEnum sortType) { List allAdventurers = GetFact>("my_adventurers"); switch (sortType) { case AdventurerSortEnum.Available: return allAdventurers.FindAll(a => a.IsAvailable); case AdventurerSortEnum.NotAvailable: return allAdventurers.FindAll(a => !a.IsAvailable); case AdventurerSortEnum.AssignedToQuest: return QuestClass.GetAdventurersFromId(QuestManager.Instance.AssignedAdventurers); case AdventurerSortEnum.None: return allAdventurers; default: return allAdventurers; } } #endregion #region Privates and Protected [SerializeField] GameObject _adventurerPrefab; [SerializeField] GameObject _heroesPanel; [SerializeField] AdventurerSortEnum _sort; #endregion } }