Warning, /education/gcompris/src/activities/planegame/Planegame.qml is written in an unsupported language. File is not indexed.

0001 /* gcompris - Planegame.qml
0002 
0003  SPDX-FileCopyrightText: 2014 Johnny Jazeix <jazeix@gmail.com>
0004 
0005  2003, 2014: Bruno Coudoin: initial version
0006  2014: Johnny Jazeix: Qt port
0007 
0008  SPDX-License-Identifier: GPL-3.0-or-later
0009 */
0010 
0011 import QtQuick 2.12
0012 import GCompris 1.0
0013 
0014 import "../../core"
0015 import "planegame.js" as Activity
0016 
0017 ActivityBase {
0018     id: activity
0019     focus: true
0020 
0021     onStart: { focus = true; }
0022     onStop: { }
0023 
0024     Keys.onPressed: Activity.processPressedKey(event)
0025     Keys.onReleased: Activity.processReleasedKey(event)
0026 
0027     property var dataset
0028     property var tutorialInstructions: ""
0029     property bool showTutorial: false
0030 
0031     property int oldWidth: width
0032     onWidthChanged: {
0033         // Reposition helico and clouds, same for height
0034         Activity.repositionObjectsOnWidthChanged(width / oldWidth)
0035         oldWidth = width
0036     }
0037 
0038     property int oldHeight: height
0039     onHeightChanged: {
0040         // Reposition helico and clouds, same for height
0041         Activity.repositionObjectsOnHeightChanged(height / oldHeight)
0042         oldHeight = height
0043     }
0044 
0045     pageComponent: Image {
0046         id: background
0047         anchors.fill: parent
0048         signal start
0049         signal stop
0050         signal voiceDone
0051         source: Activity.url + "../algorithm/resource/desert_scene.svg"
0052         sourceSize.width: width
0053         sourceSize.height: height
0054         fillMode: Image.PreserveAspectCrop
0055 
0056         Component.onCompleted: {
0057                 activity.start.connect(start)
0058                 activity.stop.connect(stop)
0059         }
0060 
0061         // Needed to get keyboard focus on Tutorial
0062         Keys.forwardTo: tutorialSection
0063 
0064         QtObject {
0065             id: items
0066             property Item activityPage: activity
0067             property alias background: background
0068             property alias bar: bar
0069             property int currentLevel: activity.currentLevel
0070             property alias bonus: bonus
0071             property alias score: score
0072             property alias plane: plane
0073             property alias fileChecker: fileChecker
0074             property GCAudio audioVoices: activity.audioVoices
0075             property GCSfx audioEffects: activity.audioEffects
0076             property alias movePlaneTimer: movePlaneTimer
0077             property alias cloudCreation: cloudCreation
0078             property bool showTutorial: activity.showTutorial
0079             property bool goToNextLevel: false
0080        }
0081 
0082        onVoiceDone: {
0083            if(items.goToNextLevel) {
0084                items.goToNextLevel = false;
0085                items.bonus.good("flower");
0086            }
0087         }
0088 
0089         onStart: {
0090             activity.audioVoices.done.connect(voiceDone)
0091             Activity.start(items, dataset)
0092         }
0093         onStop: { Activity.stop() }
0094 
0095         File {
0096             id: fileChecker
0097         }
0098 
0099         // Tutorial section starts
0100         Image {
0101             id: tutorialImage
0102             source: "../digital_electricity/resource/texture01.webp"
0103             anchors.fill: parent
0104             fillMode: Image.Tile
0105             z: 1
0106             visible: showTutorial
0107             Tutorial {
0108                 id: tutorialSection
0109                 tutorialDetails: tutorialInstructions
0110                 useImage: false
0111                 onSkipPressed: {
0112                     showTutorial = false
0113                     Activity.initLevel()
0114                 }
0115             }
0116         }
0117         // Tutorial section ends
0118 
0119         MultiPointTouchArea {
0120             anchors.fill: parent
0121             touchPoints: [ TouchPoint { id: point1 } ]
0122 
0123             onReleased: {
0124                 plane.x = point1.x - plane.width / 2
0125                 plane.y = point1.y - plane.height / 2
0126             }
0127         }
0128 
0129         DialogHelp {
0130             id: dialogHelp
0131             onClose: home()
0132         }
0133 
0134         Bar {
0135             id: bar
0136             level: items.currentLevel + 1
0137             content: BarEnumContent { value: items.showTutorial ? (help | home) : (help | home | level) }
0138             onHelpClicked: displayDialog(dialogHelp)
0139             onPreviousLevelClicked: Activity.previousLevel()
0140             onNextLevelClicked: Activity.nextLevel()
0141             onHomeClicked: home()
0142         }
0143 
0144         Bonus {
0145             id: bonus
0146             Component.onCompleted: win.connect(Activity.nextLevel)
0147         }
0148 
0149         Score {
0150             id: score
0151             visible: !showTutorial
0152             fontSize: background.width >= background.height ? internalTextComponent.largeSize : internalTextComponent.mediumSize
0153             height: internalTextComponent.height + 10
0154             anchors.bottom: bar.top
0155             anchors.margins: 10
0156         }
0157 
0158         property int movePlaneTimerCounter: 0
0159         Timer {
0160             id: movePlaneTimer
0161             running: false
0162             repeat: true
0163             onTriggered: {
0164                 plane.state = "play"
0165                 interval = 50
0166                 if(movePlaneTimerCounter++ % 3 == 0) {
0167                     /* Do not call this too often or plane commands are too hard */
0168                     Activity.handleCollisionsWithCloud();
0169                 }
0170                 Activity.computeVelocity();
0171                 Activity.planeMove();
0172             }
0173         }
0174 
0175         Timer {
0176             id: cloudCreation
0177             running: false
0178             repeat: true
0179             interval: 10200 - (bar.level * 200)
0180             onTriggered: Activity.createCloud()
0181         }
0182 
0183         Plane {
0184             id: plane
0185             visible: !showTutorial
0186             background: background
0187         }
0188 
0189     }
0190 }