Warning, /education/gcompris/src/activities/ballcatch/Ball.qml is written in an unsupported language. File is not indexed.
0001 /* gcompris - Ball.qml
0002
0003 SPDX-FileCopyrightText: 2014 Johnny Jazeix <jazeix@gmail.com>
0004
0005 Bruno Coudoin: initial Gtk+ version
0006
0007 SPDX-License-Identifier: GPL-3.0-or-later
0008 */
0009 import QtQuick 2.12
0010 import "ballcatch.js" as Activity
0011 import GCompris 1.0
0012
0013 Image {
0014 id: ball
0015
0016 property bool isVertical: background.width <= background.height // To check if in Vertical mode
0017
0018 source: "qrc:/gcompris/src/activities/ballcatch/resource/ball.svg"
0019 sourceSize.height: background.isVertical ? 175 * Application.ratio : 200 * ApplicationInfo.ratio
0020 z: 3
0021
0022 readonly property real initScale: 1.0
0023
0024 // If won, ball goes on tux, if lose, depends on the side clicked first
0025 property int finishX
0026
0027 readonly property int finishY: tux.y + tux.height / 4
0028 readonly property real finishScale: initScale / 2
0029 property int radius: initScale
0030 property bool levelChange: false //needed in case of changing level while animation is running
0031
0032 function stop() {
0033 levelChange = true;
0034 animation.stop();
0035 }
0036
0037 ParallelAnimation {
0038 id: animation
0039 running: false
0040
0041 NumberAnimation { target: ball; property: "x";
0042 to: finishX; duration: 1000
0043 easing.type: Easing.InOutQuad }
0044 NumberAnimation { target: ball; property: "y";
0045 to: finishY; duration: 1000
0046 easing.type: Easing.InOutQuad }
0047 NumberAnimation { target: ball; property: "scale";
0048 to: finishScale; duration: 1000
0049 easing.type: Easing.InOutQuad }
0050 NumberAnimation { target: ball; property: "rotation";
0051 to: 360; duration: 1000
0052 easing.type: Easing.InOutQuad }
0053 onStarted: {
0054 items.background.playSound("brick");
0055 }
0056
0057 onStopped: {
0058 // We are done with the ballon move
0059 if(levelChange) {
0060 return
0061 } else if(Activity.gameWon) {
0062 // This is a win
0063 items.background.playSound("completetask");
0064 bonus.good("tux");
0065 } else {
0066 // This is a lose
0067 bonus.bad("tux");
0068 }
0069 }
0070 }
0071
0072 function startAnimation() {
0073 if(Activity.gameWon) {
0074 finishX = x;
0075 }
0076 else if(Activity.items.leftPressed) {
0077 finishX = tux.x + tux.width * 2;
0078 }
0079 else {
0080 finishX = tux.x - tux.width * 2;
0081 }
0082 /* Only start the timer if the game is at init state.
0083 In init state, radius is initScale */
0084 if(ball.radius == ball.initScale)
0085 animation.start();
0086 }
0087
0088 function reinitBall() {
0089 x = background.width / 2 - width / 2;
0090 y = leftHand.y - height / 3;
0091 ball.scale = initScale;
0092 ball.rotation = 0;
0093 levelChange = false;
0094 }
0095 }