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 }