File indexing completed on 2024-05-12 03:42:47

0001 /* GCompris - fractions_create.js
0002  *
0003  * Copyright (C) 2022 Johnny Jazeix <jazeix@gmail.com>
0004  *
0005  * SPDX-FileCopyrightText: Johnny Jazeix <jazeix@gmail.com>
0006  * SPDX-License-Identifier: GPL-3.0-or-later
0007  */
0008 .pragma library
0009 .import QtQuick 2.12 as Quick
0010 .import "qrc:/gcompris/src/core/core.js" as Core
0011 
0012 var numberOfLevel;
0013 var levels;
0014 var items;
0015 
0016 var previousQuestion = {"numerator": -1, "denominator": -1};
0017 
0018 function start(items_) {
0019     items = items_;
0020     levels = items.levels;
0021     numberOfLevel = levels.length;
0022     items.currentLevel = Core.getInitialLevel(numberOfLevel);
0023     initLevel();
0024 }
0025 
0026 function stop() {
0027 }
0028 
0029 function initLevel() {
0030     items.score.currentSubLevel = 0;
0031     items.errorRectangle.resetState();
0032 
0033     items.numberOfSubLevels = levels[items.currentLevel].length;
0034 
0035     Core.shuffle(levels[items.currentLevel]);
0036 
0037     initSubLevel();
0038 }
0039 
0040 function initSubLevel() {
0041     var currentSubLevel = levels[items.currentLevel][items.score.currentSubLevel];
0042     items.chartType = currentSubLevel.chartType;
0043 
0044     items.fixedNumerator = currentSubLevel.fixedNumerator ? currentSubLevel.fixedNumerator : false;
0045     items.fixedDenominator = currentSubLevel.fixedDenominator ? currentSubLevel.fixedDenominator : false;
0046 
0047     if(currentSubLevel.random) {
0048         var minDenominator = 2;
0049         var minNumerator = 1;
0050         var maxDenominator = 12;
0051         var randomDenominator;
0052         var randomNumerator;
0053         var maxFractions = currentSubLevel.maxFractions;
0054         // Make sure we don't have twice the same question in a row
0055         do {
0056             randomDenominator = Math.floor(Math.random() * (maxDenominator - minDenominator) + minDenominator);
0057             // We allow twice the denominator to have 2 pie, but no more to ensure it's still readable on small screens
0058             randomNumerator = Math.floor(Math.random() * (maxFractions * randomDenominator - minNumerator) + minNumerator);
0059         }
0060         while((previousQuestion.numerator == randomNumerator) && (previousQuestion.denominator == randomDenominator));
0061             
0062         items.denominatorValue = (items.mode === "findFraction" && !items.fixedDenominator) ? 0 : randomDenominator;
0063         items.denominatorToFind = randomDenominator;
0064         items.numeratorValue = (items.mode === "findFraction" && items.fixedNumerator) ? randomNumerator : 0;
0065         items.numeratorToFind = randomNumerator;
0066     }
0067     else {
0068         items.denominatorValue = (items.mode === "findFraction" && !items.fixedDenominator) ? 0 : currentSubLevel.denominator;
0069         items.denominatorToFind = currentSubLevel.denominator;
0070         items.numeratorValue = (items.mode === "findFraction" && items.fixedNumerator) ? currentSubLevel.numerator : 0;
0071         items.numeratorToFind = currentSubLevel.numerator;
0072     }
0073 
0074     previousQuestion.numerator = items.numeratorToFind;
0075     previousQuestion.denominator = items.denominatorToFind;
0076 
0077     if(items.mode === "findFraction") {
0078         items.instructionText = qsTr("Find the represented fraction.");
0079     }
0080     else {
0081         items.instructionText = currentSubLevel.instruction;
0082     }
0083 
0084     items.chartItem.initLevel();
0085     items.buttonsBlocked = false;
0086 }
0087 
0088 function nextLevel() {
0089     items.score.stopWinAnimation();
0090     items.currentLevel = Core.getNextLevel(items.currentLevel, numberOfLevel);
0091     initLevel();
0092 }
0093 
0094 function nextSubLevel() {
0095     if (items.score.currentSubLevel >= items.numberOfSubLevels) {
0096         items.bonus.good("star");
0097     }
0098     else {
0099         initSubLevel();
0100     }
0101 }
0102 
0103 
0104 function previousLevel() {
0105     items.score.stopWinAnimation();
0106     items.currentLevel = Core.getPreviousLevel(items.currentLevel, numberOfLevel);
0107     initLevel();
0108 }
0109 
0110 function goodAnswer() {
0111     items.buttonsBlocked = true;
0112     items.score.currentSubLevel++;
0113     items.score.playWinAnimation();
0114     items.audioEffects.play("qrc:/gcompris/src/core/resource/sounds/completetask.wav");
0115 }
0116 
0117 function badAnswer() {
0118     items.buttonsBlocked = true;
0119     items.errorRectangle.startAnimation();
0120     items.audioEffects.play("qrc:/gcompris/src/core/resource/sounds/crash.wav");
0121 }