File indexing completed on 2024-05-05 15:53:15
0001 /* GCompris - number_sequence.js 0002 * 0003 * SPDX-FileCopyrightText: 2014 Emmanuel Charruau 0004 * 0005 * Authors: 0006 * Olivier Ponchaut <opvg@mailoo.org> (GTK+ version) 0007 * Emmanuel Charruau <echarruau@gmail.com> (Qt Quick port) 0008 * 0009 * SPDX-License-Identifier: GPL-3.0-or-later 0010 */ 0011 .pragma library 0012 .import QtQuick 2.12 as Quick 0013 .import GCompris 1.0 as GCompris //for ApplicationInfo 0014 .import "qrc:/gcompris/src/core/core.js" as Core 0015 0016 var items 0017 var mode 0018 var dataset 0019 var numberOfLevel 0020 var pointPositions = [] 0021 var pointPositions2 = [] 0022 var linePropertiesArray = [] 0023 var url 0024 0025 function start(_items, _mode,_dataset,_url) { 0026 items = _items 0027 mode = _mode 0028 dataset = _dataset.get() 0029 url = _url 0030 numberOfLevel = dataset.length 0031 items.currentLevel = Core.getInitialLevel(numberOfLevel) 0032 initLevel() 0033 } 0034 0035 function stop() { 0036 } 0037 0038 function initLevel() { 0039 items.pointIndexToClick = 0 0040 reset() 0041 loadCoordinates() 0042 loadBackgroundImage() 0043 if(mode == "drawletters" || mode == "drawnumbers") { 0044 //function to play letter sound at start 0045 playLetterSound(dataset[items.currentLevel].sound) 0046 } 0047 } 0048 0049 function nextLevel() { 0050 items.currentLevel = Core.getNextLevel(items.currentLevel, numberOfLevel); 0051 initLevel(); 0052 } 0053 0054 function previousLevel() { 0055 items.currentLevel = Core.getPreviousLevel(items.currentLevel, numberOfLevel); 0056 initLevel(); 0057 } 0058 0059 //function to play the sound of character at start & end 0060 function playLetterSound(sound) { 0061 // first we clear the queue in case other voices are there, then we append the new number 0062 // if we play directly, we don't have the bonus sound (or it is truncated) 0063 items.audioVoices.clearQueue() 0064 items.audioVoices.append(sound) 0065 } 0066 0067 function reset() { 0068 for(var i = 0; i < items.pointImageRepeater.count; i++) 0069 items.pointImageRepeater.itemAt(i).highlight = false; 0070 0071 for(var i = 0; i < items.segmentsRepeater.count; i++) 0072 items.segmentsRepeater.itemAt(i).opacity = 0 0073 } 0074 0075 function drawSegment(pointIndex) { 0076 if (pointIndex == items.pointIndexToClick) { 0077 var currentPoint = items.pointImageRepeater.itemAt(pointIndex) 0078 // if we need to draw only a point instead of a line 0079 if(mode == "drawletters" || mode == "drawnumbers") { 0080 currentPoint.highlight = false 0081 if(pointIndex == 0 || (pointPositions2 && pointPositions2[pointIndex] != pointPositions2[pointIndex-1])) { 0082 currentPoint.markedAsPoint = true 0083 } 0084 } 0085 0086 if (mode == "clickanddraw" || mode == "drawletters" || mode == "drawnumbers") { 0087 if (pointIndex < items.pointImageRepeater.count-1) { 0088 items.pointImageRepeater.itemAt(pointIndex+1).highlight = true 0089 items.audioEffects.play('qrc:/gcompris/src/core/resource/sounds/audioclick.wav') 0090 } 0091 } 0092 0093 // Draw the line from pointIndex - 1 to pointIndex 0094 if(pointIndex == 0 || (pointPositions2 && pointPositions2[pointIndex] != pointPositions2[pointIndex-1])) { 0095 //do nothing 0096 } 0097 else { 0098 items.segmentsRepeater.itemAt(pointIndex-1).opacity = 1 0099 } 0100 0101 if (pointIndex == items.pointImageRepeater.count-1) { 0102 for (var i = 1; i < dataset[items.currentLevel].coordinates.length; i++) { 0103 items.segmentsRepeater.itemAt(i-1).opacity = 0 0104 } 0105 items.imageBack2.source = url + dataset[items.currentLevel].imageName2 0106 won() 0107 } 0108 items.pointIndexToClick++ 0109 } 0110 } 0111 0112 function loadCoordinates() { 0113 // prepare points data 0114 pointPositions = dataset[items.currentLevel].coordinates 0115 pointPositions2 = dataset[items.currentLevel].coordinates2 0116 items.pointImageRepeater.model = pointPositions 0117 if (mode == "clickanddraw" || mode == "drawletters" || mode == "drawnumbers") 0118 items.pointImageRepeater.itemAt(0).highlight = true 0119 // prepare segments data 0120 linePropertiesArray = [] 0121 for (var i = 0; i < (pointPositions.length)-1; i++) { 0122 var lineProperties = [] // properties are x1,y1,x2,y,angle rotation 0123 lineProperties[0] = pointPositions[i][0] // x 0124 lineProperties[1] = pointPositions[i][1] // y 0125 lineProperties[2] = pointPositions[i+1][0] // x2 0126 lineProperties[3] = pointPositions[i+1][1] // y2 0127 linePropertiesArray[i] = lineProperties 0128 } 0129 items.segmentsRepeater.model = linePropertiesArray 0130 } 0131 0132 function loadBackgroundImage() { 0133 items.imageBack.source = url + dataset[items.currentLevel].imageName1 0134 items.imageBack2.source = url + dataset[items.currentLevel].imageName1 0135 } 0136 0137 function won() { 0138 items.bonus.good("flower") 0139 }