Tanoda
QuizAction.cs
Go to the documentation of this file.
1using System;
2using System.Collections;
3using System.Collections.Generic;
4using System.Linq;
5using System.Runtime.Serialization;
6using System.Text;
7using UnityEngine;
8using UnityEngine.UI;
9
10public class QuizAction : ActionObject, ISerializable
11{
12 internal string quizName;
13 public Dropdown drop;
14 private float timeSpentOnQuiz;
15 private bool started;
16
17 public override void Start()
18 {
19 base.Start();
20 FillDropdown();
21 //drop.SetValueWithoutNotify(0);
22 }
23
24 public void OnSelectionChanged(int value)
25 {
26 if (drop && drop.options.Count > value) quizName = drop.options[value].text;
27 }
28
29 new void Update()
30 {
31 base.Update();
32 if (!started) return;
33 timeSpentOnQuiz += Time.deltaTime;
34 }
35
36 public override void Triggered(string id)
37 {
38 base.Triggered(id);
39 if (string.IsNullOrEmpty(quizName)) quizName = drop.options[0].text;
40 QuizManager.instance.gameObject.SetActive(true);
41 QuizManager.instance.currentAction = this;
42 var txt = Encoding.UTF8.GetString(FileDragAndDrop.instance.paretnObject.transform
43 .GetComponentsInChildren<UploadedFile>(true).First(file => file.fileName == quizName).modelData);
44 var dataArray = txt.Split('\n');
45 var rightIndex = new List<int>();
46
47 if (Convert.ToBoolean(dataArray[1]))
48 rightIndex.Add(0);
49 if (Convert.ToBoolean(dataArray[2]))
50 rightIndex.Add(1);
51 if (Convert.ToBoolean(dataArray[3]))
52 rightIndex.Add(2);
53 if (Convert.ToBoolean(dataArray[4]))
54 rightIndex.Add(3);
55
56 var qd = new QuizManager.QuizData
57 {
58 QuizType = Convert.ToByte(dataArray[0]),
59 AnswerArray = new[]
60 {
61 Encoding.UTF8.GetString(Convert.FromBase64String(dataArray[6])),
62 Encoding.UTF8.GetString(Convert.FromBase64String(dataArray[7])),
63 Encoding.UTF8.GetString(Convert.FromBase64String(dataArray[8])),
64 Encoding.UTF8.GetString(Convert.FromBase64String(dataArray[9]))
65 },
66 Question = Encoding.UTF8.GetString(Convert.FromBase64String(dataArray[5])),
67 RightIndex = rightIndex.ToArray()
68 };
69 QuizManager.instance.UpdateQuiz(qd);
70 started = true;
71 }
72
73 public void GoodAnswer()
74 {
75 started = false;
76 StartCoroutine(LateTriggerOutput(outPuts[0].name));
77 SavedUser.instance.QuizAnswered(true, quizName, timeSpentOnQuiz);
78 }
79
80 public void WrongAnswer()
81 {
82 started = false;
83 StartCoroutine(LateTriggerOutput(outPuts[1].name));
84 SavedUser.instance.QuizAnswered(false, quizName, timeSpentOnQuiz);
85 }
86
87 IEnumerator LateTriggerOutput(string id)
88 {
89 yield return null;
90 TriggerOutput(id);
91 }
92
93 internal void FillDropdown()
94 {
95 drop.ClearOptions();
96 var fdd = FindObjectOfType<FileDragAndDrop>();
97 var t = fdd.paretnObject.transform;
98 var allModel = t.GetComponentsInChildren<UploadedFile>(true);
99 foreach (var o in allModel)
100 if (o.fileName.EndsWith(".qiz"))
101 drop.options.Add(new Dropdown.OptionData(o.fileName));
102
103 try
104 {
105 if (!string.IsNullOrEmpty(quizName))
106 {
107 for (int i = 0; i < drop.options.Count; i++)
108 {
109 Dropdown.OptionData o = drop.options[i];
110 if (o.text == quizName)
111 {
112 drop.SetValueWithoutNotify(i);
113 if (i == 0)
114 {
115 drop.captionText.text = o.text;
116 }
117 break;
118 }
119 }
120 }
121 else
122 {
123 drop.captionText.text = drop.options[0].text;
124 }
125 }
126 catch (Exception e)
127 {
128 Debug.LogException(e);
129 // ignored
130 }
131 }
132
133 public new void GetObjectData(SerializationInfo info, StreamingContext context)
134 {
135 base.GetObjectData(info, context);
136 info.AddValue("quizName", quizName, typeof(string));
137 }
138
139 public QuizAction(SerializationInfo info, StreamingContext context) : base(info, context)
140 {
141 quizName = info.GetString("quizName");
142 }
143}
UnityEngine.Debug Debug
Definition: TanodaServer.cs:19
void TriggerOutput(string id)
List< GameObject > outPuts
Definition: ActionObject.cs:19
static FileDragAndDrop instance
void OnSelectionChanged(int value)
Definition: QuizAction.cs:24
void WrongAnswer()
Definition: QuizAction.cs:80
void GoodAnswer()
Definition: QuizAction.cs:73
Dropdown drop
Definition: QuizAction.cs:13
new void GetObjectData(SerializationInfo info, StreamingContext context)
Definition: QuizAction.cs:133
override void Start()
Definition: QuizAction.cs:17
QuizAction(SerializationInfo info, StreamingContext context)
Definition: QuizAction.cs:139
override void Triggered(string id)
Definition: QuizAction.cs:36
byte[] modelData
Definition: UploadedFile.cs:7