99 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			99 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 
								 | 
							
								using System;
							 | 
						||
| 
								 | 
							
								using System.Collections.Generic;
							 | 
						||
| 
								 | 
							
								using Unity.Multiplayer.Center.Common;
							 | 
						||
| 
								 | 
							
								using Unity.Multiplayer.Center.Questionnaire;
							 | 
						||
| 
								 | 
							
								using Unity.Multiplayer.Center.Recommendations;
							 | 
						||
| 
								 | 
							
								using UnityEngine;
							 | 
						||
| 
								 | 
							
								using UnityEngine.UIElements;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Unity.Multiplayer.Center.Window.UI
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    internal class QuestionnaireView
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        public VisualElement Root { get; private set; }
							 | 
						||
| 
								 | 
							
								        readonly QuestionnaireData m_Questions;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        public event Action OnQuestionnaireDataChanged;
							 | 
						||
| 
								 | 
							
								        public event Action<Preset> OnPresetSelected;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        public QuestionnaireView(QuestionnaireData questions)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            m_Questions = questions;
							 | 
						||
| 
								 | 
							
								            Root = new VisualElement();
							 | 
						||
| 
								 | 
							
								            Root.name = "questionnaire-view";
							 | 
						||
| 
								 | 
							
								            Refresh();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        public void Refresh()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            RefreshData();
							 | 
						||
| 
								 | 
							
								            ReCreateVisualElements();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        void ReCreateVisualElements()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            Root.Clear();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            var existingAnswers = UserChoicesObject.instance.UserAnswers.Answers;
							 | 
						||
| 
								 | 
							
								            var questions = m_Questions.Questions;
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								            var gameSpecs = new QuestionSection(questions, existingAnswers, "Game Specifications", true);
							 | 
						||
| 
								 | 
							
								            gameSpecs.AddPresetView();
							 | 
						||
| 
								 | 
							
								            gameSpecs.OnPresetSelected += RaisePresetSelected;
							 | 
						||
| 
								 | 
							
								            gameSpecs.QuestionUpdated += QuestionUpdated;
							 | 
						||
| 
								 | 
							
								            Root.Add(gameSpecs);
							 | 
						||
| 
								 | 
							
								            gameSpecs.CreateAdvancedFoldout(questions, existingAnswers, "Detailed Game Specifications");
							 | 
						||
| 
								 | 
							
								            EvaluateAdvancedSectionVisibility();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        void EvaluateAdvancedSectionVisibility()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            var showAdvanced = UserChoicesObject.instance.Preset != Preset.None &&
							 | 
						||
| 
								 | 
							
								                Logic.AreMandatoryQuestionsFilled(QuestionnaireObject.instance.Questionnaire, UserChoicesObject.instance.UserAnswers);
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								            Root.Q<QuestionSection>().SetAdvancedSectionVisible(showAdvanced);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        public void Clear()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            OnQuestionnaireDataChanged = null;
							 | 
						||
| 
								 | 
							
								            Root.Clear();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        static void RefreshData()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            UserChoicesObject.instance.UserAnswers.Answers ??= new List<AnsweredQuestion>();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        internal void QuestionUpdated(AnsweredQuestion answeredQuestion)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            Logic.Update(UserChoicesObject.instance.UserAnswers, answeredQuestion);
							 | 
						||
| 
								 | 
							
								            UserChoicesObject.instance.Save();
							 | 
						||
| 
								 | 
							
								            if (IsAllQuestionsAnswered())
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                OnQuestionnaireDataChanged?.Invoke();
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            EvaluateAdvancedSectionVisibility();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        internal void RaisePresetSelected(Preset preset)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            OnPresetSelected?.Invoke(preset);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        bool IsAllQuestionsAnswered()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            foreach (var question in m_Questions.Questions)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                if (!RecommendationUtils.IsQuestionAnswered(question))
							 | 
						||
| 
								 | 
							
								                {
							 | 
						||
| 
								 | 
							
								                    return false;
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            return true;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |