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

0001 /* GCompris - Fish.qml
0002  *
0003  * SPDX-FileCopyrightText: 2014 Bruno Coudoin <bruno.coudoin@gcompris.net>
0004  *
0005  * Authors:
0006  *   Bruno Coudoin <bruno.coudoin@gcompris.net> (GTK+ version)
0007  *   Bruno Coudoin <bruno.coudoin@gcompris.net> (Qt Quick port)
0008  *   Timothée Giet <animtim@gmail.com> (animation refactoring)
0009  *
0010  *   SPDX-License-Identifier: GPL-3.0-or-later
0011  */
0012 import QtQuick 2.12
0013 import QtQuick.Particles 2.12
0014 import "clickgame.js" as Activity
0015 import "../../core"
0016 import GCompris 1.0
0017 
0018 AnimatedSprite {
0019     id: fish
0020     property Item activity
0021     property Item background
0022     property Item bar
0023     property int duration: 5000
0024     property int minY: Activity.items.score.y + Activity.items.score.height
0025     property int maxY: bar.y - fish.height
0026     property int minX: fish.width * -1.2
0027     property int maxX: background.width + fish.width * 0.2
0028     property real xSpeed: 10
0029     property real ySpeed: 1
0030     frameRate: 2
0031     interpolate: true
0032 
0033     signal animTrigger
0034 
0035     Component.onCompleted: {
0036         background.animTrigger.connect(animTrigger)
0037     }
0038 
0039     transform: Rotation {
0040         id: rotate; origin.x: width / 2; origin.y: 0; axis { x: 0; y: 1; z: 0 } angle: 0
0041     }
0042 
0043     onAnimTrigger: {
0044         if(x >= maxX) {
0045             rotate.angle = 180;
0046             fish.xSpeed *= -1;
0047             x = maxX
0048         } else if(x <= minX) {
0049             rotate.angle = 0;
0050             fish.xSpeed *= -1;
0051             x = minX
0052         }
0053         if(y >= maxY) {
0054             ySpeed *= -1;
0055             y = maxY;
0056         }else if(y <= minY) {
0057             ySpeed *= -1;
0058             y = minY;
0059         }
0060         if(Activity.items.currentLevel > 0) {
0061             fish.y += fish.ySpeed;
0062         }
0063         fish.x += fish.xSpeed
0064     }
0065 
0066     Behavior on opacity { PropertyAnimation { duration: 500 } }
0067 
0068     MouseArea {
0069         anchors.fill: parent
0070         onClicked: {
0071             background.animTrigger.disconnect(animTrigger)
0072             parent.opacity = 0
0073             enabled = false
0074             activity.audioEffects.play("qrc:/gcompris/src/activities/clickgame/resource/drip.wav")
0075             Activity.fishKilled()
0076             particles.burst(40);
0077         }
0078     }
0079 
0080     Loader {
0081         id: bubbleEffect
0082         anchors.fill: parent
0083         active: ApplicationInfo.hasShader
0084         sourceComponent: ParticleSystem {
0085             anchors.fill: parent
0086             Emitter {
0087                 x: parent.x + parent.width * 0.8
0088                 y: parent.y + parent.height / 2
0089                 width: 1
0090                 height: 1
0091                 emitRate: 0.5
0092                 lifeSpan: 1000
0093                 lifeSpanVariation: 2500
0094                 acceleration: PointDirection {
0095                     x: -10
0096                     xVariation: 10
0097                     y: -20
0098                     yVariation: 10
0099                 }
0100                 velocity: PointDirection {
0101                     x: -20
0102                     xVariation: 10
0103                     y: -20
0104                     yVariation: 10
0105                 }
0106                 size: 16
0107                 sizeVariation: 8
0108             }
0109 
0110             ImageParticle {
0111                 source: "qrc:/gcompris/src/activities/clickgame/resource/bubble.svg"
0112             }
0113         }
0114     }
0115 
0116     ParticleSystemStarLoader {
0117         id: particles
0118         clip: false
0119     }
0120 }