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 }