File indexing completed on 2024-04-28 15:07:49

0001 /* GCompris - family.js
0002  *
0003  * SPDX-FileCopyrightText: 2016 Rajdeep Kaur <rajdeep.kaur@kde.org>
0004  *
0005  * Authors:
0006  *
0007  *   Rajdeep Kaur <rajdeep.kaur@kde.org>
0008  *   Rudra Nil Basu <rudra.nil.basu.1996@gmail.com>
0009  *
0010  *   SPDX-License-Identifier: GPL-3.0-or-later
0011  */
0012 .pragma library
0013 .import QtQuick 2.12 as Quick
0014 .import GCompris 1.0 as GCompris
0015 
0016 .import "qrc:/gcompris/src/core/core.js" as Core
0017 
0018 var items;
0019 var barAtStart;
0020 var url = "qrc:/gcompris/src/activities/family/resource/"
0021 
0022 var numberOfLevel
0023 var shuffledLevelIndex = []
0024 var levelToLoad
0025 var answerButtonRatio = 0;
0026 
0027 function start(items_) {
0028     items = items_
0029     numberOfLevel = items.dataset.levelElements.length
0030     items.currentLevel = Core.getInitialLevel(numberOfLevel)
0031     barAtStart = GCompris.ApplicationSettings.isBarHidden;
0032     GCompris.ApplicationSettings.isBarHidden = true;
0033 
0034     shuffle()
0035 
0036     initLevel()
0037 }
0038 
0039 function stop() {
0040     items.loadDatasetDelay.stop();
0041     GCompris.ApplicationSettings.isBarHidden = barAtStart;
0042 }
0043 
0044 function initLevel() {
0045 
0046     items.selectedPairs.reset()
0047     levelToLoad = getCurrentLevelIndex()
0048     var levelTree = items.dataset.levelElements[levelToLoad]
0049     items.dataset.numberOfGenerations = levelTree.numberOfGenerations
0050     // Need to delay in order of the number of generation change to be taken in account
0051     items.loadDatasetDelay.start()
0052 }
0053 
0054 function loadDatasets() {
0055     if (!items) {
0056         return
0057     }
0058 
0059     var levelTree = items.dataset.levelElements[levelToLoad]
0060 
0061     answerButtonRatio = 1 / (levelTree.options.length + 4);
0062 
0063     items.nodeRepeater.model.clear();
0064     items.answersChoice.model.clear();
0065     items.edgeRepeater.model.clear();
0066     items.ringRepeator.model.clear();
0067 
0068     for(var i = 0 ; i < levelTree.nodePositions.length ; i++) {
0069         items.nodeRepeater.model.append({
0070                        "xPosition": levelTree.nodePositions[i][0],
0071                        "yPosition": levelTree.nodePositions[i][1],
0072                        "nodeValue": levelTree.nodeValue[i],
0073                        "currentState": items.mode == "family" ? levelTree.currentState[i] : "deactive",
0074                        "nodeWeight": levelTree.nodeWeights[i]
0075                      });
0076     }
0077 
0078     for(var i = 0 ; i <levelTree.options.length ; i++) {
0079        items.answersChoice.model.append({
0080                "optionn": levelTree.options[i],
0081                "answer": levelTree.answer[0]
0082        });
0083     }
0084 
0085     for(var i = 0 ; i < levelTree.edgeList.length ; i++) {
0086         items.edgeRepeater.model.append({
0087              "_x1": levelTree.edgeList[i][0],
0088              "_y1": levelTree.edgeList[i][1],
0089              "_x2": levelTree.edgeList[i][2],
0090              "_y2": levelTree.edgeList[i][3],
0091              "edgeState": levelTree.edgeState[i]
0092         });
0093     }
0094 
0095     for(var i = 0 ; i < levelTree.edgeState.length ; i++) {
0096         if(levelTree.edgeState[i] === "married") {
0097             var xcor = (levelTree.edgeList[i][0]+levelTree.edgeList[i][2]-0.04)/2;
0098             var ycor =  levelTree.edgeList[i][3] - 0.02
0099             items.ringRepeator.model.append({
0100                 "ringx": xcor,
0101                 "ringy": ycor
0102             });
0103         }
0104     }
0105 
0106     items.questionTopic = levelTree.answer[0]
0107     items.questionMarkPosition.x = levelTree.captions[1][0]
0108     items.questionMarkPosition.y = levelTree.captions[1][1]
0109     items.meLabelPosition.x = levelTree.captions[0][0]
0110     items.meLabelPosition.y = levelTree.captions[0][1]
0111 }
0112 
0113 function shuffle() {
0114     for (var i = 0;i < numberOfLevel;i++) {
0115         shuffledLevelIndex[i] = i
0116     }
0117 
0118     Core.shuffle(shuffledLevelIndex);
0119 }
0120 
0121 function getCurrentLevelIndex() {
0122     if (!items) {
0123         return
0124     }
0125 
0126     return shuffledLevelIndex[items.currentLevel]
0127 }
0128 
0129 function nextLevel() {
0130     items.currentLevel = Core.getNextLevel(items.currentLevel, numberOfLevel);
0131     initLevel();
0132 }
0133 
0134 function previousLevel() {
0135     items.currentLevel = Core.getPreviousLevel(items.currentLevel, numberOfLevel);
0136     initLevel();
0137 }