public void SaveQuestion() { currentObj = EventSystem.current.currentSelectedGameObject.GetComponentInParent <AudioSource>().gameObject; if (currentObj.GetComponent <PanelModel>().ImportDone) { int QuestionNumber = currentObj.GetComponentInParent <PanelModel>().PanelNumber; TMP_InputField[] answersInput = EventSystem.current.currentSelectedGameObject.transform.Find("QField").Find("AnswerField").GetComponentsInChildren <TMP_InputField>();//get the answers Toggle[] answersIsCorrect = new Toggle[answersInput.Length]; List <AnswerData> answers = new List <AnswerData>(); for (int i = 0; i < answersInput.Length; i++) { answersIsCorrect[i] = answersInput[i].GetComponentInChildren <Toggle>(); //get the correct statement of an answer answers.Add(new AnswerData(answersInput[i].text, answersIsCorrect[i].isOn)); } MusicQuestion question = new MusicQuestion(currentObj.GetComponentInParent <PanelModel>().Filepath, answers.ToArray()); //create a new MusicQuestion question.Fade = EventSystem.current.currentSelectedGameObject.transform.Find("FadeIn").GetComponentInChildren <Toggle>().isOn; question.StartTrack = currentObj.GetComponentInParent <PanelModel>().StartTime; question.Volume = currentObj.GetComponentInParent <PanelModel>().Volume; DataModel.Rounds[DataModel.IroundCur].Topics[DataModel.ItopicCur].Questions[QuestionNumber - 1] = question;//add the question in the current topic in DataModel } else { StartCoroutine(ChangeColor()); } }
/** * Create a new question in the DataModel and fill it with default value **/ public void NewQuestionPanelData() { nbQ++; btPrefab = Instantiate(Resources.Load <RectTransform>("Prefabs/BTSample"), GameObject.Find("BTGrid").transform); // set the new panel attributes to default values btPrefab.name = "BTSample" + nbQ; btPrefab.GetComponent <PanelModel>().PanelNumber = nbQ; btPrefab.GetComponent <PanelModel>().Volume = 1f; btPrefab.GetComponent <PanelModel>().StartTime = 0f; btPrefab.GetComponent <PanelModel>().ImportDone = false; // updating interface (language, events while clicking on button) btPrefab.Find("Delete").GetComponent <Button>().onClick.AddListener(() => RemoveQuestion()); btPrefab.Find("Delete").GetComponentInChildren <TextMeshProUGUI>().text = DataModel.TextToUse["menu_remove"]; btPrefab.Find("ValidateQuestion").GetComponent <Button>().onClick.AddListener(() => SaveQuestion()); btPrefab.Find("ValidateQuestion").Find("Validate").GetComponent <TextMeshProUGUI>().text = DataModel.TextToUse["menu_validate"]; btPrefab.Find("Play").GetComponent <Button>().onClick.AddListener(() => Play()); btPrefab.Find("Stop").GetComponent <Button>().onClick.AddListener(() => Stop()); btPrefab.Find("Pause").GetComponent <Button>().onClick.AddListener(() => Pause()); btPrefab.Find("ValidateQuestion").Find("ImportButton").GetComponent <Button>().onClick.AddListener(() => OpenMusicFileBrowser()); btPrefab.Find("ValidateQuestion").Find("ImportButton").GetComponentInChildren <TextMeshProUGUI>().text = DataModel.TextToUse["import_music"]; btPrefab.Find("ValidateQuestion").Find("FadeIn").GetComponentInChildren <TextMeshProUGUI>().text = DataModel.TextToUse["music_fadein"]; btPrefab.Find("ValidateQuestion").Find("TimeController").GetComponentInChildren <TextMeshProUGUI>().text = DataModel.TextToUse["music_starttime"]; btPrefab.Find("ValidateQuestion").Find("VolumeController").GetComponent <Slider>().onValueChanged.AddListener((x) => ChangeVolume(x)); btPrefab.Find("ValidateQuestion").Find("TimeController").GetComponent <Slider>().onValueChanged.AddListener((x) => ChangeTime(x)); for (int i = 1; i < 5; i++) { btPrefab.Find("ValidateQuestion").Find("QField").Find("AnswerField").Find("A" + i + "Field").Find("Text Area").GetComponentInChildren <TextMeshProUGUI>().text = DataModel.TextToUse["enter_answertext"]; btPrefab.Find("ValidateQuestion").Find("QField").Find("AnswerField").Find("A" + i + "Field").Find("TrueA" + i).GetComponentInChildren <TextMeshProUGUI>().text = DataModel.TextToUse["correct_answer"]; } //add a neutral question when user press the AddQuestion button and add it to the DataModel AnswerData[] ans = { new AnswerData("a", false), new AnswerData("b", false), new AnswerData("c", false), new AnswerData("d", false) }; MusicQuestion question = new MusicQuestion("new question", ans); DataModel.Rounds[DataModel.IroundCur].Topics[DataModel.ItopicCur].Questions.Add(question); }
public bool GeneralSave() { bool allpassed = true; PanelModel[] questions = gameObject.GetComponentsInChildren <PanelModel>(); foreach (PanelModel qi in questions) { if (qi.ImportDone) { int QuestionNumber = qi.PanelNumber; TMP_InputField[] answersInput = qi.transform.Find("ValidateQuestion").Find("QField").Find("AnswerField").GetComponentsInChildren <TMP_InputField>(); //get the answers Toggle[] answersIsCorrect = new Toggle[answersInput.Length]; List <AnswerData> answers = new List <AnswerData>(); for (int i = 0; i < answersInput.Length; i++) { answersIsCorrect[i] = answersInput[i].GetComponentInChildren <Toggle>(); //get the correct statement of an answer answers.Add(new AnswerData(answersInput[i].text, answersIsCorrect[i].isOn)); } MusicQuestion question = new MusicQuestion(qi.Filepath, answers.ToArray()); //create a new MusicQuestion question.MusicPath = qi.Filepath; question.Fade = qi.transform.Find("ValidateQuestion").Find("FadeIn").GetComponent <Toggle>().isOn; question.StartTrack = qi.StartTime; question.Volume = qi.Volume; DataModel.Rounds[DataModel.IroundCur].Topics[DataModel.ItopicCur].Questions[QuestionNumber - 1] = question;//add the question in the current topic in DataModel } else { allpassed = false; currentObj = qi.gameObject; StartCoroutine(ChangeColor()); break; } } if (allpassed) { DataModel.Save(DataModel.CurrentFilename); } return(allpassed); }
void Update() { if (EveryoneAnswered() && Time.timeScale == 1f) { Time.timeScale = 2f; } if (isBuzzActivate && buzz_event && !teamsCtrl[number_team_buzz - 1].buzzed) { DisableTeam(); if (!pauseActivated) { DisapearAllTeamsButOne(number_team_buzz); Pause(); LaunchSoundBuzzer(number_team_buzz); } if (Input.GetKeyDown(KeyCode.Y)) { Pause(); CancelInvoke(); sfx_buzzer_win.Play(); buzz_answer_confirm = true; DataModel.Scores[number_team_buzz - 1] += 5; if (DataModel.Jokers[number_team_buzz - 1]) { DataModel.Scores[number_team_buzz - 1] += 2; } buzz_event = false; isNextAvailable = true; ReappearAllTeams(); arrow.GetComponent <CanvasGroup>().alpha = 1; GameObject.Find("ArrowButton").GetComponent <Button>().interactable = true; UpdateScoreTeams(number_team_buzz); DisplayGoodAnswer(); musicSource.Stop(); } else if (Input.GetKeyDown(KeyCode.N)) { sfx_buzzer_defeat.Play(); StartCoroutine(WaitForRealSeconds(1.57f)); ReappearAllTeams(); teamsCtrl[number_team_buzz - 1].gameObject.GetComponent <CanvasGroup>().alpha = 0.5f; buzz_answer_confirm = true; teamsCtrl[number_team_buzz - 1].SetHasAnswered(true); teamsCtrl[number_team_buzz - 1].buzzed = true; buzz_event = false; EnableTeam(); } } else { // Pause/Resume the game if (Input.GetKeyUp(DataModel.Pause)) { Pause(); } //go to next question if (Input.GetKeyDown(DataModel.Next)) { GoToNextQuestion(); } if (musicQuestionIsPlaying) { // Make the sound fade in MusicQuestion musicQ = (MusicQuestion)DataModel.CurQuestion(); if (!resetvol && musicQ.Fade) { musicSource.volume = 0; resetvol = true; } if (musicQ.Fade && musicQuestionIsPlaying) { if (musicSource.volume < musicQ.Volume) { musicSource.volume = musicSource.volume + (Time.deltaTime / 8); } } if (timerctrl.GetCurrentTimeValue() < 2f) { if (musicSource.volume > 0) { musicSource.volume -= musicQ.Volume * Time.deltaTime / 2f; } } } } }
private void RunningQuestions() { goingToNextQuestion = false; if (isBuzzActivate) { buzz_event = false; EnableTeam(); EnableAllBuzzers(); ReappearAllTeams(); ResetTeamsAnswered(); } else { buzz_event = false; EnableTeam(); ReappearAllTeams(); ResetTeamsAnswered(); DisableAllBuzzers(); } // Make required objects to disappear at the start of question GameObject.Find("ArrowButton").GetComponent <Button>().interactable = false; arrow.GetComponent <CanvasGroup>().alpha = 0; foreach (GameObject e in timerPanelList) { e.GetComponent <CanvasGroup>().alpha = 0; } foreach (GameObject p in answerList) { p.GetComponent <CanvasGroup>().alpha = 0; } isNextAvailable = false; GameObject.Find("QuestionCounter").GetComponent <TextMeshProUGUI>().text = "Question " + actualQuestion + " / " + numberOfQuestions; // Either this is a MusicQuestion and we musicQuestionIsPlaying its music or we musicQuestionIsPlaying the basic question music if (DataModel.CurQuestion() is MusicQuestion) { MusicQuestion musicQ = (MusicQuestion)DataModel.CurQuestion(); var x = new WWW("file:///" + localpath + '/' + musicQ.MusicPath); while (!x.isDone) { } musicSource.clip = x.GetAudioClip(); musicSource.time = musicQ.StartTrack; if (!musicQ.Fade) { musicSource.volume = musicQ.Volume; } question_length_to_time = 2.5f; } else { int music_index = Random.Range(1, 4); music = Resources.Load <AudioClip>("Sounds/" + DataModel.QuestionMusicName + music_index); musicSource.clip = music; musicSource.volume = 0.75f; } foreach (PlayerModel e in teamsCtrl) { ChangeTeamColor(0, e); e.buzzed = false; } if (DataModel.CurQuestion() is MusicQuestion) { musicQuestionIsPlaying = true; } musicSource.Play(); // After 10 seconds, the timer and answers appears, 7 seconds after that a false answer disappears, again 4 seconds after and at 25 sec teams can'musicQ answer // anymore. Finally at 28 seconds, the true answer is revealed and points are given if (DataModel.CurQuestion() is TextQuestion) { TextQuestion texteQ = (TextQuestion)DataModel.CurQuestion(); questionText.text = texteQ.Question; //formule de merde a changer question_length_to_time = questionText.text.Length * 0.07f; } else { questionText.text = DataModel.TextToUse["music_display"] + actualQuestion; } answers = questions.First().Answers; GameObject.Find("Answer 1").GetComponent <TextMeshProUGUI>().text = answers[0].AnswerText; GameObject.Find("Answer 2").GetComponent <TextMeshProUGUI>().text = answers[1].AnswerText; GameObject.Find("Answer 3").GetComponent <TextMeshProUGUI>().text = answers[2].AnswerText; GameObject.Find("Answer 4").GetComponent <TextMeshProUGUI>().text = answers[3].AnswerText; Invoke("RevealAnswers", 3.0f + question_length_to_time); Invoke("EliminateFalseAnswer", 10.0f + question_length_to_time); Invoke("EliminateFalseAnswer", 14.0f + question_length_to_time); Invoke("DisableTeam", 18.0f + question_length_to_time); Invoke("FinalAnswerPhase", 21.0f + question_length_to_time); }
public void Load(string filepath) { string path = filepath; string jsonString = File.ReadAllText(path); JSONObject dataJson = (JSONObject)JSON.Parse(jsonString); // Set values QuizName = dataJson["Quizname"].Value; CurTopicName = dataJson["CurTopicName"].Value; RoundNumber = dataJson["RoundNumber"].AsInt; //indexes IroundCur = dataJson["IroundCur"].AsInt; ItopicCur = dataJson["ItopicCur"].AsInt; IquestionCur = dataJson["IquestionCur"].AsInt; Scores = new int[NumberOfTeams]; Jokers = new bool[NumberOfTeams]; for (int i = 0; i < Scores.Length; i++) { Scores[i] = dataJson[("Score" + i)].AsInt; Jokers[i] = dataJson[("Joker" + i)].AsBool; } // Rounds List <RoundData> rdList = new List <RoundData>(); for (int i = 0; i < dataJson["Rounds"].AsArray.Count; i++) { List <TopicData> tdList = new List <TopicData>(); for (int j = 0; j < dataJson["Rounds"].AsArray[i]["Topics"].AsArray.Count; j++) { List <QuestionData> qdList = new List <QuestionData>(); for (int k = 0; k < dataJson["Rounds"].AsArray[i]["Topics"].AsArray[j]["Questions"].AsArray.Count; k++) { AnswerData[] adTab = new AnswerData[dataJson["Rounds"].AsArray[i]["Topics"].AsArray[j]["Questions"].AsArray[k]["Answers"].AsArray.Count]; for (int l = 0; l < adTab.Length; l++) { AnswerData ad = new AnswerData(dataJson["Rounds"].AsArray[i]["Topics"].AsArray[j]["Questions"].AsArray[k]["Answers"].AsArray[l]["AnswerText"].Value, dataJson["Rounds"].AsArray[i]["Topics"].AsArray[j]["Questions"].AsArray[k]["Answers"].AsArray[l]["IsTrue"].AsBool); adTab[l] = ad; } switch (dataJson["Rounds"].AsArray[i]["Type"].Value) { case "Blind test": MusicQuestion mq = new MusicQuestion(dataJson["Rounds"].AsArray[i]["Topics"].AsArray[j]["Questions"].AsArray[k]["MusicPath"].Value, adTab); mq.StartTrack = dataJson["Rounds"].AsArray[i]["Topics"].AsArray[j]["Questions"].AsArray[k]["StartTrack"].AsFloat; mq.Volume = dataJson["Rounds"].AsArray[i]["Topics"].AsArray[j]["Questions"].AsArray[k]["Volume"].AsFloat; mq.Fade = dataJson["Rounds"].AsArray[i]["Topics"].AsArray[j]["Questions"].AsArray[k]["Fade"].AsBool; qdList.Add((QuestionData)mq); break; case "Musique": MusicQuestion mq2 = new MusicQuestion(dataJson["Rounds"].AsArray[i]["Topics"].AsArray[j]["Questions"].AsArray[k]["MusicPath"].Value, adTab); mq2.StartTrack = dataJson["Rounds"].AsArray[i]["Topics"].AsArray[j]["Questions"].AsArray[k]["StartTrack"].AsFloat; mq2.Volume = dataJson["Rounds"].AsArray[i]["Topics"].AsArray[j]["Questions"].AsArray[k]["Volume"].AsFloat; mq2.Fade = dataJson["Rounds"].AsArray[i]["Topics"].AsArray[j]["Questions"].AsArray[k]["Fade"].AsBool; qdList.Add((QuestionData)mq2); break; case "Image": ImageQuestion iq = new ImageQuestion(dataJson["Rounds"].AsArray[i]["Topics"].AsArray[j]["Questions"].AsArray[k]["ImagePath"].Value, adTab); qdList.Add((QuestionData)iq); break; case "QCM": TextQuestion tq = new TextQuestion(dataJson["Rounds"].AsArray[i]["Topics"].AsArray[j]["Questions"].AsArray[k]["Question"].Value, adTab); qdList.Add((QuestionData)tq); break; case "MCQ": TextQuestion tq2 = new TextQuestion(dataJson["Rounds"].AsArray[i]["Topics"].AsArray[j]["Questions"].AsArray[k]["Question"].Value, adTab); qdList.Add((QuestionData)tq2); break; case "TrueFalse": TrueFalseQuestion tf = new TrueFalseQuestion(dataJson["Rounds"].AsArray[i]["Topics"].AsArray[j]["Questions"].AsArray[k]["Question"].Value, adTab); qdList.Add((QuestionData)tf); break; case "VraiFaux": TrueFalseQuestion tf2 = new TrueFalseQuestion(dataJson["Rounds"].AsArray[i]["Topics"].AsArray[j]["Questions"].AsArray[k]["Question"].Value, adTab); qdList.Add((QuestionData)tf2); break; default: Debug.LogError("Type de question non-reconnu"); break; } } TopicData td = new TopicData(dataJson["Rounds"].AsArray[i]["Topics"].AsArray[j]["Name"].Value, qdList); td.IsAvailable = dataJson["Rounds"].AsArray[i]["Topics"].AsArray[j]["IsAvailable"].AsBool; tdList.Add(td); } RoundData rd = new RoundData(dataJson["Rounds"].AsArray[i]["Type"].Value, tdList, dataJson["Rounds"].AsArray[i]["IsBuzzActivate"].AsBool); rdList.Add(rd); } Rounds = rdList; }
/** * @author David * * Saving the current state of DataModel in the data.json file **/ public static void Save(string filepath) { JSONObject dataJson = new JSONObject(); dataJson.Add("Quizname", QuizName); dataJson.Add("CurTopicName", CurTopicName); dataJson.Add("RoundNumber", RoundNumber); // indexes dataJson.Add("IroundCur", IroundCur); dataJson.Add("ItopicCur", ItopicCur); dataJson.Add("IquestionCur", IquestionCur); for (int i = 0; i < Scores.Length; i++) { dataJson.Add("Score" + i, Scores[i]); dataJson.Add("Joker" + i, Jokers[i]); } JSONArray roundsJsonArray = new JSONArray(); foreach (RoundData rd in Rounds) { JSONObject roundJson = new JSONObject(); roundJson.Add("Type", rd.Type); roundJson.Add("IsBuzzActivate", rd.IsBuzzRound); JSONArray topicsJsonArray = new JSONArray(); foreach (TopicData td in rd.Topics) { JSONObject topicJson = new JSONObject(); topicJson.Add("Name", td.Name); topicJson.Add("IsAvailable", td.IsAvailable); JSONArray questionsJsonArray = new JSONArray(); foreach (QuestionData qd in td.Questions) { JSONObject questionJson = new JSONObject(); switch (qd.GetType().ToString()) { case "MusicQuestion": MusicQuestion mq = (MusicQuestion)qd; questionJson.Add("MusicPath", mq.MusicPath); questionJson.Add("StartTrack", mq.StartTrack); questionJson.Add("Volume", mq.Volume); questionJson.Add("Fade", mq.Fade); break; case "ImageQuestion": ImageQuestion iq = (ImageQuestion)qd; questionJson.Add("ImagePath", iq.ImagePath); break; case "TextQuestion": TextQuestion tq = (TextQuestion)qd; questionJson.Add("Question", tq.Question); break; case "TrueFalseQuestion": TrueFalseQuestion tfq = (TrueFalseQuestion)qd; questionJson.Add("Question", tfq.Question); break; default: Debug.LogError("Type de question non-reconnu"); break; } JSONArray answersJsonArray = new JSONArray(); foreach (AnswerData ad in qd.Answers) { JSONObject answerJson = new JSONObject(); answerJson.Add("AnswerText", ad.AnswerText); answerJson.Add("IsTrue", ad.IsTrue); answersJsonArray.Add(answerJson); } questionJson.Add("Answers", answersJsonArray); questionsJsonArray.Add(questionJson); } topicJson.Add("Questions", questionsJsonArray); topicsJsonArray.Add(topicJson); } roundJson.Add("Topics", topicsJsonArray); roundsJsonArray.Add(roundJson); } dataJson.Add("Rounds", roundsJsonArray); File.WriteAllText(filepath, dataJson.ToString()); }
private void RunningQuestions() { goingToNextQuestion = false; // Make required objects to disappear at the start of question GameObject.Find("ArrowButton").GetComponent <Button>().interactable = false; arrow.GetComponent <CanvasGroup>().alpha = 0; foreach (GameObject e in timerPanelList) { e.GetComponent <CanvasGroup>().alpha = 0; } foreach (GameObject p in answerList) { p.GetComponent <CanvasGroup>().alpha = 0; } isNextAvailable = false; GameObject.Find("QuestionCounter").GetComponent <TextMeshProUGUI>().text = "Question " + actualQuestion + " / " + numberOfQuestions; // Either this is a MusicQuestion and we musicQuestionIsPlaying its music or we musicQuestionIsPlaying the basic question music if (DataModel.CurQuestion() is MusicQuestion) { MusicQuestion musicQ = (MusicQuestion)DataModel.CurQuestion(); var x = new WWW("file:///" + localpath + '/' + musicQ.MusicPath); while (!x.isDone) { } musicSource.clip = x.GetAudioClip(); musicSource.time = musicQ.StartTrack; if (!musicQ.Fade) { musicSource.volume = musicQ.Volume; } } else { music = Resources.Load <AudioClip>("Sounds/" + DataModel.QuestionMusicName); musicSource.clip = music; } DisableTeam(); StartCoroutine(DisplayText()); foreach (PlayerModel e in teamsctrl) { ChangeTeamColor(0, e); } if (DataModel.CurQuestion() is MusicQuestion) { musicQuestionIsPlaying = true; } musicSource.Play(); // After 10 seconds, the timer and answers appears, 7 seconds after that a false answer disappears, again 4 seconds after and at 25 sec teams can'musicQ answer // anymore. Finally at 28 seconds, the true answer is revealed and points are given Invoke("RevealAnswers", 10); Invoke("EliminateFalseAnswer", 17); Invoke("EliminateFalseAnswer", 21); Invoke("DisableTeam", 25); Invoke("FinalAnswerPhase", 28); }
void Update() { if (!gfini) { for (int i = 0; i < teamsctrl.Count; i++) { if (teamsctrl[i].buzzed) { Pause(); while (!grepondu) { if (Input.GetKeyDown(KeyCode.Y)) { DataModel.Scores[i] += 5; GoToNextQuestion(); } else if (Input.GetKeyDown(KeyCode.N)) { grepondu = true; Pause(); teamsctrl[i].enabled = false; } } } } } // Pause/Resume the game if (Input.GetKeyUp(DataModel.Pause)) { Pause(); } //go to next question if (Input.GetKeyDown(DataModel.Next)) { GoToNextQuestion(); } if (musicQuestionIsPlaying) { // Make the sound fade in MusicQuestion musicQ = (MusicQuestion)DataModel.CurQuestion(); if (!resetvol && musicQ.Fade) { musicSource.volume = 0; resetvol = true; } if (musicQ.Fade && musicQuestionIsPlaying) { if (musicSource.volume < musicQ.Volume) { Debug.Log(musicSource.volume); musicSource.volume = musicSource.volume + (Time.deltaTime / 8); } } if (timerctrl.GetCurrentTimeValue() < 2f) { if (musicSource.volume > 0) { musicSource.volume -= musicQ.Volume * Time.deltaTime / 2f; } } } }