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

0001 /* GCompris - CandyWidget.qml
0002  *
0003  * SPDX-FileCopyrightText: 2016 Stefan Toncu <stefan.toncu29@gmail.com>
0004  *
0005  *   SPDX-License-Identifier: GPL-3.0-or-later
0006  */
0007 
0008 import QtQuick 2.12
0009 import GCompris 1.0
0010 
0011 WidgetOption {
0012     id: widget
0013 
0014     src: "resource/images/candy.svg"
0015     name: "candy"
0016     availableItems: (background.easyMode) ? widget.total - widget.current : ""
0017 
0018     property int placedInChild
0019 
0020     releaseElement: function() {
0021         var newCoordinate = widget.mapToItem(background, element.x, element.y)
0022         // Easy mode
0023         if (background.easyMode) {
0024             if (background.currentCandies < items.totalCandies) {
0025                 items.acceptCandy = true
0026 
0027                 for (var i = 0; i < listModel.count; i++) {
0028                     var currentChild = repeaterDropAreas.itemAt(i)
0029                     var childCoordinate = dropAreas.mapToItem(background, currentChild.x, currentChild.y)
0030                     //coordinates of "boy/girl rectangle" in background coordinates
0031 
0032                     var currentElement = element.parent.mapToItem(background, element.x, element.y)
0033 
0034                     if (currentElement.x > childCoordinate.x && currentElement.x < childCoordinate.x + currentChild.area.width &&
0035                     currentElement.y > childCoordinate.y + currentChild.childImage.height &&
0036                     currentElement.y < childCoordinate.y + currentChild.childImage.height + currentChild.area.height) {
0037                         if ((listModel.get(i).countS + 1) > items.maxNumberOfCandiesPerWidget) {
0038                             background.wrongMove.visible = true
0039                             continue
0040                         }
0041                         repeaterDropAreas.itemAt(i).candyCount.text = listModel.get(i).countS + 1
0042                         listModel.setProperty(i, "countS", listModel.get(i).countS + 1)
0043                         background.currentCandies ++
0044                     }
0045 
0046                     if (background.currentCandies == items.totalCandies) {
0047                         widget.canDrag = false
0048                         background.resetCandy()
0049                         candyWidget.element.opacity = 0.6
0050                     }
0051                 }
0052             }
0053             else {
0054                 widget.canDrag = false
0055                 background.resetCandy()
0056                 element.opacity = 0.6
0057             }
0058         }
0059         else {
0060             // Hard mode
0061             if (background.currentCandies < widget.total) {
0062                 items.acceptCandy = true
0063 
0064                 for (i = 0; i < listModel.count; i++) {
0065                     currentChild = repeaterDropAreas.itemAt(i)
0066                     childCoordinate = dropAreas.mapToItem(background, currentChild.x, currentChild.y)
0067                     //coordinates of "boy/girl rectangle" in background coordinates
0068                     currentElement = element.parent.mapToItem(background, element.x, element.y)
0069 
0070                     if (currentElement.x > childCoordinate.x && currentElement.x < childCoordinate.x + currentChild.area.width &&
0071                     currentElement.y > childCoordinate.y + currentChild.childImage.height &&
0072                     currentElement.y < childCoordinate.y + currentChild.childImage.height + currentChild.area.height) {
0073 
0074                         if ((listModel.get(i).countS + 1) > items.maxNumberOfCandiesPerWidget) {
0075                             background.wrongMove.visible = true
0076                             continue
0077                         }
0078 
0079                         repeaterDropAreas.itemAt(i).candyCount.text = listModel.get(i).countS + 1
0080                         listModel.setProperty(i, "countS", listModel.get(i).countS + 1)
0081                         background.currentCandies ++
0082                     }
0083 
0084                     if (background.currentCandies === items.totalCandies) {
0085                         widget.canDrag = false
0086                         background.resetCandy()
0087                         candyWidget.element.opacity = 0.6
0088                     }
0089                 }
0090             }
0091             else {
0092                 widget.canDrag = false
0093                 background.resetCandy()
0094                 candyWidget.element.opacity = 0.6
0095             }
0096         }
0097     }
0098 
0099     //swing animation for candies
0100     SequentialAnimation {
0101         id: anim
0102         running: items.acceptCandy ? true : false
0103         loops: Animation.Infinite
0104         NumberAnimation {
0105             target: candyWidget.element
0106             property: "rotation"
0107             from: -10; to: 10
0108             duration: 700
0109             easing.type: Easing.InOutQuad
0110         }
0111         NumberAnimation {
0112             target: candyWidget.element
0113             property: "rotation"
0114             from: 10; to: -10
0115             duration: 700
0116             easing.type: Easing.InOutQuad
0117         }
0118     }
0119 
0120 }