A game about forced loneliness, made by TACStudios
1using System; 2using System.Collections.Generic; 3using Unity.Multiplayer.Center.Common; 4using Unity.Multiplayer.Center.Questionnaire; 5using Unity.Multiplayer.Center.Recommendations; 6using UnityEngine; 7using UnityEngine.UIElements; 8 9namespace Unity.Multiplayer.Center.Window.UI 10{ 11 internal class QuestionnaireView 12 { 13 public VisualElement Root { get; private set; } 14 readonly QuestionnaireData m_Questions; 15 16 public event Action OnQuestionnaireDataChanged; 17 public event Action<Preset> OnPresetSelected; 18 19 public QuestionnaireView(QuestionnaireData questions) 20 { 21 m_Questions = questions; 22 Root = new VisualElement(); 23 Root.name = "questionnaire-view"; 24 Refresh(); 25 } 26 27 public void Refresh() 28 { 29 RefreshData(); 30 ReCreateVisualElements(); 31 } 32 33 void ReCreateVisualElements() 34 { 35 Root.Clear(); 36 37 var existingAnswers = UserChoicesObject.instance.UserAnswers.Answers; 38 var questions = m_Questions.Questions; 39 40 41 var gameSpecs = new QuestionSection(questions, existingAnswers, "Game Specifications", true); 42 gameSpecs.AddPresetView(); 43 gameSpecs.OnPresetSelected += RaisePresetSelected; 44 gameSpecs.QuestionUpdated += QuestionUpdated; 45 Root.Add(gameSpecs); 46 gameSpecs.CreateAdvancedFoldout(questions, existingAnswers, "Detailed Game Specifications"); 47 EvaluateAdvancedSectionVisibility(); 48 } 49 50 void EvaluateAdvancedSectionVisibility() 51 { 52 var showAdvanced = UserChoicesObject.instance.Preset != Preset.None && 53 Logic.AreMandatoryQuestionsFilled(QuestionnaireObject.instance.Questionnaire, UserChoicesObject.instance.UserAnswers); 54 55 Root.Q<QuestionSection>().SetAdvancedSectionVisible(showAdvanced); 56 } 57 58 public void Clear() 59 { 60 OnQuestionnaireDataChanged = null; 61 Root.Clear(); 62 } 63 64 static void RefreshData() 65 { 66 UserChoicesObject.instance.UserAnswers.Answers ??= new List<AnsweredQuestion>(); 67 } 68 69 internal void QuestionUpdated(AnsweredQuestion answeredQuestion) 70 { 71 Logic.Update(UserChoicesObject.instance.UserAnswers, answeredQuestion); 72 UserChoicesObject.instance.Save(); 73 if (IsAllQuestionsAnswered()) 74 { 75 OnQuestionnaireDataChanged?.Invoke(); 76 } 77 EvaluateAdvancedSectionVisibility(); 78 } 79 80 internal void RaisePresetSelected(Preset preset) 81 { 82 OnPresetSelected?.Invoke(preset); 83 } 84 85 bool IsAllQuestionsAnswered() 86 { 87 foreach (var question in m_Questions.Questions) 88 { 89 if (!RecommendationUtils.IsQuestionAnswered(question)) 90 { 91 return false; 92 } 93 } 94 95 return true; 96 } 97 } 98}