File indexing completed on 2024-04-28 15:08:00
0001 /* GCompris - solar_system.js 0002 * 0003 * SPDX-FileCopyrightText: 2018 Aman Kumar Gupta <gupta2140@gmail.com> 0004 * 0005 * Authors: 0006 * Aman Kumar Gupta <gupta2140@gmail.com> 0007 * 0008 * SPDX-License-Identifier: GPL-3.0-or-later 0009 */ 0010 .pragma library 0011 .import QtQuick 2.12 as Quick 0012 .import "Dataset.js" as Dataset 0013 .import "qrc:/gcompris/src/core/core.js" as Core 0014 0015 var numberOfLevel 0016 var items 0017 var dataset 0018 var currentPlanetLevels 0019 var currentSubLevel 0020 var indexOfSelectedPlanet 0021 var assessmentModeQuestions = [] 0022 var allQuestions = [] 0023 0024 function start(items_) { 0025 items = items_ 0026 items.currentLevel = 0 0027 dataset = Dataset.get() 0028 0029 for(var i = 0; i < dataset.length; ++i) { 0030 items.planetsModel.append({ 0031 "realImg": dataset[i].realImg, 0032 "bodyName": dataset[i].bodyName, 0033 "bodySize": dataset[i].bodySize 0034 }); 0035 } 0036 0037 if(items.assessmentMode) 0038 startAssessmentMode() 0039 } 0040 0041 function stop() { 0042 } 0043 0044 function initLevel() { 0045 currentSubLevel = 0 0046 items.restartAssessmentMessage = false 0047 items.mainQuizScreen.score.numberOfSubLevels = currentPlanetLevels.length 0048 Core.shuffle(currentPlanetLevels) 0049 nextSubLevel(false) 0050 } 0051 0052 function nextSubLevel(isAssessmentMode) { 0053 items.restartAssessmentMessage = false 0054 var optionListShuffle = [] 0055 0056 if(!isAssessmentMode) { 0057 items.mainQuizScreen.score.currentSubLevel = currentSubLevel 0058 items.mainQuizScreen.closenessMeterValue = 0 0059 0060 if(currentSubLevel+1 > items.mainQuizScreen.score.numberOfSubLevels) { 0061 items.bonus.good("flower") 0062 return 0063 } 0064 else { 0065 items.mainQuizScreen.question = currentPlanetLevels[currentSubLevel].question 0066 items.hintProvided = currentPlanetLevels[currentSubLevel].hintProvided 0067 for(var i = 0 ; i < 4 ; i ++) { 0068 optionListShuffle.push({ 0069 "optionValue": currentPlanetLevels[currentSubLevel].options[i], 0070 "closeness": currentPlanetLevels[currentSubLevel].closeness[i] 0071 }); 0072 } 0073 } 0074 } 0075 else if(items.mainQuizScreen.score.currentSubLevel < items.mainQuizScreen.score.numberOfSubLevels) { 0076 items.mainQuizScreen.score.currentSubLevel = currentSubLevel + 1 0077 items.mainQuizScreen.question = assessmentModeQuestions[0].question 0078 for(var i = 0 ; i < 4 ; i ++) { 0079 optionListShuffle.push({ 0080 "optionValue": assessmentModeQuestions[0].options[i], 0081 "closeness": assessmentModeQuestions[0].closeness[i] 0082 }); 0083 } 0084 } 0085 else { 0086 items.restartAssessmentMessage = true 0087 return 0088 } 0089 0090 items.mainQuizScreen.closenessMeter.stopAnimations() 0091 0092 if((currentSubLevel + 1) <= items.mainQuizScreen.score.numberOfSubLevels) { 0093 items.mainQuizScreen.optionListModel.clear() 0094 Core.shuffle(optionListShuffle) 0095 0096 for(var i = 0 ; i < optionListShuffle.length ; i ++) 0097 items.mainQuizScreen.optionListModel.append(optionListShuffle[i]) 0098 0099 if(isAssessmentMode) 0100 currentSubLevel++ 0101 } 0102 } 0103 0104 function showSolarModel() { 0105 items.quizScreenVisible = false 0106 items.solarSystemVisible = true 0107 } 0108 0109 function startAssessmentMode() { 0110 items.solarSystemVisible = false 0111 items.quizScreenVisible = true 0112 items.mainQuizScreen.numberOfCorrectAnswers = 0 0113 items.mainQuizScreen.score.currentSubLevel = 0 0114 items.mainQuizScreen.score.numberOfSubLevels = 20 0115 currentSubLevel = 0 0116 assessmentModeQuestions = [] 0117 allQuestions = [] 0118 0119 for(var i = 0; i < dataset.length; i++) { 0120 for(var j = 0; j < dataset[i].levels.length; j++) 0121 allQuestions.push(dataset[i].levels[j]) 0122 } 0123 0124 Core.shuffle(allQuestions) 0125 assessmentModeQuestions = allQuestions.slice(0, 20) 0126 nextSubLevel(true) 0127 } 0128 0129 function appendAndAddQuestion() { 0130 var incorrectAnsweredQuestion = assessmentModeQuestions.shift() 0131 assessmentModeQuestions.push(incorrectAnsweredQuestion) 0132 0133 if(items.mainQuizScreen.score.numberOfSubLevels < 24) { 0134 assessmentModeQuestions.push(allQuestions[items.mainQuizScreen.score.numberOfSubLevels]) 0135 items.mainQuizScreen.score.numberOfSubLevels += 2 0136 } 0137 else if(items.mainQuizScreen.numberOfCorrectAnswers) 0138 items.mainQuizScreen.numberOfCorrectAnswers-- 0139 0140 nextSubLevel(true) 0141 } 0142 0143 function showQuizScreen(index) { 0144 items.currentLevel = 0 0145 indexOfSelectedPlanet = index 0146 0147 items.solarSystemVisible = false 0148 items.quizScreenVisible = true 0149 0150 currentPlanetLevels = dataset[indexOfSelectedPlanet].levels 0151 items.mainQuizScreen.planetRealImage = dataset[indexOfSelectedPlanet].realImg 0152 0153 if(indexOfSelectedPlanet != 0) { 0154 items.temperatureHint = dataset[indexOfSelectedPlanet].temperatureHint 0155 items.lengthOfYearHint = dataset[indexOfSelectedPlanet].lengthOfYearHint 0156 } 0157 0158 initLevel() 0159 } 0160 0161 function nextLevel() { 0162 items.currentLevel = Core.getNextLevel(items.currentLevel, numberOfLevel); 0163 if(!items.assessmentMode) 0164 initLevel() 0165 else 0166 startAssessmentMode() 0167 } 0168 0169 function previousLevel() { 0170 items.currentLevel = Core.getPreviousLevel(items.currentLevel, numberOfLevel); 0171 initLevel(); 0172 }