< Summary

Class:DCL.Quests.QuestLogComponentView
Assembly:Quests
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/Quests/QuestLogComponentView.cs
Covered lines:0
Uncovered lines:115
Coverable lines:115
Total lines:254
Line coverage:0% (0 of 115)
Covered branches:0
Total branches:0
Covered methods:0
Total methods:15
Method coverage:0% (0 of 15)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Awake()0%6200%
InitialiseSectionSelector()0%2100%
CompletedSectionOnSelect(...)0%12300%
InProgressSectionOnSelect(...)0%12300%
ShowActiveOrCompletedQuests(...)0%12300%
AddActiveQuest(...)0%6200%
AddCompletedQuest(...)0%12300%
RemoveQuestIfExists(...)0%12300%
SetAsFullScreenMenuMode(...)0%12300%
HandleActiveQuestSelection(...)0%6200%
HandleCompletedQuestSelection(...)0%6200%
SelectedQuest(...)0%12300%
SelectedCompletedQuest(...)0%12300%
SetIsGuest(...)0%2100%
RefreshControl()0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/Quests/QuestLogComponentView.cs

#LineLine coverage
 1using MainScripts.DCL.Helpers.Utils;
 2using System;
 3using System.Collections.Generic;
 4using System.Linq;
 5using TMPro;
 6using UnityEngine;
 7
 8namespace DCL.Quests
 9{
 10    public class QuestLogComponentView : BaseComponentView, IQuestLogComponentView
 11    {
 12        private const int MAX_QUESTS_COUNT = 10;
 13        private const string IN_PROGRESS_TITLE = "Active quests";
 14        private const string COMPLETED_TITLE = "Completed quests";
 15        private const int IN_PROGRESS_SECTION_INDEX = 0;
 16        private const int COMPLETED_SECTION_INDEX = 1;
 17
 18        [SerializeField] internal SectionSelectorComponentView sectionSelector;
 19        [SerializeField] internal QuestDetailsComponentView questDetailsComponentView;
 20        [SerializeField] internal TMP_Text headerText;
 21        [SerializeField] internal GameObject emptyState;
 22        [SerializeField] internal GameObject emptyActiveState;
 23        [SerializeField] internal GameObject emptyCompletedState;
 24        [SerializeField] internal Transform activeQuestsContainer;
 25        [SerializeField] internal ActiveQuestComponentView activeQuestPrefab;
 26
 27        public event Action<string, bool> OnPinChange;
 28        public event Action<Vector2Int> OnJumpIn;
 29        public event Action<string> OnQuestAbandon;
 30
 31        private Dictionary<string, ActiveQuestComponentView> activeQuests;
 32        private Dictionary<string, ActiveQuestComponentView> completedQuests;
 33        private UnityObjectPool<ActiveQuestComponentView> questsPool;
 34        private string previouslyActiveSelectedQuest;
 35        private string previouslyCompletedSelectedQuest;
 36
 37        public override void Awake()
 38        {
 039            activeQuests = new ();
 040            completedQuests = new ();
 041            questsPool = new UnityObjectPool<ActiveQuestComponentView>(activeQuestPrefab, activeQuestsContainer, actionO
 042            questsPool.Prewarm(MAX_QUESTS_COUNT);
 043            InitialiseSectionSelector();
 44
 045            questDetailsComponentView.OnJumpIn += (coords) => OnJumpIn?.Invoke(coords);
 046            questDetailsComponentView.OnPinChange += (questId, isPinned) => OnPinChange?.Invoke(questId, isPinned);
 047            questDetailsComponentView.OnQuestAbandon += (questId) => OnQuestAbandon?.Invoke(questId);
 48
 049            emptyState.SetActive(true);
 050        }
 51
 52        private void InitialiseSectionSelector()
 53        {
 054            sectionSelector.Awake();
 055            sectionSelector.GetSection(IN_PROGRESS_SECTION_INDEX).onSelect.RemoveAllListeners();
 056            sectionSelector.GetSection(COMPLETED_SECTION_INDEX).onSelect.RemoveAllListeners();
 057            sectionSelector.GetSection(IN_PROGRESS_SECTION_INDEX).onSelect.AddListener(InProgressSectionOnSelect);
 058            sectionSelector.GetSection(COMPLETED_SECTION_INDEX).onSelect.AddListener(CompletedSectionOnSelect);
 059        }
 60
 61        private void CompletedSectionOnSelect(bool isSelected)
 62        {
 063            if (!isSelected)
 064                return;
 65
 066            headerText.text = COMPLETED_TITLE;
 067            ShowActiveOrCompletedQuests(false);
 68
 069            if (completedQuests.Count == 0)
 70            {
 071                emptyState.SetActive(true);
 072                emptyActiveState.SetActive(false);
 073                emptyCompletedState.SetActive(true);
 74            }
 75            else
 76            {
 077                emptyState.SetActive(false);
 078                HandleCompletedQuestSelection(completedQuests.First().Key);
 79            }
 080        }
 81
 82        private void InProgressSectionOnSelect(bool isSelected)
 83        {
 084            if (!isSelected)
 085                return;
 86
 087            headerText.text = IN_PROGRESS_TITLE;
 088            ShowActiveOrCompletedQuests(true);
 89
 090            if (activeQuests.Count == 0)
 91            {
 092                emptyState.SetActive(true);
 093                emptyActiveState.SetActive(true);
 094                emptyCompletedState.SetActive(false);
 95            }
 96            else
 97            {
 098                emptyState.SetActive(false);
 099                HandleActiveQuestSelection(activeQuests.First().Key);
 100            }
 0101        }
 102
 103        private void ShowActiveOrCompletedQuests(bool active)
 104        {
 0105            foreach (var activeQuest in activeQuests.Values)
 106            {
 0107                activeQuest.gameObject.SetActive(active);
 108
 109            }
 0110            foreach (var completedQuest in completedQuests.Values)
 111            {
 0112                completedQuest.gameObject.SetActive(!active);
 113            }
 0114        }
 115
 116        public void AddActiveQuest(QuestDetailsComponentModel activeQuest, string creatorName)
 117        {
 0118            emptyState.SetActive(false);
 119
 0120            if (activeQuests.ContainsKey(activeQuest.questId))
 121            {
 0122                questsPool.Release(activeQuests[activeQuest.questId]);
 0123                activeQuests.Remove(activeQuest.questId);
 124            }
 125
 0126            activeQuests.TryAdd(activeQuest.questId, questsPool.Get());
 127
 0128            ActiveQuestComponentView activeQuestComponentView = activeQuests[activeQuest.questId];
 0129            activeQuestComponentView.OnActiveQuestSelected -= SelectedQuest;
 0130            activeQuestComponentView.SetModel(new ActiveQuestComponentModel()
 131            {
 132                questId = activeQuest.questId,
 133                questCreator = creatorName,
 134                questName = activeQuest.questName,
 135                questImageUri = activeQuest.questImageUri,
 136                isPinned = activeQuest.isPinned,
 137                questModel = activeQuest
 138            });
 0139            activeQuestComponentView.OnActiveQuestSelected += SelectedQuest;
 0140            HandleActiveQuestSelection(activeQuest.questId);
 0141            sectionSelector.GetSection(IN_PROGRESS_SECTION_INDEX).SelectToggle(true);
 0142        }
 143
 144        public void AddCompletedQuest(QuestDetailsComponentModel completedQuest, string creatorName)
 145        {
 0146            emptyState.SetActive(false);
 147
 0148            if (activeQuests.ContainsKey(completedQuest.questId))
 149            {
 0150                questsPool.Release(activeQuests[completedQuest.questId]);
 0151                activeQuests.Remove(completedQuest.questId);
 152            }
 153
 0154            if (!completedQuests.ContainsKey(completedQuest.questId))
 0155                completedQuests.Add(completedQuest.questId, questsPool.Get());
 156
 0157            ActiveQuestComponentView completedQuestComponentView = completedQuests[completedQuest.questId];
 0158            completedQuestComponentView.OnActiveQuestSelected -= SelectedCompletedQuest;
 0159            completedQuestComponentView.SetModel(new ActiveQuestComponentModel()
 160            {
 161                questId = completedQuest.questId,
 162                questCreator = creatorName,
 163                questName = completedQuest.questName,
 164                questImageUri = completedQuest.questImageUri,
 165                isPinned = false,
 166                questModel = completedQuest
 167            });
 0168            completedQuestComponentView.OnActiveQuestSelected += SelectedCompletedQuest;
 0169            HandleCompletedQuestSelection(completedQuest.questId);
 0170            sectionSelector.GetSection(IN_PROGRESS_SECTION_INDEX).SelectToggle(true);
 0171        }
 172
 173        public void RemoveQuestIfExists(string questId)
 174        {
 0175            if (!activeQuests.ContainsKey(questId)) return;
 176
 0177            questsPool.Release(activeQuests[questId]);
 0178            activeQuests.Remove(questId);
 0179            if (activeQuests.Count == 0)
 180            {
 0181                emptyState.SetActive(true);
 0182                emptyActiveState.SetActive(true);
 0183                emptyCompletedState.SetActive(false);
 184            }
 185            else
 186            {
 0187                HandleActiveQuestSelection(activeQuests.First().Key);
 188            }
 0189        }
 190
 191        public void SetAsFullScreenMenuMode(Transform parentTransform)
 192        {
 0193            if (parentTransform == null)
 0194                return;
 195
 196            Transform panelTransform;
 0197            (panelTransform = transform).SetParent(parentTransform);
 0198            panelTransform.localScale = Vector3.one;
 199
 0200            RectTransform rectTransform = panelTransform as RectTransform;
 0201            if (rectTransform == null) return;
 0202            rectTransform.anchorMin = Vector2.zero;
 0203            rectTransform.anchorMax = Vector2.one;
 0204            rectTransform.pivot = new Vector2(0.5f, 0.5f);
 0205            rectTransform.localPosition = Vector2.zero;
 0206            rectTransform.offsetMax = Vector2.zero;
 0207            rectTransform.offsetMin = Vector2.zero;
 0208            gameObject.SetActive(true);
 0209        }
 210
 211        private void HandleActiveQuestSelection(string questId)
 212        {
 0213            if(!string.IsNullOrEmpty(previouslyActiveSelectedQuest))
 0214                activeQuests[previouslyActiveSelectedQuest].Deselect();
 0215            activeQuests[questId].OnPointerClick(null);
 0216            previouslyActiveSelectedQuest = questId;
 0217        }
 218
 219        private void HandleCompletedQuestSelection(string questId)
 220        {
 0221            if(!string.IsNullOrEmpty(previouslyCompletedSelectedQuest))
 0222                completedQuests[previouslyCompletedSelectedQuest].Deselect();
 0223            completedQuests[questId].OnPointerClick(null);
 0224            previouslyCompletedSelectedQuest = questId;
 0225        }
 226
 227        private void SelectedQuest(QuestDetailsComponentModel questModel)
 228        {
 0229            if(!string.IsNullOrEmpty(previouslyActiveSelectedQuest) && activeQuests.TryGetValue(previouslyActiveSelected
 0230                quest.Deselect();
 231
 0232            questDetailsComponentView.SetModel(questModel);
 0233            questDetailsComponentView.SetFooter(true);
 0234            previouslyActiveSelectedQuest = questModel.questId;
 0235        }
 236
 237        private void SelectedCompletedQuest(QuestDetailsComponentModel questModel)
 238        {
 0239            if(!string.IsNullOrEmpty(previouslyCompletedSelectedQuest) && completedQuests.TryGetValue(previouslyComplete
 0240                quest.Deselect();
 241
 0242            questDetailsComponentView.SetFooter(false);
 0243            questDetailsComponentView.SetModel(questModel);
 0244            previouslyCompletedSelectedQuest = questModel.questId;
 0245        }
 246
 247        public void SetIsGuest(bool isGuest) =>
 0248            questDetailsComponentView.SetIsGuest(isGuest);
 249
 250        public override void RefreshControl()
 251        {
 0252        }
 253    }
 254}