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

0001 /* GCompris - Hexagon.qml
0002  *
0003  * SPDX-FileCopyrightText: 2014 Bruno Coudoin
0004  *
0005  * Authors:
0006  *   Christof Petig and Ingo Konrad (GTK+ version)
0007  *   Bruno Coudoin <bruno.coudoin@gcompris.net> (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 "qrc:/gcompris/src/core/core.js" as Core
0014 
0015 var url = "qrc:/gcompris/src/activities/hexagon/resource/"
0016 var numberOfLevel = 12;
0017 var main
0018 var items
0019 
0020 // The size of the array
0021 var nbx
0022 var nby
0023 // The strawberry position
0024 var strawBerryX
0025 var strawBerryY
0026 
0027 function start(main_, items_) {
0028     main = main_
0029     items = items_
0030     items.currentLevel = Core.getInitialLevel(numberOfLevel)
0031     initLevel()
0032 }
0033 
0034 function stop() {
0035 }
0036 
0037 function initLevel() {
0038     items.hexagonModel.clear()
0039     nbx = 10 + items.currentLevel
0040     nby = Math.floor(nbx * (main.height / main.width))
0041 
0042     // Select a random place for the strawberry
0043     strawBerryX = Math.floor(Math.random() * (nbx -1))
0044     strawBerryY = Math.floor(Math.random() * nby)
0045 
0046     var model = []
0047     for(var ix = 0;  ix < nbx; ++ix) {
0048         for(var iy = 0;  iy < nby; ++iy) {
0049             if( (iy % 2 && ix < nbx - 1) || iy % 2 == 0)
0050                 items.hexagonModel.append( {
0051                    "m_ix": ix, "m_iy": iy, "m_nbx": nbx, "m_nby": nby,
0052                    "m_hasStrawberry":  (strawBerryX === ix && strawBerryY === iy) ? true : false
0053                 } )
0054         }
0055     }
0056 }
0057 
0058 function nextLevel() {
0059     items.currentLevel = Core.getNextLevel(items.currentLevel, numberOfLevel);
0060     initLevel();
0061 }
0062 
0063 function previousLevel() {
0064     items.currentLevel = Core.getPreviousLevel(items.currentLevel, numberOfLevel);
0065     initLevel();
0066 }
0067 
0068 function strawberryFound() {
0069     items.bonus.good("flower")
0070 }
0071 
0072 function getDistance(ix, iy) {
0073     return Math.sqrt(Math.pow((ix - strawBerryX), 2) + Math.pow((iy - strawBerryY), 2))
0074 }
0075 
0076 function getColor(dist) {
0077     var r = 0
0078     var b = 0
0079     var g = 0
0080     if (dist < 5) {
0081         r = 0xFF
0082         g = 0xFF * (dist / 5)
0083     } else if(dist < 10) {
0084         g = 0xFF
0085         r = 0xFF - 0xFF  * ((dist - 5) / 5)
0086     } else if (dist < 15) {
0087         g = 0xFF - 0xFF * ((dist - 10) / 5)
0088         b = 0xFF * ((dist - 10) / 5)
0089     } else {
0090         // Calc the max size
0091         var maxSize = Math.sqrt(Math.pow(nbx, 2) + Math.pow(nby, 2))
0092         b = 0xFF
0093         r = 0xFF * ((dist - 15) / maxSize)
0094     }
0095     return Qt.rgba(r/255, g/255, b/255, 1)
0096 }