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

0001 /* GCompris - erase.js
0002  *
0003  * SPDX-FileCopyrightText: 2014 Bruno Coudoin
0004  *
0005  * Authors:
0006  *   Bruno Coudoin <bruno.coudoin@gcompris.net> (GTK+ version)
0007  *   Bruno Coudoin <bruno.coudoin@gcompris.net> (Qt Quick port)
0008  *
0009  *   SPDX-License-Identifier: GPL-3.0-or-later
0010  */
0011 
0012 .pragma library
0013 .import QtQuick 2.12 as Quick
0014 .import GCompris 1.0 as GCompris //for ApplicationInfo
0015 .import "qrc:/gcompris/src/core/core.js" as Core
0016 
0017 var url = "qrc:/gcompris/src/activities/erase/resource/"
0018 
0019 //array of array, each with filename, horizontalAlignment and verticalAlignment
0020 var backgroundImages = [
0021     ["alpaca.webp", "left", "top"],
0022     ["bee.webp", "left", "center"],
0023     ["butterfly.webp", "left", "center"],
0024     ["calf.webp", "center", "center"],
0025     ["camels.webp", "right", "center"],
0026     ["caterpillar.webp", "center", "center"],
0027     ["chamaeleon.webp", "left", "center"],
0028     ["cheetah.webp", "right", "top"],
0029     ["crab.webp", "center", "center"],
0030     ["dolphin.webp", "center", "top"],
0031     ["flying_fox.webp", "center", "bottom"],
0032     ["gibbon.webp", "center", "center"],
0033     ["giraffe.webp", "right", "center"],
0034     ["goat.webp", "right", "top"],
0035     ["gorilla.webp", "center", "center"],
0036     ["gosling.webp", "center", "top"],
0037     ["heron.webp", "center", "center"],
0038     ["horse.webp", "center", "top"],
0039     ["kingfisher.webp", "center", "top"],
0040     ["kitten.webp", "center", "center"],
0041     ["long_nosed_monkey.webp", "center", "top"],
0042     ["macaque.webp", "center", "center"],
0043     ["meerkats.webp", "center", "top"],
0044     ["northern_harrier.webp", "center", "center"],
0045     ["nubian_ibex.webp", "center", "top"],
0046     ["penguin.webp", "center", "top"],
0047     ["pika.webp", "center", "top"],
0048     ["red_panda.webp", "center", "center"],
0049     ["rhinoceros.webp", "center", "center"],
0050     ["spoonbills.webp", "left", "top"],
0051     ["squirrel.webp", "center", "top"],
0052     ["swans.webp", "right", "top"],
0053     ["toucan.webp", "left", "top"]
0054 ]
0055 
0056 var blockImages = [
0057     url + "transparent_square.svg",
0058     url + "transparent_square_yellow.svg",
0059     url + "transparent_square_green.svg"
0060 ]
0061 
0062 var currentImage
0063 var main
0064 var items
0065 var type
0066 
0067 // The counter of created blocks object
0068 var createdBlocks
0069 var killedBlocks
0070 
0071 var numberOfLevel = 6
0072 var imgIndex
0073 
0074 function start(main_, items_, type_) {
0075     main = main_
0076     items = items_
0077     type = type_
0078     items.currentLevel = Core.getInitialLevel(numberOfLevel)
0079     items_.currentSubLevel = 0
0080     currentImage = 0
0081     imgIndex = 0
0082     initLevel()
0083 }
0084 
0085 function stop() {
0086 }
0087 
0088 function initLevel() {
0089     items.blocks.clear()
0090     imgIndex++
0091     currentImage++
0092     if(currentImage >= backgroundImages.length) {
0093         currentImage = 0
0094     }
0095     items.background.source = url + backgroundImages[currentImage][0]
0096     items.background.alignBackground()
0097     createdBlocks = 0
0098     killedBlocks = 0
0099     var nbx = Math.min((items.currentLevel % 2 * 3) + 5, main.width / (10 * GCompris.ApplicationInfo.ratio));
0100     var nby = Math.min((items.currentLevel % 2 * 3) + 5, main.height / (10 * GCompris.ApplicationInfo.ratio));
0101     var data
0102 
0103         for(var x = 0;  x < nbx; ++x) {
0104             for(var y = 0;  y < nby; ++y) {
0105                 data = {
0106                     'nx': nbx, 'ny': nby, 'a': x, 'b': y,
0107                     'op': 1.0, 'MAIN': main, 'BAR': items.bar,
0108                     'img': blockImages[imgIndex % blockImages.length]
0109                 }
0110                 items.blocks.append(data)
0111                 createdBlocks++
0112             }
0113         }
0114 }
0115 
0116 function nextLevel() {
0117     items.score.stopWinAnimation();
0118     items.currentLevel = Core.getNextLevel(items.currentLevel, numberOfLevel);
0119     items.currentSubLevel = 0;
0120     initLevel();
0121 }
0122 
0123 function nextSubLevel() {
0124     if( items.currentSubLevel >= items.nbSubLevel) {
0125         items.bonus.good("flower")
0126         return;
0127     }
0128     initLevel();
0129 }
0130 
0131 function previousLevel() {
0132     items.score.stopWinAnimation();
0133     items.currentLevel = Core.getPreviousLevel(items.currentLevel, numberOfLevel);
0134     items.currentSubLevel = 0;
0135     initLevel();
0136 }
0137 
0138 function blockKilled() {
0139     if(++killedBlocks === createdBlocks) {
0140         items.currentSubLevel += 1
0141         items.audioEffects.play("qrc:/gcompris/src/core/resource/sounds/completetask.wav")
0142         items.score.playWinAnimation()
0143         if(items.mode === 2) {
0144             items.okButton.levelFinished = true
0145         }
0146     }
0147 }
0148 
0149 function getFirstImage() {
0150     backgroundImages = Core.shuffle(backgroundImages)
0151     return backgroundImages[0][0]
0152 }