diff --git a/Assets/Scenes/Samir.unity b/Assets/Scenes/Samir.unity index 84d2ffa..98bc285 100644 --- a/Assets/Scenes/Samir.unity +++ b/Assets/Scenes/Samir.unity @@ -1630,10 +1630,10 @@ MonoBehaviour: m_Content: {fileID: 297350527} m_Horizontal: 0 m_Vertical: 1 - m_MovementType: 1 + m_MovementType: 2 m_Elasticity: 0.1 m_Inertia: 1 - m_DecelerationRate: 0.135 + m_DecelerationRate: 25 m_ScrollSensitivity: 50 m_Viewport: {fileID: 0} m_HorizontalScrollbar: {fileID: 0} diff --git a/Assets/Scripts/Basic/ClearStatic.cs b/Assets/Scripts/Basic/ClearStatic.cs index 3d5229b..1b8126a 100644 --- a/Assets/Scripts/Basic/ClearStatic.cs +++ b/Assets/Scripts/Basic/ClearStatic.cs @@ -1,5 +1,6 @@ using System; using GameOff.Core; +using GameOff.UI.Quiz; using UnityEngine; namespace GameOff.Basic @@ -10,6 +11,7 @@ namespace GameOff.Basic private void Awake() { PlayerMain.ClearStaticVariables(); + QuestionUI.ClearStaticVariables(); } } } \ No newline at end of file diff --git a/Assets/Scripts/Core/PlayerMain.cs b/Assets/Scripts/Core/PlayerMain.cs index 2b43e80..c715035 100644 --- a/Assets/Scripts/Core/PlayerMain.cs +++ b/Assets/Scripts/Core/PlayerMain.cs @@ -1,10 +1,12 @@ using System; using GameOff.Player; +using GameOff.Quiz; +using GameOff.UI.Quiz; using UnityEngine; namespace GameOff.Core { - public class PlayerMain : MonoBehaviour + public class PlayerMain : QuizTaker { public static PlayerMain Instance { get; private set; } public static void ClearStaticVariables() @@ -33,13 +35,16 @@ namespace GameOff.Core _inputHandler = GetComponent(); } - private void Start() + protected override void Start() { _inputHandler.OnChangeState += InputHandler_OnChangeState; + QuestionUI.OnAnyQuestionChoice += (sender, choice) => answers[choice.Index - 1] = choice.Answer; _classState = new PlayerClassState(); _quizState = new PlayerQuizState(); _currentState = _classState; + + base.Start(); } private void Update() diff --git a/Assets/Scripts/Quiz/QuestionChoice.cs b/Assets/Scripts/Quiz/QuestionChoice.cs new file mode 100644 index 0000000..1819ecb --- /dev/null +++ b/Assets/Scripts/Quiz/QuestionChoice.cs @@ -0,0 +1,14 @@ +namespace GameOff.Quiz +{ + public struct QuestionChoice + { + public int Index { get; private set; } + public string Answer { get; private set; } + + public QuestionChoice(int index, string answer) + { + Index = index; + Answer = answer; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Quiz/QuestionChoice.cs.meta b/Assets/Scripts/Quiz/QuestionChoice.cs.meta new file mode 100644 index 0000000..2f8dc62 --- /dev/null +++ b/Assets/Scripts/Quiz/QuestionChoice.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3d8895d53dbf4543ab3eddd7c7616285 +timeCreated: 1731344936 \ No newline at end of file diff --git a/Assets/Scripts/Core/QuizHandler.cs b/Assets/Scripts/Quiz/QuizHandler.cs similarity index 96% rename from Assets/Scripts/Core/QuizHandler.cs rename to Assets/Scripts/Quiz/QuizHandler.cs index 8a64b11..de94496 100644 --- a/Assets/Scripts/Core/QuizHandler.cs +++ b/Assets/Scripts/Quiz/QuizHandler.cs @@ -1,11 +1,9 @@ using System; using System.Collections.Generic; -using GameOff.Quiz; using UnityEngine; -using UnityEngine.Serialization; using Random = System.Random; -namespace GameOff.Core +namespace GameOff.Quiz { [DefaultExecutionOrder(-60)] public class QuizHandler : MonoBehaviour @@ -60,5 +58,7 @@ namespace GameOff.Core } public List QuestionInfos => _questionInfos; + + public int QuestionAmount => questionAmount; } } diff --git a/Assets/Scripts/Core/QuizHandler.cs.meta b/Assets/Scripts/Quiz/QuizHandler.cs.meta similarity index 100% rename from Assets/Scripts/Core/QuizHandler.cs.meta rename to Assets/Scripts/Quiz/QuizHandler.cs.meta diff --git a/Assets/Scripts/Quiz/QuizTaker.cs b/Assets/Scripts/Quiz/QuizTaker.cs new file mode 100644 index 0000000..7d06e49 --- /dev/null +++ b/Assets/Scripts/Quiz/QuizTaker.cs @@ -0,0 +1,14 @@ +using System; +using UnityEngine; + +namespace GameOff.Quiz +{ + public abstract class QuizTaker: MonoBehaviour + { + [SerializeField] protected string[] answers; + protected virtual void Start() + { + answers = new string[QuizHandler.Instance.QuestionAmount]; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Quiz/QuizTaker.cs.meta b/Assets/Scripts/Quiz/QuizTaker.cs.meta new file mode 100644 index 0000000..ee00ebb --- /dev/null +++ b/Assets/Scripts/Quiz/QuizTaker.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: bfaa0e61d02c43a5b4176e1b4aeb0fb7 +timeCreated: 1731343953 \ No newline at end of file diff --git a/Assets/Scripts/UI/Quiz/ChoiceUI.cs b/Assets/Scripts/UI/Quiz/ChoiceUI.cs index a585a45..8dcf633 100644 --- a/Assets/Scripts/UI/Quiz/ChoiceUI.cs +++ b/Assets/Scripts/UI/Quiz/ChoiceUI.cs @@ -6,7 +6,7 @@ namespace GameOff.UI.Quiz { public class ChoiceUI: MonoBehaviour { - public event EventHandler OnAswerTrigger; + public event EventHandler OnAnswerTrigger; [SerializeField] private Text letterText; [SerializeField] private Button selectButton; @@ -17,9 +17,9 @@ namespace GameOff.UI.Quiz letterText.text = $"{letter}."; selectedVisual.SetActive(false); - selectButton.onClick.AddListener(() => OnAswerTrigger?.Invoke(this, letter)); + selectButton.onClick.AddListener(() => OnAnswerTrigger?.Invoke(this, letter)); - question.OnChoiceUptade += (sender, e) => selectedVisual.SetActive(e == letter); + question.OnChoiceUpdate += (sender, e) => selectedVisual.SetActive(e == letter); } } } \ No newline at end of file diff --git a/Assets/Scripts/UI/Quiz/QuestionUI.cs b/Assets/Scripts/UI/Quiz/QuestionUI.cs index 4c2f140..70eba4d 100644 --- a/Assets/Scripts/UI/Quiz/QuestionUI.cs +++ b/Assets/Scripts/UI/Quiz/QuestionUI.cs @@ -9,7 +9,13 @@ namespace GameOff.UI.Quiz { public class QuestionUI: MonoBehaviour { - public event EventHandler OnChoiceUptade; + public static event EventHandler OnAnyQuestionChoice; + public static void ClearStaticVariables() + { + OnAnyQuestionChoice = null; + } + + public event EventHandler OnChoiceUpdate; [SerializeField] private Text number; [SerializeField] private Image question; @@ -25,13 +31,12 @@ namespace GameOff.UI.Quiz { ChoiceUI choice = Instantiate(choicePrefab, choiceHolder); choice.SetUp(answer, this); - choice.OnAswerTrigger += ChoiceUI_OnAswerTrigger; + choice.OnAnswerTrigger += (sender, e) => + { + OnChoiceUpdate?.Invoke(this, e); + OnAnyQuestionChoice?.Invoke(this, new QuestionChoice(info.Index, answer)); + }; } } - - private void ChoiceUI_OnAswerTrigger(object sender, string e) - { - OnChoiceUptade?.Invoke(this, e); - } } } \ No newline at end of file