Warning, /education/gcompris/src/activities/gnumch-equality/Creature.qml is written in an unsupported language. File is not indexed.
0001 /* GCompris - Creature.qml 0002 * 0003 * SPDX-FileCopyrightText: 2014 Manuel Tondeur <manueltondeur@gmail.com> 0004 * 0005 * Authors: 0006 * Joe Neeman (spuzzzzzzz@gmail.com) (GTK+ version) 0007 * Manuel Tondeur <manueltondeur@gmail.com> (Qt Quick port) 0008 * 0009 * SPDX-License-Identifier: GPL-3.0-or-later 0010 */ 0011 import QtQuick 2.12 0012 import GCompris 1.0 0013 import "../../core" 0014 0015 Item { 0016 id: creature 0017 0018 property int index 0019 property string monsterType 0020 property bool movable 0021 property bool movingOn: false 0022 property bool eating: false 0023 property int frames 0024 property int frameSize: 320 0025 property int animCount: 0 0026 property GCSfx audioEffects 0027 readonly property int moveRight: 0 0028 readonly property int moveLeft: 1 0029 readonly property int moveDown: 2 0030 readonly property int moveUp: 3 0031 0032 function moveTo(direction) { 0033 if (!movable) 0034 return true 0035 0036 if (!hasReachLimit(direction)) { 0037 movementOn(direction) 0038 return true 0039 } else { 0040 0041 return false 0042 } 0043 } 0044 0045 function init() { 0046 index = 0 0047 x = 0 0048 y = 0 0049 } 0050 0051 function hasReachLimit(direction) { 0052 switch (direction) { 0053 case 0: 0054 if ((index + 1) % 6 > 0) 0055 return false 0056 break 0057 case 1: 0058 if ((index % 6) > 0) 0059 return false 0060 break 0061 case 2: 0062 if (index < 30) 0063 return false 0064 break 0065 case 3: 0066 if (index > 5) 0067 return false 0068 break 0069 } 0070 return true 0071 } 0072 0073 function movementOn(direction) { 0074 // Compute if the direction is vertical (1) or not (0) 0075 var vertical = Math.floor(direction / 2) 0076 var sign = Math.pow(-1, (direction)) 0077 index += sign * (1 + 5 * vertical) 0078 var restIndex = index % 6 0079 y = Math.floor(((index - restIndex) / 6) * grid.cellHeight) 0080 x = Math.floor(restIndex * grid.cellWidth) 0081 } 0082 0083 function updatePosition() { 0084 var restIndex = index % 6 0085 y = Math.floor(((index - restIndex) / 6) * grid.cellHeight) 0086 x = Math.floor(restIndex * grid.cellWidth) 0087 } 0088 0089 index: 0 0090 z: 0 0091 movable: true 0092 width: grid.cellWidth 0093 height: grid.cellHeight 0094 0095 onEatingChanged: { 0096 if (eating == true) { 0097 creatureImage.restart() 0098 creatureImage.resume() 0099 creature.audioEffects.play("qrc:/gcompris/src/activities/gnumch-equality/resource/eat.wav") 0100 } 0101 } 0102 0103 AnimatedSprite { 0104 id: creatureImage 0105 0106 property int turn: 0 0107 0108 anchors.horizontalCenter: parent.horizontalCenter 0109 anchors.verticalCenter: parent.verticalCenter 0110 width: Math.min(parent.width, parent.height) 0111 height: width 0112 source: "qrc:/gcompris/src/activities/gnumch-equality/resource/" 0113 + monsterType + ".svg" 0114 0115 frameCount: creature.frames 0116 frameWidth: creature.frameSize 0117 frameHeight: creature.frameSize 0118 frameDuration: 50 0119 currentFrame: 0 0120 running: false 0121 interpolate: false 0122 0123 onCurrentFrameChanged: { 0124 creature.animCount++ 0125 if (creature.animCount == creature.frames) { 0126 creature.animCount = 0 0127 turn++ 0128 } 0129 } 0130 0131 onTurnChanged: { 0132 if (turn == 2) { 0133 creature.eating = false 0134 turn = 0 0135 currentFrame = 0 0136 creature.animCount = 0 0137 pause() 0138 } 0139 } 0140 } 0141 0142 Behavior on x { 0143 NumberAnimation { 0144 id: xAnim 0145 duration: 300 0146 onRunningChanged: { 0147 movingOn = !movingOn 0148 } 0149 } 0150 } 0151 0152 Behavior on y { 0153 NumberAnimation { 0154 id: yAnim 0155 duration: 300 0156 onRunningChanged: { 0157 movingOn = !movingOn 0158 } 0159 } 0160 } 0161 0162 Behavior on opacity { 0163 NumberAnimation { 0164 duration: 500 0165 } 0166 } 0167 }