From c81d942ab0297cf894f2dd20700b4188afa07c25 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 6 Jul 2012 16:23:30 +1000 Subject: [PATCH] Add maroon demo Change-Id: I880edf78e210d243ef87511e88ea592f6e252da6 Reviewed-by: Michael Brasser --- doc/src/images/qml-maroon-demo-icon.png | Bin 0 -> 10476 bytes examples/demos/demos.pro | 3 +- examples/demos/maroon/content/BuildButton.qml | 90 +++++++ examples/demos/maroon/content/GameCanvas.qml | 240 ++++++++++++++++++ examples/demos/maroon/content/GameOverScreen.qml | 122 +++++++++ examples/demos/maroon/content/InfoBar.qml | 84 ++++++ examples/demos/maroon/content/NewGameScreen.qml | 111 ++++++++ examples/demos/maroon/content/SoundEffect.qml | 53 ++++ .../demos/maroon/content/audio/bomb-action.wav | Bin 0 -> 20972 bytes .../demos/maroon/content/audio/catch-action.wav | Bin 0 -> 13274 bytes examples/demos/maroon/content/audio/catch.wav | Bin 0 -> 8638 bytes examples/demos/maroon/content/audio/currency.wav | Bin 0 -> 15790 bytes .../demos/maroon/content/audio/factory-action.wav | Bin 0 -> 4936 bytes .../demos/maroon/content/audio/melee-action.wav | Bin 0 -> 17798 bytes .../maroon/content/audio/projectile-action.wav | Bin 0 -> 2562 bytes .../demos/maroon/content/audio/shooter-action.wav | Bin 0 -> 27554 bytes examples/demos/maroon/content/gfx/background.png | Bin 0 -> 5802 bytes examples/demos/maroon/content/gfx/bomb-action.png | Bin 0 -> 23974 bytes examples/demos/maroon/content/gfx/bomb-idle.png | Bin 0 -> 12238 bytes examples/demos/maroon/content/gfx/bomb.png | Bin 0 -> 4067 bytes examples/demos/maroon/content/gfx/button-help.png | Bin 0 -> 8916 bytes examples/demos/maroon/content/gfx/button-play.png | Bin 0 -> 13945 bytes examples/demos/maroon/content/gfx/catch-action.png | Bin 0 -> 6760 bytes examples/demos/maroon/content/gfx/catch.png | Bin 0 -> 4771 bytes examples/demos/maroon/content/gfx/cloud.png | Bin 0 -> 3398 bytes examples/demos/maroon/content/gfx/currency.png | Bin 0 -> 1889 bytes examples/demos/maroon/content/gfx/dialog-bomb.png | Bin 0 -> 3751 bytes .../demos/maroon/content/gfx/dialog-factory.png | Bin 0 -> 3946 bytes examples/demos/maroon/content/gfx/dialog-melee.png | Bin 0 -> 4392 bytes .../demos/maroon/content/gfx/dialog-pointer.png | Bin 0 -> 911 bytes .../demos/maroon/content/gfx/dialog-shooter.png | Bin 0 -> 3737 bytes examples/demos/maroon/content/gfx/dialog.png | Bin 0 -> 3362 bytes .../demos/maroon/content/gfx/factory-action.png | Bin 0 -> 22440 bytes examples/demos/maroon/content/gfx/factory-idle.png | Bin 0 -> 12729 bytes examples/demos/maroon/content/gfx/factory.png | Bin 0 -> 4138 bytes examples/demos/maroon/content/gfx/grid.png | Bin 0 -> 2830 bytes examples/demos/maroon/content/gfx/help.png | Bin 0 -> 38255 bytes examples/demos/maroon/content/gfx/lifes.png | Bin 0 -> 1675 bytes examples/demos/maroon/content/gfx/logo-bubble.png | Bin 0 -> 7706 bytes examples/demos/maroon/content/gfx/logo-fish.png | Bin 0 -> 3477 bytes examples/demos/maroon/content/gfx/logo.png | Bin 0 -> 18332 bytes examples/demos/maroon/content/gfx/melee-action.png | Bin 0 -> 7797 bytes examples/demos/maroon/content/gfx/melee-idle.png | Bin 0 -> 22832 bytes examples/demos/maroon/content/gfx/melee.png | Bin 0 -> 4046 bytes examples/demos/maroon/content/gfx/mob-idle.png | Bin 0 -> 6181 bytes examples/demos/maroon/content/gfx/mob.png | Bin 0 -> 2391 bytes examples/demos/maroon/content/gfx/points.png | Bin 0 -> 1561 bytes .../demos/maroon/content/gfx/projectile-action.png | Bin 0 -> 6257 bytes examples/demos/maroon/content/gfx/projectile.png | Bin 0 -> 801 bytes examples/demos/maroon/content/gfx/scores.png | Bin 0 -> 1535 bytes .../demos/maroon/content/gfx/shooter-action.png | Bin 0 -> 18121 bytes examples/demos/maroon/content/gfx/shooter-idle.png | Bin 0 -> 11929 bytes examples/demos/maroon/content/gfx/shooter.png | Bin 0 -> 4137 bytes examples/demos/maroon/content/gfx/sunlight.png | Bin 0 -> 248412 bytes examples/demos/maroon/content/gfx/text-1.png | Bin 0 -> 2777 bytes examples/demos/maroon/content/gfx/text-2.png | Bin 0 -> 4959 bytes examples/demos/maroon/content/gfx/text-3.png | Bin 0 -> 5063 bytes examples/demos/maroon/content/gfx/text-blank.png | Bin 0 -> 1326 bytes .../demos/maroon/content/gfx/text-gameover.png | Bin 0 -> 1515 bytes examples/demos/maroon/content/gfx/text-go.png | Bin 0 -> 4230 bytes examples/demos/maroon/content/gfx/wave.png | Bin 0 -> 2763 bytes examples/demos/maroon/content/logic.js | 264 ++++++++++++++++++++ examples/demos/maroon/content/mobs/MobBase.qml | 262 +++++++++++++++++++ examples/demos/maroon/content/towers/Bomb.qml | 133 ++++++++++ examples/demos/maroon/content/towers/Factory.qml | 114 +++++++++ examples/demos/maroon/content/towers/Melee.qml | 83 ++++++ examples/demos/maroon/content/towers/Ranged.qml | 128 ++++++++++ examples/demos/maroon/content/towers/TowerBase.qml | 72 ++++++ examples/demos/maroon/main.cpp | 41 +++ examples/demos/maroon/maroon.pro | 9 + examples/demos/maroon/maroon.qdoc | 43 ++++ examples/demos/maroon/maroon.qml | 239 ++++++++++++++++++ examples/demos/maroon/maroon.qmlproject | 16 ++ 73 files changed, 2106 insertions(+), 1 deletions(-) create mode 100644 doc/src/images/qml-maroon-demo-icon.png create mode 100644 examples/demos/maroon/content/BuildButton.qml create mode 100644 examples/demos/maroon/content/GameCanvas.qml create mode 100644 examples/demos/maroon/content/GameOverScreen.qml create mode 100644 examples/demos/maroon/content/InfoBar.qml create mode 100644 examples/demos/maroon/content/NewGameScreen.qml create mode 100644 examples/demos/maroon/content/SoundEffect.qml create mode 100644 examples/demos/maroon/content/audio/bomb-action.wav create mode 100644 examples/demos/maroon/content/audio/catch-action.wav create mode 100644 examples/demos/maroon/content/audio/catch.wav create mode 100644 examples/demos/maroon/content/audio/currency.wav create mode 100644 examples/demos/maroon/content/audio/factory-action.wav create mode 100644 examples/demos/maroon/content/audio/melee-action.wav create mode 100644 examples/demos/maroon/content/audio/projectile-action.wav create mode 100644 examples/demos/maroon/content/audio/shooter-action.wav create mode 100644 examples/demos/maroon/content/gfx/background.png create mode 100644 examples/demos/maroon/content/gfx/bomb-action.png create mode 100644 examples/demos/maroon/content/gfx/bomb-idle.png create mode 100644 examples/demos/maroon/content/gfx/bomb.png create mode 100644 examples/demos/maroon/content/gfx/button-help.png create mode 100644 examples/demos/maroon/content/gfx/button-play.png create mode 100644 examples/demos/maroon/content/gfx/catch-action.png create mode 100644 examples/demos/maroon/content/gfx/catch.png create mode 100644 examples/demos/maroon/content/gfx/cloud.png create mode 100644 examples/demos/maroon/content/gfx/currency.png create mode 100644 examples/demos/maroon/content/gfx/dialog-bomb.png create mode 100644 examples/demos/maroon/content/gfx/dialog-factory.png create mode 100644 examples/demos/maroon/content/gfx/dialog-melee.png create mode 100644 examples/demos/maroon/content/gfx/dialog-pointer.png create mode 100644 examples/demos/maroon/content/gfx/dialog-shooter.png create mode 100644 examples/demos/maroon/content/gfx/dialog.png create mode 100644 examples/demos/maroon/content/gfx/factory-action.png create mode 100644 examples/demos/maroon/content/gfx/factory-idle.png create mode 100644 examples/demos/maroon/content/gfx/factory.png create mode 100644 examples/demos/maroon/content/gfx/grid.png create mode 100644 examples/demos/maroon/content/gfx/help.png create mode 100644 examples/demos/maroon/content/gfx/lifes.png create mode 100644 examples/demos/maroon/content/gfx/logo-bubble.png create mode 100644 examples/demos/maroon/content/gfx/logo-fish.png create mode 100644 examples/demos/maroon/content/gfx/logo.png create mode 100644 examples/demos/maroon/content/gfx/melee-action.png create mode 100644 examples/demos/maroon/content/gfx/melee-idle.png create mode 100644 examples/demos/maroon/content/gfx/melee.png create mode 100644 examples/demos/maroon/content/gfx/mob-idle.png create mode 100644 examples/demos/maroon/content/gfx/mob.png create mode 100644 examples/demos/maroon/content/gfx/points.png create mode 100644 examples/demos/maroon/content/gfx/projectile-action.png create mode 100644 examples/demos/maroon/content/gfx/projectile.png create mode 100644 examples/demos/maroon/content/gfx/scores.png create mode 100644 examples/demos/maroon/content/gfx/shooter-action.png create mode 100644 examples/demos/maroon/content/gfx/shooter-idle.png create mode 100644 examples/demos/maroon/content/gfx/shooter.png create mode 100644 examples/demos/maroon/content/gfx/sunlight.png create mode 100644 examples/demos/maroon/content/gfx/text-1.png create mode 100644 examples/demos/maroon/content/gfx/text-2.png create mode 100644 examples/demos/maroon/content/gfx/text-3.png create mode 100644 examples/demos/maroon/content/gfx/text-blank.png create mode 100644 examples/demos/maroon/content/gfx/text-gameover.png create mode 100644 examples/demos/maroon/content/gfx/text-go.png create mode 100644 examples/demos/maroon/content/gfx/wave.png create mode 100644 examples/demos/maroon/content/logic.js create mode 100644 examples/demos/maroon/content/mobs/MobBase.qml create mode 100644 examples/demos/maroon/content/towers/Bomb.qml create mode 100644 examples/demos/maroon/content/towers/Factory.qml create mode 100644 examples/demos/maroon/content/towers/Melee.qml create mode 100644 examples/demos/maroon/content/towers/Ranged.qml create mode 100644 examples/demos/maroon/content/towers/TowerBase.qml create mode 100644 examples/demos/maroon/main.cpp create mode 100644 examples/demos/maroon/maroon.pro create mode 100644 examples/demos/maroon/maroon.qdoc create mode 100644 examples/demos/maroon/maroon.qml create mode 100644 examples/demos/maroon/maroon.qmlproject diff --git a/doc/src/images/qml-maroon-demo-icon.png b/doc/src/images/qml-maroon-demo-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d8baff894da95a3becbb6f4f0a39bd61643f929c GIT binary patch literal 10476 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 i0Q{%dn}7X30R{lFF`Uk76Yh8b0000= Logic.towerData[towerType-1].cost) ? 1.0 : 0.4 + } + Text { + anchors.right: parent.right + font.pointSize: 14 + font.bold: true + color: "#ffffff" + text: Logic.towerData[towerType - 1].cost + } + MouseArea { + anchors.fill: parent + onClicked: { + Logic.buildTower(towerType, col, row) + container.clicked() + } + } + Image { + visible: col == index && row != 0 + source: "gfx/dialog-pointer.png" + anchors.top: parent.bottom + anchors.topMargin: 4 + anchors.horizontalCenter: parent.horizontalCenter + } + Image { + visible: col == index && row == 0 + source: "gfx/dialog-pointer.png" + rotation: 180 + anchors.bottom: parent.top + anchors.bottomMargin: 6 + anchors.horizontalCenter: parent.horizontalCenter + } +} diff --git a/examples/demos/maroon/content/GameCanvas.qml b/examples/demos/maroon/content/GameCanvas.qml new file mode 100644 index 0000000..2cfb2db --- /dev/null +++ b/examples/demos/maroon/content/GameCanvas.qml @@ -0,0 +1,240 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import "logic.js" as Logic +import "towers" as Towers + +Item { + id: grid + + property int squareSize: 64 + property int rows: 6 + property int cols: 4 + property Item canvas: grid + property int score: 0 + property int coins: 100 + property int lives: 3 + property int waveNumber: 0 + property int waveProgress: 0 + property var towers + property var mobs + property bool gameRunning: false + property bool gameOver: false + property bool errored: false + property string errorString: "" + + width: cols * squareSize + height: rows * squareSize + + function freshState() { + lives = 3 + coins = 100 + score = 0 + waveNumber = 0 + waveProgress = 0 + gameOver = false + gameRunning = false + towerMenu.shown = false + helpButton.comeBack(); + } + + Text { + id: errorText // Mostly for debug purposes + text: errorString + visible: errored + color: "red" + font.pixelSize: 18 + wrapMode: Text.WordWrap + width: parent.width / 1.2 + height: parent.height / 1.2 + anchors.centerIn: parent + z: 1000 + } + + Timer { + interval: 16 + running: true + repeat: true + onTriggered: Logic.tick() + } + + MouseArea { + id: ma + anchors.fill: parent + onClicked: { + if (towerMenu.visible) + towerMenu.finish() + else + towerMenu.open(mouse.x, mouse.y) + } + } + + Image { + id: towerMenu + visible: false + z: 1500 + scale: 0.9 + opacity: 0.7 + property int dragDistance: 16 + property int targetRow: 0 + property int targetCol: 0 + property bool shown: false + property bool towerExists: false + + function finish() { + shown = false + } + + function open(xp,yp) { + if (!grid.gameRunning) + return + targetRow = Logic.row(yp) + targetCol = Logic.col(xp) + if (targetRow == 0) + towerMenu.y = (targetRow + 1) * grid.squareSize + else + towerMenu.y = (targetRow - 1) * grid.squareSize + towerExists = (grid.towers[Logic.towerIdx(targetCol, targetRow)] != null) + shown = true + helpButton.goAway(); + } + + states: State { + name: "shown"; when: towerMenu.shown && !grid.gameOver + PropertyChanges { target: towerMenu; visible: true; scale: 1; opacity: 1 } + } + + transitions: Transition { + PropertyAction { property: "visible" } + NumberAnimation { properties: "opacity,scale"; duration: 500; easing.type: Easing.OutElastic } + } + + x: -32 + source: "gfx/dialog.png" + Row { + id: buttonRow + height: 100 + anchors.centerIn: parent + spacing: 8 + BuildButton { + row: towerMenu.targetRow; col: towerMenu.targetCol + anchors.verticalCenter: parent.verticalCenter + towerType: 1; index: 0 + canBuild: !towerMenu.towerExists + source: "gfx/dialog-melee.png" + onClicked: towerMenu.finish() + } + BuildButton { + row: towerMenu.targetRow; col: towerMenu.targetCol + anchors.verticalCenter: parent.verticalCenter + towerType: 2; index: 1 + canBuild: !towerMenu.towerExists + source: "gfx/dialog-shooter.png" + onClicked: towerMenu.finish() + } + BuildButton { + row: towerMenu.targetRow; col: towerMenu.targetCol + anchors.verticalCenter: parent.verticalCenter + towerType: 3; index: 2 + canBuild: !towerMenu.towerExists + source: "gfx/dialog-bomb.png" + onClicked: towerMenu.finish() + } + BuildButton { + row: towerMenu.targetRow; col: towerMenu.targetCol + anchors.verticalCenter: parent.verticalCenter + towerType: 4; index: 3 + canBuild: !towerMenu.towerExists + source: "gfx/dialog-factory.png" + onClicked: towerMenu.finish() + } + } + } + + + Keys.onPressed: { // Cheat Codes while Testing + if (event.key == Qt.Key_Up && (event.modifiers & Qt.ShiftModifier)) + grid.coins += 10; + if (event.key == Qt.Key_Left && (event.modifiers & Qt.ShiftModifier)) + grid.lives += 1; + if (event.key == Qt.Key_Down && (event.modifiers & Qt.ShiftModifier)) + Logic.gameState.waveProgress += 1000; + if (event.key == Qt.Key_Right && (event.modifiers & Qt.ShiftModifier)) + Logic.endGame(); + } + + Image { + id: helpButton + z: 1010 + source: "gfx/button-help.png" + function goAway() { + helpMA.enabled = false; + helpButton.opacity = 0; + } + function comeBack() { + helpMA.enabled = true; + helpButton.opacity = 1; + } + Behavior on opacity { NumberAnimation {} } + MouseArea { + id: helpMA + anchors.fill: parent + onClicked: {helpImage.visible = true; helpButton.visible = false;} + } + + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: parent.bottom + anchors.bottomMargin: 0 + } + + Image { + id: helpImage + z: 1010 + source: "gfx/help.png" + anchors.fill: parent + visible: false + MouseArea { + anchors.fill: parent + onClicked: helpImage.visible = false; + } + } + +} diff --git a/examples/demos/maroon/content/GameOverScreen.qml b/examples/demos/maroon/content/GameOverScreen.qml new file mode 100644 index 0000000..d4a67a2 --- /dev/null +++ b/examples/demos/maroon/content/GameOverScreen.qml @@ -0,0 +1,122 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Particles 2.0 +import "logic.js" as Logic + +Item { + id: gameOverScreen + width: 320 + height: 400 + property GameCanvas gameCanvas + + Image { + id: img + source: "gfx/text-gameover.png" + anchors.centerIn: parent + } + + ParticleSystem { + id: particles + } + + ImageParticle { + id: cloud + anchors.fill: parent + system: particles + source: "gfx/cloud.png" + alphaVariation: 0.25 + opacity: 0.25 + smooth: true + } + + Wander { + system: particles + anchors.fill: parent + xVariance: 100; + pace: 1; + } + + Emitter { + id: cloudLeft + system: particles + width: 160 + height: 160 + anchors.right: parent.left + emitRate: 0.5 + lifeSpan: 12000 + velocity: PointDirection{ x: 64; xVariation: 2; yVariation: 2 } + size: 160 + } + + Emitter { + id: cloudRight + system: particles + width: 160 + height: 160 + anchors.left: parent.right + emitRate: 0.5 + lifeSpan: 12000 + velocity: PointDirection{ x: -64; xVariation: 2; yVariation: 2 } + size: 160 + } + + Text { + visible: gameCanvas != undefined + text: "You saved " + gameCanvas.score + " fishes!" + anchors.top: img.bottom + anchors.topMargin: 12 + anchors.horizontalCenter: parent.horizontalCenter + font.bold: true + color: "#000000" + opacity: 0.5 + } + + Image { + source: "gfx/button-play.png" + anchors.bottom: parent.bottom + anchors.bottomMargin: 0 + MouseArea { + anchors.fill: parent + onClicked: gameCanvas.gameOver = false//This will actually trigger the state change in main.qml + } + } +} diff --git a/examples/demos/maroon/content/InfoBar.qml b/examples/demos/maroon/content/InfoBar.qml new file mode 100644 index 0000000..6149711 --- /dev/null +++ b/examples/demos/maroon/content/InfoBar.qml @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Item { + height: childrenRect.height + + // Display the number of lives + Row { + anchors.left: parent.left + anchors.leftMargin: 10 + spacing: 5 + Repeater { + id: rep + model: Math.min(10, canvas.lives) + delegate: Image { source: "gfx/lifes.png" } + } + } + + // Display the number of fishes saved + Row { + anchors.right: points.left + anchors.rightMargin: 20 + spacing: 5 + Image { source: "gfx/scores.png" } + Text { + text: canvas.score + font.bold: true + } + } + + // Display the number of coins + Row { + id: points + anchors.right: parent.right + anchors.rightMargin: 10 + spacing: 5 + Image { source: "gfx/points.png" } + Text { + id: pointsLabel + text: canvas.coins + font.bold: true + } + } +} + diff --git a/examples/demos/maroon/content/NewGameScreen.qml b/examples/demos/maroon/content/NewGameScreen.qml new file mode 100644 index 0000000..d6b6b8c --- /dev/null +++ b/examples/demos/maroon/content/NewGameScreen.qml @@ -0,0 +1,111 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +// This is the first screen. +// It shows the logo and emit a startButtonClicked signal +// when the user press the "PLAY" button. + +Item { + id: newGameScreen + width: 320 + height: 480 + + signal startButtonClicked + + Image { + source: "gfx/logo.png" + anchors.top: parent.top + anchors.topMargin: 60 + } + + Image { + source: "gfx/logo-fish.png" + anchors.top: parent.top + + SequentialAnimation on x { + loops: Animation.Infinite + NumberAnimation { from: x + 148; to: x + 25; duration: 2000; easing.type: Easing.InOutQuad } + NumberAnimation { from: x + 25; to: x + 148; duration: 1600; easing.type: Easing.InOutQuad } + } + SequentialAnimation on anchors.topMargin { + loops: Animation.Infinite + NumberAnimation { from: 100; to: 60; duration: 1600; easing.type: Easing.InOutQuad } + NumberAnimation { from: 60; to: 100; duration: 2000; easing.type: Easing.InOutQuad } + } + } + + Image { + source: "gfx/logo-bubble.png" + anchors.top: parent.top + + SequentialAnimation on x { + loops: Animation.Infinite + NumberAnimation { from: x + 140; to: x + 40; duration: 2000; easing.type: Easing.InOutQuad } + NumberAnimation { from: x + 40; to: x + 140; duration: 1600; easing.type: Easing.InOutQuad } + } + SequentialAnimation on anchors.topMargin { + loops: Animation.Infinite + NumberAnimation { from: 100; to: 60; duration: 1600; easing.type: Easing.InOutQuad } + NumberAnimation { from: 60; to: 100; duration: 2000; easing.type: Easing.InOutQuad } + } + SequentialAnimation on width { + loops: Animation.Infinite + NumberAnimation { from: 140; to: 160; duration: 1000; easing.type: Easing.InOutQuad } + NumberAnimation { from: 160; to: 140; duration: 800; easing.type: Easing.InOutQuad } + } + SequentialAnimation on height { + loops: Animation.Infinite + NumberAnimation { from: 150; to: 140; duration: 800; easing.type: Easing.InOutQuad } + NumberAnimation { from: 140; to: 150; duration: 1000; easing.type: Easing.InOutQuad } + } + } + + Image { + source: "gfx/button-play.png" + anchors.bottom: parent.bottom + anchors.bottomMargin: 60 + MouseArea { + anchors.fill: parent + onClicked: newGameScreen.startButtonClicked() + } + } +} diff --git a/examples/demos/maroon/content/SoundEffect.qml b/examples/demos/maroon/content/SoundEffect.qml new file mode 100644 index 0000000..ce43e34 --- /dev/null +++ b/examples/demos/maroon/content/SoundEffect.qml @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +//Proxies a SoundEffect if QtMultimedia is installed +Item { + id: container + property QtObject effect: Qt.createQmlObject("import QtMultimedia 5.0; SoundEffect{ source: '" + container.source + "' }", container); + property url source: "" + onSourceChanged: if (effect != null) effect.source = source; + function play() { + if (effect != null) + effect.play(); + } + +} diff --git a/examples/demos/maroon/content/audio/bomb-action.wav b/examples/demos/maroon/content/audio/bomb-action.wav new file mode 100644 index 0000000000000000000000000000000000000000..b334dc1e5b2c0af95bb360c0716d93474b20553f GIT binary patch literal 20972 zcmWh!1zc6j*PS?Ziv~ed4D3$8e1d`9*w5~K#@{Y%tfxM^Td`ZQ6)~_oQR!~D_ntHH z&8NSs+{1~PJ#%K(UVE+HojP<#?gc>qwh`^ePMKBF4FCYeU-#MoRE_`u0XHyu#Hzy?fK{}}0x$>wb-+9RgI5KVR|1W|EndVu!3SOzQ7@;cQjEKr_%J~#9nkS0LRRe#( zN6>>`20`o)`w2Lx3(AW-=kZtKc||;$mg9vY5_w{5yNMW;@*FUN|0Lz0Q^b6XIQASA zfxUbj@MYha4Q=Pm!4lqqmqUH{2|g44M?Ua9pat&-&+)_jGXDvJU|H~(4CN2ub{+}B zxs{&*-M}bV8{`}Pc?rD9n~GWSg#)MoKkyWcA5Gc_eddPh^Oj;v$MN@|$Qi(g;6Ka{D&k$K zBBJVp*6|i>iSEjOK!YCu;b0Q@Chm3(=JN7z+c2h z7ve0C2yTNVtP?cBUEdT=F(cQ!!XQ7F5{=fVGg z&f21DtO2Nm2GKZ}Lpm9sQ7=9T9Rm&7Mc4||20QqEPzL?ad6ZR`7#j^zcr-Y~r3E4mN5L4@97c=lK8QK}52~p5BX#AM zJODN0HF-XqCR(H!gzlROO-h$ZMEw9y4PM`y-Wc|Lm%-hi?^9=fucVu^|Y>){i7D4QV0 zsg9JxpF>~Nl&piN^=QXBDM`HVUB!%=g^+mHJW&B%2=?)Tc2B$#9fy6`a@tz?4BFEQ z*wF7fJk?8l2)_r{^E3DWe*<5l`}WT)39jVF;2$s$%_R{i77c-)9nk45KSnp{6S5rt zf|I~<8llVW%)kPrT_XK(>% z$-m<>#V3iYGK5ZrUT`Al$rHdr&x#UIw>%e)1y4l$M#2y1f_S$#pkDU2`YGu; ze=MGQ15|~B;U>9IyfZGyTHFjJp=@J@SXC;>{kh7bSxdABSW14NT)33ak_SZ!A+LA7g0Hzh@`onw%^42CJyctvci|Z|7F6IXK_J$hD-n>M!4%2j zsA0-2u9v&m8Z351Gwe^!@EEudHimuSF<3^blXuT~$o7$0qy+kpVMn*vd{7yh)tYF7 z)Y$R1V1xN8JZPMtSD`DOOLnLUdmZv*3)4#Hn4I3$-fXSj7T1stu)QEmdrvEf=QK(!05jcki~}eZ zo&yc|P1;WO23ue)X@|45=_Ra|5ib2tUTBm-Ijn}-fweT=$)PNom*wZsAr_eJsr6K@ zl16efJ{vuvl}LH?PA)Xw;p&nMa%G%(*{ER&fN|13Izeqn%Hmgsl)l$IR&A`W1$CuR z7E3z7&LCHM$2})J!%re+zXq%D89)v>MNpUy~!scIHca zD|Oj1$0;dZYHEqjiOzlKR-W0(J^2E(89%`xFj;EC;`mfKjP+No*{(*a%LZNp{S9=m z(OJ(Zh2NB>bOJpmug5k^kIZ%jp_cy2Veras!s~c0`b`Vz8|j&Is8$JWRoXC@WDn~J zDcJZ6t>o`vfN@%KQOckorz<}%*Q8%9nIty-i8=@Gr`1hW98Zl`$|8!`PU8^tmL}sG zz{=WKqI18MM!O6mQ&25bpx5Is=nyRNFU}y#SiA^if;lV++45#nAo}||%_%FDLJuph}Gd9lH zBb8%)=?L7FRYMY-ZOnue)Sw5EKN^SY0JWfv9xtbenQaC0cqf$Oyrrax_2H4($dMeQ zUB|Gy(sO>maTsg>cTqk%$xq^eyga^?JI1lzS`4144rdq(S8p4u=|VmOtP`vLOl%>q zO#_`@az>gTuzBn@Y664sNuw?Q8&2ZK@Ey7YRg{q9h%}VPqS0)2_CWPGPNq3Hh*aa{ z7(!ow)p-n?;3wLh&SKrnR--yxD&F2Va93^^x`+GFF7SpJvyU_e-)5I_5%`!Bh2|<5 z^d7p&D&ZqAo-M_JupNJg9*%wKXD^! zNHSlfxY5F-2(^|pmUdUlkm-6?7%t|Ti`<>fk#50!ski-gw%O#0zthJ8MZ3a(fk|4a ze`Ub}Ed(ekdSz5KAGF`hbhmy5b$Ms7h6l;{tQOzHE|X@ciTXgQ3Lk+K7N0(y#kj7a zAAt>xU}N}Us)-r#P0r^wHdAh3gez6^7Z$`@1KBmHA9bhgc_dvd`;oU&D=@*>qm~%n zwtl$}a~y8b^svCEYo#ZADr*fU@_PId3`g(qc&Ul{A9YWAF8_lX8XMJckRcrehiDa$ zPe<_Y^rftr8XA+#4|04mpSt!(BLxyJLA|Jtz%R>mKbWW}JdIQ~KQTP{UZ`dsL*dd? z29?EpJqzLoa2&lxT1szuE&LO`C(~hNxxC|8et$VqoyB$-FZdR*yG^Gf;Q&06LfRSj z6#LwKyq=zw-0Vd;-r6g8AFW0HrCmr0ih_UWEGd|KkZH;>Fd5V!QIe<13}4ndzY1=y zRn@;pckxPR2%RC-LBDx-zDA(6w|o-y;Adcam=6$c#xAPsihS}fTEvddCb1HZ8!e&xGxhHoNk1IW`MWHYa)6~3y}++QM|gsLA%COptPn0>yI3!= zhV*j|gB3u!(G5%VAX$n}(e|(>%%kn#D;7!4i|iwt?SWyu2aA$+lTh{%A=*~CE_TI{ zGR(itjwsVuMKnZ=?*x<&b^>>HM&8eNGU=t z_#Eqk221a9Yv{MNCA1Iz#5-VrK7^IUS$q#1&C`UIupt-}!grxca5!Mt%kD zIBJe^NhUwR>Wg>dD>%sq$$Q~0Isg@t^6DMOxqNE+Mr(r6uq&SeHR8*ANjHES8Hqjc z{~QrUlG2&IkRHRcVof92m!wEJl11@nSU55w=I zLnMmNCMjSV^GDUN&NhntbO;I3HuDb|Rxm?-47Z@QtcJ4Q*g_u2wPxBp1JCQNU?$&Ryjla0ImTO4!WXNI&!EmJ(AK z{E51u7?GJRQVN*2bG7QuchQH^BfQ&qhBi^RoDSB>+AW>2_Glk^uOGlkye+>^6A5SK zK)g1IB*;_w$n56QH@p@`$uC*7zKutK0yRQPr<T9(l&v^LJZkL!2gnOL4VU!Sd7Bh9b=OG7It+018PX+VQX4hPN2Tcr0>`csT-AMfJba`26|c>YRp-kixP?4Xm$OICnUaIm#4@qa=lmaV z$kg4C!5UL~uHm$qsc}v#508N9wicOtN@uH$=@@vxs4t=~>qU4I-mRA)GaJOB<-^YLX-k_N2d=Q&Tsz|4` zzm3x_pY)E&v96~eVsG$1qqaHK;Fe+FezGjB5$~D<0ey=+8x{)QY8Cc%GqPfGPPnAg zWF*!!zF%ABXnT`|rb!2-HK{m)wU*G~9V zi_+uZbmOu%L*yXmq}jls^hk}cFYq}A70`nnVcsMW2U*|gg{ngzn!3QURjCb+Q46>x zKXxvJiClG`k?)y4+9QZ{K;NJ{J0N*dF4mD-l#|7HF#3e9;$YI!rF-FmtVwQuA}ijk zA$uQ-$srZAum!O(q!bj&lSw>q!<%f^^7mvccN+uu;|6q!)C5gHi@+zWlEZ)cm|n=W zrIYd@he_Eg+6vilX)6rZsD3QDfoc)!L^MAF8Y}H-eYTXIkY|H6rK@Eh`h#t zXSnSo(Rc*?q!?(G|%G~ zlvsHjscCJbOiNzr4A7>tv#L8ugqL9gnXWt*`?>}fv(Yq*dCK?MVN+f3Hp6CWjVnOT z4j^A-;=61klA9T)OptX`3XO++68nR1QU~oo_wmJYiox(;X$i{WkiL>`rPb0GxjT(8 z^#>fyD=NpOo6ZNB{_-)Ut#g8WQ;MXaGzYj!b-0y;pcP6l+D-RISNLJI1#G7`HkT=y zo*(EMM4uyyugFPcL20~e)$A^`2_ENYXlhHppcmw=ynsI@vC2#S!!$WRtLU(tsW-MP z2i|%oSQD=&4S1N+z!*ihgC9~p_Y!-=XOaiX+h(yu&>A&WU3K@=5c39n4?KVar9bEf zKY=1}V4h1}xJLxL30fitn1Du*>i8ZzCzof-cpuOr+Y?Eq=F$Svh^#hOGn(RI%J8Be zG!6H|vHEmaMXdVEq{x!p=DTWYVj-%Den2nD8?A;f;ch9!sDaI-iJIi_FBoNBV1(jN zZHu0Y>wq$!S^=N@2V%A5z0Ns*qq^(wTcI-#p5UjREy7c8lNna^cA)^$5=-o8e#ue z`wB*oQKq%hSiBGir(Z37V}78wGaZyOSpzb`hTxlwlh$6mfiYZ}#r_6mTy8l>C#Sf2 zD+_dQq|r#|rsu+Vu~L*rJ+%F$Xpvj6P1P4*g{p8i0B#=hA0sR_%>_367Vy z5>>rS{!8m-dS&WLF414oD0v;*0$%X3>{6R*VR#;#Z^)aG=F*e%|vm@FurI1`OeX$4U z)Kk~W=|*SXUY=_#ml{b^NwVtW%s2Ncx|-$T@tmG#+t2{Pv5e5yxoV~TQX{kt%4n&F zA;wUxqz6eB-U%;sEuSz(|89Hcm~BOLDoaCcxM195Ut@+jx7a_Uy=!mj9Gt?72nW6} zNE)NI(|5U^${nBB&94PbLqn9|rM+n|>Y}Y+L)mrP)0{6klRVCmTJXrfq%S)TNN*+@`&_y|lTC?Nw)&ghAAMKiS z5FIYbgb@O9U6W;+q=eZUTkc8|e|AtZY|8}mJrM<>c(TcK!nr{O#_PoR2A-&7e+#8vqYc1YyK*I6DrFO4?4qz%+v-3~fiX_Md``&Bj> zKLQa-ceze_Z)2`?0-uhT2)^0}&j-hykJF~r3rhX8=PcZI#PL5K zjw79tybYd{!sUD;%C%v*FgV+E*llv*-=y=)yK>XP#qCId7IEHR%0jed@ z=DgtX5guSY^e^xSXoH)AB?`$)&wb>v3pHjt^v2MtZJ@*O-*f=n>6Vd}UU1sIm?jyy z)Q*BdXY~a9EIq?jl3h`v?It;c+Bt84G_-)Gm}a9?T(96}!9&|N!520F|KKY65^bTh zf_=rulltHqmcg(<;Gf|{GG1ws{EcZwQP(_ATU-5#oR8`lF_O2O>Q+DVM^={WcD$T~ zkxZ$!`xincx8Ws?rP|n=gyIkoB{Iwwd5}k||4=FYc~VPjo}-d!CeJX{;9d!1V2LG^$FsZga5@fD<3NJ-)1n_`oeKss|SMkLY2w`^!)q;?5}) z>>SpJJhQ$u-lx^mTyS%|NB2a%Onpfwbt3gtCON0(bhNx@G4f2ot-X?)u%}vV`Wn>2 zI=~p=ykz%t-J%~8yU!fC2dJ8LLcI&)1b1@^M)8)WVnsV+OGl~!ys@pszKM-8T`xHbUT`NEFYVA}IJ$#GwjHc@6kc^^HL)4l3v7rLRe%1r6vG&CL z8@3H}xY-9=`3>cE>P>~2qV=QF6)6NvRijyS@^LubvX#BmXQRcai(u2Uh=qI0t4&=5 zb{m7*XUT#uvw&bVid)z=5(dx1=3u6AgPY+#77CAplctE$BSjWzDhiZ-ONKK7FO^TE zCc)`yfIu)qcz0#6Wa+RpXBhGMn!d_ z9gq$#6&PT{YzwpVGxJ=BgXwgo=_+31D21CGp|}DcQ1aY1z@9A~H~W;XHZ{nPEC!a7 zf|(x$7fbyKpiWbmW3ur}dIToGm-ZAnM@w@SSpS#lTkzX9$*2ocX(6mAd$Cgf8@f2J zzz(94K3-bO`?LL~7>YBS**+*QbRBgv4p?IfujWp)xxgd14$MGPSRh@)pVR;FMeq<0 zRA=!E`YhAFOdncg>uL8>4RRaKSKAgfWKPpEz5+{v&%F;b&56aovZmVtU`=Kt8+A8S zj$gz*_zjSYBgjj zMEVGtlpx;5HmZnZxp)lYeRKtW<9*e8bg`&e?c*8fF1*fvq_@!0WOwIdB@v#(-yJhy zA5&9OQ}9LSrRi$Jq^dk$n^tVLG{CB;tPf%RqavxV)#SymX69y=xz0>cyZp>LNzY*f@l+b2W3arb%AcPOSD!LqB>&gxf?d@n?126+ zk2U3@J`Rh`Bez=NA2)AOkzAJA!Y9rv;+i%%7|cL1A~UH4k2|YMf0(L-s>tZ5RLLDt zdR;xiV%7TS6#Q5Alpm*balUk2M4I96Z~~1~EwHiNpB%~gBL7Dwp-mEPYN|+8lz#FJ8 z*ad;Jf>My%U+?C&$k`I)nzw;qEd|t0xDMO6|Kd%Z%}g7?5xKSY`DTA5j7qzd_%U{D-TXQo|Q9f-v=VrW%f5KfkG=%}_cU7&vwI5l-&gv;D z7YO%+)CCr6%@e*Dl4mvJHad)3;%06;a$-|5eVWr&g3RKMqy6RLAD{K0JB(rrk z+DfXTLxziN!E-3U1Jw1!9lbZPt3NiFyseo=p}HRa0&mUj{(QFA@H(sCW_zTif`<=- zF-kh`W#M`KGk1ID!p6>jm3K4{RFij@j_XSjylk~?dmMsDWQpi1tHYMSM3ad$A@P>Y zrPm5uD?Oz9XuJ8Y{v36r;ThXZ9k`Fo!7FlKxyC=a&q)Hs4P1MW+H#^X2F&4WbIpVQy%R3 zv$Im&I@=j5Z6#l%imWI9OK2vbS_#bH4?H@gRLL3Sx`ZxMR*~{xg1IJ6GV(}><(76o z`Ev0;?o*9b%4ysQRfT!Hs+N{?h4;0k8%N<m^Sv`C^ker2%r3^cB@+5u_q->+n+}*#D%uJiVZtOJm-bM9Qa( zo~%%njDw27S|wJp2AY05*D{0umT$26Y!?W|w@F>L7dhs=2j{=AOu`(TXVaBFLYFk%vOO!20wSyZCN z@nzCWxQ|%m=d@BuEvX!s%&Wo}^i%#uYN4w+u0|UR*UfM`s0w1(S{}jeAeT-AQP2x* zL<>p-WCvSkr>0brY`jHDFp~rRjuARb=_zlg>y^FEl?6rSOgM$Qu=DaER*ILQ-DHnB zEvY(tYx_>?qi4=($Pa4DLO#Y(qh`g<{zJd?niL3w|p`!#3I~d0bX6qd|Z(O$Pf_cqW%ByMY zy*fW_4h?esZ2yW%85gX~1726u&D!&`{21HHH_8v89}5;7`uUoW?YavOfp3y4 zJe-EqE6PZHjZ~NQ!DU#QegOret@NqD$?srIW3Et)Ws^4G5gLbHuoAXXMEE0)XNtKl zIA9&`n3CAv#SYt`emq+Dk|Ko;h_F(j3VY6yfCs29`V@}#fhO!Fb(d~&Ng9nJXg5(LqDitz~L3uPC_m5qwl z?FE&JA8GFeKi1T-3Y|b_goZ4a2xb~8MAo$L?3xjaC{}(X*p46o{X9rBViWk3Ugr+13X(~hDTT(+}L4tT_&r^DW)!HyaAO8 z$Xl=kbNFO>nhtkHYF*La^q{fSIi++{v25$X|KeZS6vN3bE3y12 z?5y>-U(u)13L;O7P%nXzYOCT&1*cty(QSe)9>GnT$=(ah^Dt+NvmO3^+e)q9OxEqtYX{X0O?ZcXypf&cr)ou@nIZ}&3X+q#^pNG zv)2iZbc%6D3*(*XAnq%Bk$4=c$ACyvR^}@0mANY!C$j1-)LmbPr{ngp6)hoCl=hbR ztZmLXH&t&WXP~H}-L4@eb#l{u-iq9yKDop;@mItmbTPfb2)&x^7g>Q9q3@|(%=hVL z`pE5s(b>z9o0JvoGNyC}akDj(TPt0)4ZknS&^)Pdt(1*tqbSy0TT71;BvmQ0mP}P^ zxb&r;Oku7O-#_s&rseiHEfVAlbh%8ggTH}sw2JjYfsxbDZ-@A{!YwknL+N8nw9e!P z`V`*GbP%ow_Z>?$uIQ;Ts#Q)<)_H&Y{L|s(Ym{El&j=K~RXXa{-QLU`4WkpT`D_uI zfy?fZZ?~J9c>T$bouzijQ${Xs<X_@)2 zDt{`>b{lO=x>rW+229pG&DEIE!yPc*idd?!hmuhaczu{iSc>cLmO_m-T$Kh9xo2G5x zB(Z*~XpQ#>F}l-JY9Jb^o~}<424=S{yAbA?=D~LuO6R`!Ej(PY5}8)=)Y4q4Y5Qt~a8gqIZK8`V zn9eCK^GUk-1Z`H%({7LZ?6KW#9omK`z!A8n8c8d@O~<1HR2o_`%VU!iXw*gPQL^Lh z+a+$t-Caq9dtoWCUPjM&Hh!14)YKrMa>>_# zPF9He!&exg8fr_CV=WbReI<8l)(oGEk_NNUcQVM$8-L9eHCFOU^Gw&XFZu0otOCH2 zXdh3KU3Zy|+FL2F>=y8%z%4bc!e)3|-=Y3wJ-j-R(|I#NOXnWfD@h~s!pb$*Tbd8( zj~!08FQq=_o~Cof=kZte9H07K*SP0lM`Zvb@0AwjvvS#@Liwq4t1&wFL@6zE&#BTV zSAdLCUumE+QK-T6qOnq|+?OR=Jr=_+_>7~JA8@%%K9w>F^UZ>@i-Yxj%IQ^w!k~`D zj!!y6U>|EuhvZz#VfHm`7YybjDk+BE2v8s?-r< zmttDQ?m32d4k?V#TICJM9_KgS_#`sMYPc`ys~=Kd2qfpPzE%A*t`%=||L%-Iqd9)h zC`T)T4ebr&1o%W>4VNfe^*H{RU*X+YJ-!T%CdYZ8a!zm07UM0>)k-Y5M%R*ja#s4T zf9GxRR^3lNEydb@@HxgV6pyyse@JWLCNPj-kd8~}0^XD*qfrp@w`4wDh8Ic4$vql` zHp5>e!x$zHprJg5snk`SN*jnbdn!+1-trt0Cy-Y+q31g7e2=ym(V&8SPM^u1qP=u9 zuPZbuHNh%gS)RpGXeDVdphivAk2la8N_qNRWu(B%ouD_FrlnBB*a#fXVcHu$lsrWZ zSTUYPJ`i6viH4$u0ztQ<%fT{f9qC4zgS+y3#*JxG9;*iqv3vA8Y-`*U>ivn}h-8pq zES4<=o%vOLw}g1Av$q@srW>1?gOvsM!D(`erK26d$yNz#eBgI zU}tWu4c$oMMVoW|zSWOCrZe13N$CmIPc92D(MtnV}j!ZO+USb+Z2d{10ex1d_hjxs9Y0F;g9>OTzaXl@In+sK0Ur>@kBd2R7K90v>vd@Y ztSEk($xHYawt+Pic>JnR$WMkZ!7g^1UFO}vJeDAw0j{v7Q11LK+SQub`DcN97V}1; z&wgBmEri46m2h$dzyfj9ACE^*+c_57}%~R?O>v&=WR-IaxaR3d#w@G?m^0QG7kA zE9T1*p?#jsFACLzDxUERw+6M)Mxpp}mUhWcHjQ8{SZ`4=EXQuLzmbQ00aO>gtSfZ* zeb_DBO{jBZ1W5|%MxWqRt{?+#l}hkzM-chFJrn(+Y8Oz`t)07Pd3(gDyNW4xsC2YdkXz?vFs{x z;km{*?Lz65?D3w#`YIA;@-^ZdobHnbp&(OFew)5P)A1TmKPw3Ku?^G1`6zhV7{)rY zLDE@MFL;X`fTd>7>}mN=-1-U4{YA3Iu|oC`N^Hq=i*)DMrJYez$;pe)8|$)=C&`ff zrrYoqC&;$drs#_g9^o29g zJ7fk`c^b?uxCo!BX7-=4bsRaQ$~@Gik11>-O_bX&X&%$wZe?MYZjf zJ;xMg)912;N%XCWrPs;z^uA0U2tQM@_5;5pKfLB8olV*28$xO;|DsvWK~kQw zLpPbJ+5cSt@932#JqHa-nkW-N9rHQ;4f^V}?aSXKv)o@g&oPtip@zy=)L3%btzz2k zba(gH#tHJ7nAMl4sih45?D7aqd;3UTWR24=v4Muev{HDcqF7bG0{!B9r*~H+vY?`R z5gem?tk?9<^hkxhU+!g3^{qjx!RMfY>6^Y;=!I05y7Xpzl;pJ?(2|A~m$A~Urwab%`P;b%Pj+_o3giuJKczqJGx4AYoh_|hyW1z2E(<-)3`-7~ z<2AQnR@@0U6^F1=S$4zQvJF)>nLNTCmF68N??oF4RJTwd z+lSEAa*c(!^hg`>w7*viQ&h=rr8_)j8t#}XJ+M-2@wpPWGR5xK&e$g%DZRmt;M#Pc zOHU(J>+KO1&()YpcXPeOKJSe~jv3l(@Xj!m zc9Fj0D@MNaiCn@Tc~*U8dcCn+1+kME&M)kLV%;wx15hKBh`QNE7#rMceD0I7shaMT z&|9J)7j=;xDbe^}FwYjO|I%l;xBa@V;B}d{dJLQc{m^EVAe7y~w4pSF^fb4S3*=L% z{+Ca359=EeVJf1oXg~8ZklI}u#zN%fwAec`&G=KG+>|oSoNuqXIG%uY{pS8{xov3H^YHOrlw!Jxiql{2q9V zUeb|*JvnV$#dV1t#3{4vSHXLAv*Q_^BN6&Rs7x;j7HB`e#ybi}*$Oa&d<2gKs`|(} z@(FOD;BN+lt@Hs(1zq%U*v^kSDo7jfe1X7P;uO$ZFAuqJ#ii0U^c4ta*JuTpA@=ed z;WhXdmlp~!2|g4~zE5m745j1QA^sce7yIp6{+us@b~+h&g09R9UuA1Z8$6QKh8N&_ zDpqshN_quHvOc^&w+ZK{gSFshK3Fj8jbTUdL--A+b1RxHcDX;o+t-)h5q^Z)f|pv% zUkJ=6^D68zJkR4;GohKQ!LHJqFoE@Dx^SJY74FQnV!lo1Vf;VAk#yu!guCz+&tx}* zqw|2kQ^$q7wu>;RSpFU%-xXA8rvY%yI&!ZQ=^|6zA^XF2YgzN*uc{ zj)n0>e4uca4iI-=D9~AV-cqZwcRO0JzQ*gvS;LUucO?*X4=o$0_lo z2+`sZd@^sq!-YOn;e&WGf6L>91N59Yu8Tf|3P0&<;jm5QKRFkU*_XVIII|fK5ID4z zxPH9w*>)D+DGLzCYm57Ni0V}};R?+W$5x7WG(|+Z2X8F;xs3br8hnYkYr63D%HSmM z65ie;;4tVcw4iN-fA=_;0zM1ulEHI96M@Mfm?9MS*{rdM%_=s9b>a6|5NpcrvQR#e z)nL=uT-JpBB``}EZ^tVNFIS+5-7DeO)r6-}72|eYxQ<_o=h;QStB6_iMxc@q@#!df zxkOyiOT@7}@D`sE(bm_(fjd~lJX|dTV(j9DUi-A@wY!K95`9Wz7SYFl*(vc% zr|=;MiCGaW{J%~S(;s3SvV_AqLG*4L|IKp6xy7uC82|r|4Ca2~9u@gp_K8P}_E~0i=1itKDJ%>b!$;d z6Sz0L%eT^-qUJUj$MO0!ie3~Ru`ytc==oZvia2$LTZBvKr|@Vm0x=@f>B!As25^e} zuN7~?BIs{gOSHnm$FuRwBwDf-DDX3%D8}9m>|w`*Pim8JLard#m`pIO%I4690=bW( z2smg*F>)(;53wrj6;ZwjYfB$NH&&bZfTnN;FBLwj#-N?>YL4cvG|c!x-ceVPO^q`o zeLCwWB65XRC2#3(;UUQozSlea8(GRb2>)AWbX2e=!_XSMmRBU3>0K5_1Hdv^0;k|; z>7hIiV@%QCcr`k}cY|QINgvBr3#axnQL*)*=M5+@_#)O-|72`rm*`(?l`)c3Wa(r( z+$k!hW5s&;nA8(9;U;;6Wcd{oT6$6sEM`S?BAdy4C8u0Zs$!ZUYPo+a*F|6YqLYTd z{*UqA5dC0(0ZH0pf-dVlX}S7!qRO>QKKJPUosMSwcl<`gTRV)5aZN)M4(;-nIQcW;~1EdhqG;?5GM4FPdi7{qxtm z{vD@)QQno>B|UvQ@x+@oSC&6Ib~klw`IU|5_2@pS&9Es=p5@0seRBTTmPJu(Pai35 zTP-c5VXt-5v!)KI$8*oVK&OYUx&GgXFV*}a8*dJGPUtkLsLkKT!Z(Gd2dz*2@A?~y zZ~F#CU9V0Kn0&8h!JpyJTOMt^qSnQ8`l_-ZWbRsyUZt-0SkZBw~H{hIeUU_4|lXmLirjE!Gs*&An#O`e!_K(7Yw zSG!R=H1C}6LRd4l+VejpmdZ8y^c?cOMMC{fzIzRD_1(^xPn*(LC7QK5 zSY_#*z`{dSUin<|SX!}h*`J9Y(p!|B>=NZ?&o}DjZBOyrZGqFMl^ihXl%1p{*hh_2d4PM#%h7y!2=u2@p6qV^I@EO zfaAYIZ@(|h&h_hFwBG95c~Qd4>gLJ8v(HqloxC}r{LRJrq$fw7*Au^}+39LfSu`u`2q< zypO~FTnXA6)>iCJ7YBNTb^Md?WJ~PsmyWLy{BO@Q<<7MXDc$LOot1Ur*pJE;&IUC; zy7KY7o*#J4v~!1Ue;hH6EY1vCyKHFIr-oPX!7pET4F9pS@Ije4w~|qMSMRW+wfg8 z%di@nH-^uCo=ugV+j4po9-`$6b2NvmUb?urT+u>D<$^lu0B;YrDD7lkBx$LPl%LN$H9dA9kEb%Fn!bnHrPQ^z*Jl?X|_RMy~CImmW)da*yP9w|B z9Np^rIr>*GsNL^N)jJtkq>VJe;s_PPvm>WR--t>GKWocYE~riGB5G{aw5ok|+gg|R zbE+A~Np-+T>l9Oc>x3Za62(S*yk6?L=IrTu>Yl1D6~e94?E^xy?G=`0w9J|I+WYdu zO4*$#>1?@3UG*;GitgL?0>+#m| zEp<(mUXe=N#HRI{osHdV|4JTe%=AcgtzDI#*4mFOU2JKZ2Vy;j=Xz|8=T##sUR2I- zPvO<(#`c(q$q^kxhAGqNEoYP0rPZ5VT-_mT2znLnk95_`3;qCkz%tjf*Pm9@y}DP? zr*^xVAyo%<3teVk6{w(!sGt8$cSrXj@{CiDy4QpAAO3yoj1qT6-wh>t~WiU zKBs|65@jg}*l7M(xhsa#ed-A9u&x;DVjnqk*i{|c^@(}0-wv~8P~KO z#xF(}r z+$p<)ys!LY;pkBx>TnZklVXf&TF%|jee{v<%BzJftRbDE-PCmd7+-t;4=Qw~Sl6rK zb+MEeYJyy0q+>^bB)t}fXalf3Sl$x%B zCKcuN2JLQ4GPizq#rFp%P-jm)7-W>gc*hT4qoXR`q zrBJhV)D+)4{t9gtYbQo33r#3#kh)W+f2+sh9_wpj=)!nYk-4i?4M5uaF+|mwDQ_ueukjC3JuoZEkBB9+0OLim`mV z5v=EG&5hA|Ph%auPt#ZsN5vhNm`balhl(=VQ?oJG_=80WwW3*BZ}ZN zY}JGGWrm5*7p6%e${0nLLnY{T=p%KkTCN5d{rMi@p!~PmFi+ks&ce!Qh|vSu2^+63 z92T!hOp>LOVkjI41kQ~j?V_srzfrA57uJXDm1ZgZmEV=&rU^>9xE6X6)rh7m=qq}U z_YuHc_!;g-=OI%3%)?-VWu?@>!(53n!+NnZaqlO31xyw)PyteY$ALj z+YC3Un;?hF#ANXx6oB7DZ?cny(?W~^=hKCkQl#lG=&3Wr!6b?8F@Dp6v}VQ^ESY>D zUX&uFLt>&3$C?}Ypk(pvEHq}9q^+`3Ix4U6AFHt_eriSCM1#4I?=v}Vh7r?yVtV4S1x5jxis91$mK7uhL%V=$g^a!2J!pHzni+9OQINqGcO4thup|J+MJ3Mf{ z25auhpV9A(_4**=DQykUsTyIQI97~BW$zZ8=Pop<#kxYR(9w9rjWUzJkQcyH<_{WU zoYBIySgo^ui@t;U^wGnxVx31P(iA4ZS*oqzLw)&e@;UzZ@Il}YQ%Mx+kXP_T zR!eOx8r3nK;gu9G{D8Pbp~YH6<%9msB2z~hz$TOh~^8}pL8kR zjic|gWM0I3A{ViSm#{2aMcaUWcfn(2b2V2L!W0@?Ft)YWh9C*c_;2K5j z7OLDSU5u>Guh1ezi~9wQM3a2v?qXOGt)vUsCccC86?O>2pqcC^^Tu+Q84tLYyE{saWNyG=Xhq73?->LoNKdx{*6XC!68rbQ}aDiQD=A*amiq ztwv_&II9DhioiZyprmdEpRT)jGF{+GBftVmkr!G4mN5b(;RJsdglHOC&x0A&9Bdhd z_Bw%@l*3UgpIkvk$O&hyZP31Dv#(hV_0ZnXaoOM!)mC@}de%?K22FaKr?HE)kp2vx zf^NJmnTzWy5zb*QXiXOK0(Oc$U|#ky{|21lILO+UxC$p?Rtnal^3xzn`%s@T1U%*> zyUy+)V|a+HCYf+&D?$XmT@3G*3+ zdx;HPt1l?r1ilPjYU{uz#)3mMAi2B)_v6lTuz~y%9OX)&ZwnHNkz*9edeE5V@Z`v3 z7uX0;E4YG@Y_bqcZTCOt?##D?@t8208}W2xl85ke+5#Ro4r9IoRB07xQzqEf-$W?_ z{9+tg%op+{d@~=-YgtRUvDpx*mS90YLTA|>_v>k%OlFcK%jCf@xFskL{u7sc3FuHE_r!8 zgZIX(CtAw}rE>94$SBY@5q@!x(aL&$9wT`G@5}gnL?oLZ#%m|Cy6553=KS=PMHZs=$1@pMQmOJ;$~O@YoxOr-#Ei zEE{Ki1QMj6^%%q>9{z%5JPkZ&KR&C)@qcHht1$uvpm#qZvdu8M`w+=)Ah379@pRsa zj39~VSpjCM-TW-}rQnnvP`}H#l2hElJ7UGw6I}5_%xeny8NPd!@aJldZ?3kOEzG0| z`k07X&IHmI^sf-tor1Gp#PcP?@1qXqT!B&C$Zzm7IIoBt>wa8iE=D~Y+b1BRXE0Lp z&`*N?-}|SpGcji8(T*R)s|)Fjb_%fn8IaSEP+e_ literal 0 HcmV?d00001 diff --git a/examples/demos/maroon/content/audio/catch-action.wav b/examples/demos/maroon/content/audio/catch-action.wav new file mode 100644 index 0000000000000000000000000000000000000000..3e22124abf576cfcd7481f80ef1db3e6af4b4607 GIT binary patch literal 13274 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 literal 0 HcmV?d00001 diff --git a/examples/demos/maroon/content/audio/catch.wav b/examples/demos/maroon/content/audio/catch.wav new file mode 100644 index 0000000000000000000000000000000000000000..d3eade87f82ad8198f2f01880a64deae6b516004 GIT binary patch literal 8638 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 O@(z7?+2!a1{LHHaVe2%l!&56+>%t8ip#W3 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
cV0 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 Zp!&iIMT(=WEz~gsOfeRQRr+qX{{ydHS%?4t literal 0 HcmV?d00001 diff --git a/examples/demos/maroon/content/gfx/text-3.png b/examples/demos/maroon/content/gfx/text-3.png new file mode 100644 index 0000000000000000000000000000000000000000..47523f55b8ae0c36f229c9c0233c59696d86cfc1 GIT binary patch literal 5063 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 literal 0 HcmV?d00001 diff --git a/examples/demos/maroon/content/gfx/text-blank.png b/examples/demos/maroon/content/gfx/text-blank.png new file mode 100644 index 0000000000000000000000000000000000000000..4a687b24dc15c937fab3c408bf3549e571d9bcca GIT binary patch literal 1326 zcmeAS@N?(olHy`uVBq!ia0y~yU~~ZD2OMlbkt;o0T!55hiEBhjaDG}zd16s2gJVj5 zQmTSyZen_BP->&{VBr3Q{Di>3feRZBY}g>6p`oCmp+P|GTB+9YT2IT5%A8ZBnwl9uq^rK4 z?v-S>5C8xG000000000000000000000000000000003}Ae!>KsQ1s9;+(-zzhb&z2GM(& zh@OqMFIO#y06*{xCdkH+;=cCf*U0n!>C4}kFNi_-e(TGp$Vj|p$^qv1853j`zcTS$ z2ot}{f^*N95D>ui#IL{gXF$J)5e*kA8je55BWHX=B8oUwB?Gq{AHbO}9Qjs~Viw?W~4q`-Ug zw9$R!f@5rduNI1p+^Fs6m9FQDq)wBcQ*qqV2Ge@I>VXOnz}+atHVYW1Kv9aV%Uonw zt=yLG00Jlj1yDLfPVHcaxxoq%L;!c=Xc3T^hl=5O63vz?wcj8z6wBz?;)XI_VZsraZXK)^O7M z%oKxf8X~n$Io{%TqruPIqh7gR00BId08Smw^@^-!l9m<@N0g3qb}a#H5(fY^66h}R zerxsHAV}3p0+=KE9nO2x1LyOGc0vGQ^K`BYOlOBE(e}i~X{9J5mbon&ZwV=9EAnp7 zQ8VJviLgbW*giL#mZyDpn}}#g`|cJ2>`0~4VGeLvBoPt;NRhUkYpv`x#5PSzc;VOeMnJgwh2>ah-Ms+dbD_2nlum_mSW% zsY~ri6OA}D0RzoFQDjpE&@2SGR*!vyg0y@d?uZ`|;1LMj-#5(PeDR276Ci-*yD(gl z&XHcSS~{FKSEPN`gG}ME?ZY8LzQ}CJylOGBL6Kovpc@G*5CQIr(jxd0CtruSx-18c6Zk_nQrFKX?|0H-D3<7vC5&TOm`zpqe2+Yi@-4{ff z?TiTC4sPF0q-~?Q2KI?-mA78GUA}sCp6L)k01tur8pc1hKs6EP-2=tTT>lX$fVM}! z#`PP&ZoTu=GgTP6Ok(k-ZQxsgPzeLlZBoxp_+LX`C$wQ&&(1U8y{(und}#Py;Po+& zf=$0K!ideB=-A$BGF?%1Er#61`tw7f-+__i8CqK!c%HdeE!JNJPZ1&I7_dr@-74|@ zi51hvhhP&l0DO>vv?AgI00000000000000000000000000001hkIBCR3;^QFS;@O_ R^w$6Y002ovPDHLkV1hUou}=U1 literal 0 HcmV?d00001 diff --git a/examples/demos/maroon/content/gfx/text-go.png b/examples/demos/maroon/content/gfx/text-go.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc26f71fc49d0fd1f14a8a0ed6eb6ee18751032 GIT binary patch literal 4230 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 afXnxQu6@N3^4lK^fTO*OUBwCC`2PbuO(Pfp literal 0 HcmV?d00001 diff --git a/examples/demos/maroon/content/gfx/wave.png b/examples/demos/maroon/content/gfx/wave.png new file mode 100644 index 0000000000000000000000000000000000000000..f97426c4e78e0b2d562bfa43e1ffc42aa7a07488 GIT binary patch literal 2763 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 literal 0 HcmV?d00001 diff --git a/examples/demos/maroon/content/logic.js b/examples/demos/maroon/content/logic.js new file mode 100644 index 0000000..0d7bade --- /dev/null +++ b/examples/demos/maroon/content/logic.js @@ -0,0 +1,264 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +.pragma library // Shared game state +.import QtQuick 2.0 as QQ + +// Game Stuff +var gameState // Local reference +function getGameState() { return gameState; } + +var towerData = [ // Name and cost, stats are in the delegate per instance + { "name": "Melee", "cost": 20 }, + { "name": "Ranged", "cost": 50 }, + { "name": "Bomb", "cost": 75 }, + { "name": "Factory", "cost": 25 } +] + +var waveBaseData = [300, 290, 280, 270, 220, 180, 160, 80, 80, 80, 30, 30, 30, 30]; +var waveData = []; + +var towerComponents = new Array(towerData.length); +var mobComponent = Qt.createComponent("mobs/MobBase.qml"); + +function endGame() +{ + gameState.gameRunning = false; + gameState.gameOver = true; + for (var i = 0; i < gameState.cols; i++) { + for (var j = 0; j < gameState.rows; j++) { + if (gameState.towers[towerIdx(i, j)]) { + gameState.towers[towerIdx(i, j)].destroy(); + gameState.towers[towerIdx(i, j)] = null; + } + } + for (var j in gameState.mobs[i]) + gameState.mobs[i][j].destroy(); + gameState.mobs[i].splice(0,gameState.mobs[i].length); //Leaves queue reusable + } +} + +function startGame(gameCanvas) +{ + waveData = new Array(); + for (var i in waveBaseData) + waveData[i] = waveBaseData[i]; + gameState.freshState(); + for (var i = 0; i < gameCanvas.cols; i++) { + for (var j = 0; j < gameCanvas.rows; j++) + gameState.towers[towerIdx(i, j)] = null; + gameState.mobs[i] = new Array(); + } + gameState.towers[towerIdx(0, 0)] = newTower(3, 0, 0);//Start with a starfish in the corner + gameState.gameRunning = true; + gameState.gameOver = false; +} + +function newGameState(gameCanvas) +{ + for (var i = 0; i < towerComponents.length; i++) { + towerComponents[i] = Qt.createComponent("towers/" + towerData[i].name + ".qml"); + if (towerComponents[i].status == QQ.Component.Error) { + gameCanvas.errored = true; + gameCanvas.errorString += "Loading Tower " + towerData[i].name + "\n" + (towerComponents[i].errorString()); + console.log(towerComponents[i].errorString()); + } + } + gameState = gameCanvas; + gameState.freshState(); + gameState.towers = new Array(gameCanvas.rows * gameCanvas.cols); + gameState.mobs = new Array(gameCanvas.cols); + return gameState; +} + +function row(y) +{ + return Math.floor(y / gameState.squareSize); +} + +function col(x) +{ + return Math.floor(x / gameState.squareSize); +} + +function towerIdx(x, y) +{ + return y + (x * gameState.rows); +} + +function newMob(col) +{ + var ret = mobComponent.createObject(gameState.canvas, + { "col" : col, + "speed" : (Math.min(2.0, 0.10 * (gameState.waveNumber + 1))), + "y" : gameState.canvas.height }); + gameState.mobs[col].push(ret); + return ret; +} + +function newTower(type, row, col) +{ + var ret = towerComponents[type].createObject(gameState.canvas); + ret.row = row; + ret.col = col; + ret.fireCounter = ret.rof; + ret.spawn(); + return ret; +} + +function buildTower(type, x, y) +{ + if (gameState.towers[towerIdx(x,y)] != null) { + if (type <= 0) { + gameState.towers[towerIdx(x,y)].sell(); + gameState.towers[towerIdx(x,y)] = null; + } + } else { + if (gameState.coins < towerData[type - 1].cost) + return; + gameState.towers[towerIdx(x, y)] = newTower(type - 1, y, x); + gameState.coins -= towerData[type - 1].cost; + } +} + +function killMob(col, mob) +{ + if (!mob) + return; + var idx = gameState.mobs[col].indexOf(mob); + if (idx == -1 || !mob.hp) + return; + mob.hp = 0; + mob.die(); + gameState.mobs[col].splice(idx,1); +} + +function killTower(row, col) +{ + var tower = gameState.towers[towerIdx(col, row)]; + if (!tower) + return; + tower.hp = 0; + tower.die(); + gameState.towers[towerIdx(col, row)] = null; +} + +function tick() +{ + if (!gameState.gameRunning) + return; + + // Spawn + gameState.waveProgress += 1; + var i = gameState.waveProgress; + var j = 0; + while (i > 0 && j < waveData.length) + i -= waveData[j++]; + if ( i == 0 ) // Spawn a mob + newMob(Math.floor(Math.random() * gameState.cols)); + if ( j == waveData.length ) { // Next Wave + gameState.waveNumber += 1; + gameState.waveProgress = 0; + var waveModifier = 10; // Constant governing how much faster the next wave is to spawn (not fish speed) + for (var k in waveData ) // Slightly faster + if (waveData[k] > waveModifier) + waveData[k] -= waveModifier; + } + + // Towers Attack + for (var j in gameState.towers) { + var tower = gameState.towers[j]; + if (tower == null) + continue; + if (tower.fireCounter > 0) { + tower.fireCounter -= 1; + continue; + } + var column = tower.col; + for (var k in gameState.mobs[column]) { + var conflict = gameState.mobs[column][k]; + if (conflict.y <= gameState.canvas.height && conflict.y + conflict.height > tower.y + && conflict.y - ((tower.row + 1) * gameState.squareSize) < gameState.squareSize * tower.range) { // In Range + tower.fire(); + tower.fireCounter = tower.rof; + conflict.hit(tower.damage); + } + } + + // Income + if (tower.income) { + gameState.coins += tower.income; + tower.fire(); + tower.fireCounter = tower.rof; + } + } + + // Mobs move + for (var i = 0; i < gameState.cols; i++) { + for (var j = 0; j < gameState.mobs[i].length; j++) { + var mob = gameState.mobs[i][j]; + var newPos = gameState.mobs[i][j].y - gameState.mobs[i][j].speed; + if (newPos < 0) { + gameState.lives -= 1; + killMob(i, mob); + if (gameState.lives <= 0) + endGame(); + continue; + } + var conflict = gameState.towers[towerIdx(i, row(newPos))]; + if (conflict != null) { + if (mob.y < conflict.y + gameState.squareSize) + gameState.mobs[i][j].y += gameState.mobs[i][j].speed * 10; // Moved inside tower, now hurry back out + if (mob.fireCounter > 0) { + mob.fireCounter--; + } else { + gameState.mobs[i][j].fire(); + conflict.hp -= mob.damage; + if (conflict.hp <= 0) + killTower(conflict.row, conflict.col); + mob.fireCounter = mob.rof; + } + } else { + gameState.mobs[i][j].y = newPos; + } + } + } + +} diff --git a/examples/demos/maroon/content/mobs/MobBase.qml b/examples/demos/maroon/content/mobs/MobBase.qml new file mode 100644 index 0000000..0f7df83 --- /dev/null +++ b/examples/demos/maroon/content/mobs/MobBase.qml @@ -0,0 +1,262 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import "../logic.js" as Logic +import ".." + +Item { + id: container + property string name: "Fish" + property int col: 0 + property real hp: 3 + property real damage: 1 + property real speed: 0.25 + property int rof: 30 //In ticks + property int fireCounter: 0 + property bool dying: false + width: parent ? parent.squareSize : 0 + height: parent ? parent.squareSize : 0 + x: col * width + z: 1001 + function fire() { } + + function die() { + if (dying) + return; + dying = true; + bubble.jumpTo("burst"); + if (fishSprite.currentSprite == "front") + fishSprite.jumpTo(Math.random() > 0.5 ? "left" : "right" ); + fishSwim.start(); + Logic.gameState.score += 1; + killedSound.play(); + bubble.scale = 0.9 + destroy(350); + } + + function inked() { + if (hp > 0) + ink.jumpTo("dirty"); + } + + function hit(dmg) { + hp -= dmg; + + if (hp <= 0) + Logic.killMob(col, container); + } + + Component.onCompleted: spawnSound.play() + + SoundEffect { + id: spawnSound + source: "../audio/catch.wav" + } + SoundEffect { + id: killedSound + source: "../audio/catch-action.wav" + } + + SpriteSequence { + id: fishSprite + width: 64 + height: 64 + interpolate: false + goalSprite: "" + + Sprite { + name: "left" + source: "../gfx/mob-idle.png" + frameWidth: 64 + frameHeight: 64 + frameCount: 1 + frameDuration: 800 + frameDurationVariation: 400 + to: { "front" : 1 } + } + + Sprite { + name: "front" + source: "../gfx/mob-idle.png" + frameCount: 1 + frameX: 64 + frameWidth: 64 + frameHeight: 64 + frameDuration: 800 + frameDurationVariation: 400 + to: { "left" : 1, "right" : 1 } + } + + Sprite { + name: "right" + source: "../gfx/mob-idle.png" + frameCount: 1 + frameX: 128 + frameWidth: 64 + frameHeight: 64 + frameDuration: 800 + frameDurationVariation: 400 + to: { "front" : 1 } + } + + + Sprite { //WORKAROUND: This prevents the triggering of a rendering error which is currently under investigation. + name: "dummy" + source: "../gfx/melee-idle.png" + frameCount: 8 + frameWidth: 64 + frameHeight: 64 + frameX: 0 + frameDuration: 200 + } + + NumberAnimation on x { + id: fishSwim + running: false + property bool goingLeft: fishSprite.currentSprite == "right" + to: goingLeft ? -360 : 360 + duration: 300 + } + } + + SpriteSequence { + id: bubble + width: 64 + height: 64 + scale: 0.4 + (0.2 * hp) + interpolate: false + goalSprite: "" + + Behavior on scale { + NumberAnimation { duration: 150; easing.type: Easing.OutBack } + } + + Sprite { + name: "big" + source: "../gfx/catch.png" + frameCount: 1 + to: { "burst" : 0 } + } + + Sprite { + name: "burst" + source: "../gfx/catch-action.png" + frameCount: 3 + frameX: 64 + frameDuration: 200 + } + + Sprite { //WORKAROUND: This prevents the triggering of a rendering error which is currently under investigation. + name: "dummy" + source: "../gfx/melee-idle.png" + frameCount: 8 + frameWidth: 64 + frameHeight: 64 + frameX: 0 + frameDuration: 200 + } + SequentialAnimation on width { + loops: Animation.Infinite + NumberAnimation { from: width * 1; to: width * 1.1; duration: 800; easing.type: Easing.InOutQuad } + NumberAnimation { from: width * 1.1; to: width * 1; duration: 1000; easing.type: Easing.InOutQuad } + } + SequentialAnimation on height { + loops: Animation.Infinite + NumberAnimation { from: height * 1; to: height * 1.15; duration: 1200; easing.type: Easing.InOutQuad } + NumberAnimation { from: height * 1.15; to: height * 1; duration: 1000; easing.type: Easing.InOutQuad } + } + } + + SpriteSequence { + id: ink + width: 64 + height: 64 + scale: bubble.scale + goalSprite: "" + + Sprite { + name: "clean" + source: "../gfx/projectile-action.png" + frameCount: 1 + frameX: 0 + frameWidth: 64 + frameHeight: 64 + } + Sprite { + name: "dirty" + source: "../gfx/projectile-action.png" + frameCount: 3 + frameX: 64 + frameWidth: 64 + frameHeight: 64 + frameDuration: 150 + to: {"clean":1} + } + + Sprite { //WORKAROUND: This prevents the triggering of a rendering error which is currently under investigation. + name: "dummy" + source: "../gfx/melee-idle.png" + frameCount: 8 + frameWidth: 64 + frameHeight: 64 + frameX: 0 + frameDuration: 200 + } + SequentialAnimation on width { + loops: Animation.Infinite + NumberAnimation { from: width * 1; to: width * 1.1; duration: 800; easing.type: Easing.InOutQuad } + NumberAnimation { from: width * 1.1; to: width * 1; duration: 1000; easing.type: Easing.InOutQuad } + } + SequentialAnimation on height { + loops: Animation.Infinite + NumberAnimation { from: height * 1; to: height * 1.15; duration: 1200; easing.type: Easing.InOutQuad } + NumberAnimation { from: height * 1.15; to: height * 1; duration: 1000; easing.type: Easing.InOutQuad } + } + + } + + SequentialAnimation on x { + loops: Animation.Infinite + NumberAnimation { from: x; to: x - 5; duration: 900; easing.type: Easing.InOutQuad } + NumberAnimation { from: x - 5; to: x; duration: 900; easing.type: Easing.InOutQuad } + } +} + diff --git a/examples/demos/maroon/content/towers/Bomb.qml b/examples/demos/maroon/content/towers/Bomb.qml new file mode 100644 index 0000000..db3fe30 --- /dev/null +++ b/examples/demos/maroon/content/towers/Bomb.qml @@ -0,0 +1,133 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import "../logic.js" as Logic +import ".." + +TowerBase { + id: container + hp: 10 + range: 0.4 + rof: 10 + property real detonationRange: 2.5 + + function fire() { + sound.play() + sprite.jumpTo("shoot") + animDelay.start() + } + + function finishFire() { + var sCol = Math.max(0, col - 1) + var eCol = Math.min(Logic.gameState.cols - 1, col + 1) + var killList = new Array() + for (var i = sCol; i <= eCol; i++) { + for (var j = 0; j < Logic.gameState.mobs[i].length; j++) + if (Math.abs(Logic.gameState.mobs[i][j].y - container.y) < Logic.gameState.squareSize * detonationRange) + killList.push(Logic.gameState.mobs[i][j]) + while (killList.length > 0) + Logic.killMob(i, killList.pop()) + } + Logic.killTower(row, col); + } + + Timer { + id: animDelay + running: false + interval: shootState.frameCount * shootState.frameDuration + onTriggered: finishFire() + } + + function die() + { + destroy() // No blink, because we usually meant to die + } + + SoundEffect { + id: sound + source: "../audio/bomb-action.wav" + } + + SpriteSequence { + id: sprite + width: 64 + height: 64 + interpolate: false + goalSprite: "" + + Sprite { + name: "idle" + source: "../gfx/bomb-idle.png" + frameCount: 4 + frameDuration: 800 + } + + Sprite { + id: shootState + name: "shoot" + source: "../gfx/bomb-action.png" + frameCount: 6 + frameDuration: 155 + to: { "dying" : 1 } // So that if it takes a frame to clean up, it is on the last frame of the explosion + } + + Sprite { + name: "dying" + source: "../gfx/bomb-action.png" + frameCount: 1 + frameX: 64 * 5 + frameWidth: 64 + frameHeight: 64 + frameDuration: 155 + } + + SequentialAnimation on x { + loops: Animation.Infinite + NumberAnimation { from: x; to: x + 4; duration: 900; easing.type: Easing.InOutQuad } + NumberAnimation { from: x + 4; to: x; duration: 900; easing.type: Easing.InOutQuad } + } + SequentialAnimation on y { + loops: Animation.Infinite + NumberAnimation { from: y; to: y - 4; duration: 900; easing.type: Easing.InOutQuad } + NumberAnimation { from: y - 4; to: y; duration: 900; easing.type: Easing.InOutQuad } + } + } +} diff --git a/examples/demos/maroon/content/towers/Factory.qml b/examples/demos/maroon/content/towers/Factory.qml new file mode 100644 index 0000000..cacd7c6 --- /dev/null +++ b/examples/demos/maroon/content/towers/Factory.qml @@ -0,0 +1,114 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import "../logic.js" as Logic +import ".." + +TowerBase { + id: container + rof: 160 + income: 5 + SpriteSequence { + id: sprite + width: 64 + height: 64 + interpolate: false + goalSprite: "" + + Sprite { + name: "idle" + source: "../gfx/factory-idle.png" + frameCount: 4 + frameDuration: 200 + } + + Sprite { + name: "action" + source: "../gfx/factory-action.png" + frameCount: 4 + frameDuration: 90 + to: { "idle" : 1 } + } + + SequentialAnimation on x { + loops: Animation.Infinite + NumberAnimation { from: x; to: x + 4; duration: 900; easing.type: Easing.InOutQuad } + NumberAnimation { from: x + 4; to: x; duration: 900; easing.type: Easing.InOutQuad } + } + SequentialAnimation on y { + loops: Animation.Infinite + NumberAnimation { from: y; to: y - 4; duration: 900; easing.type: Easing.InOutQuad } + NumberAnimation { from: y - 4; to: y; duration: 900; easing.type: Easing.InOutQuad } + } + } + + SoundEffect { + id: actionSound + source: "../audio/factory-action.wav" + } + + function fire() { + actionSound.play() + sprite.jumpTo("action") + coinLaunch.start() + } + + function spawn() { + coin.target = Logic.gameState.mapToItem(container, 240, -32) + } + + Image { + id: coin + property var target: { "x" : 0, "y" : 0 } + source: "../gfx/currency.png" + visible: false + } + + SequentialAnimation { + id: coinLaunch + PropertyAction { target: coin; property: "visible"; value: true } + ParallelAnimation { + NumberAnimation { target: coin; property: "x"; from: 16; to: coin.target.x } + NumberAnimation { target: coin; property: "y"; from: 16; to: coin.target.y } + } + PropertyAction { target: coin; property: "visible"; value: false } + } +} diff --git a/examples/demos/maroon/content/towers/Melee.qml b/examples/demos/maroon/content/towers/Melee.qml new file mode 100644 index 0000000..e087cd0 --- /dev/null +++ b/examples/demos/maroon/content/towers/Melee.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import ".." + +TowerBase { + hp: 4 + range: 0.1 + damage: 1 + rof: 40 + income: 0 + + SpriteSequence { + id: sprite + width: 64 + height: 64 + interpolate: false + goalSprite: "" + + Sprite { + name: "idle" + source: "../gfx/melee-idle.png" + frameCount: 8 + frameDuration: 250 + } + + Sprite { + name: "shoot" + source: "../gfx/melee-action.png" + frameCount: 2 + frameDuration: 200 + to: { "idle" : 1 } + } + } + + function fire() { + shootSound.play() + sprite.jumpTo("shoot") + } + + SoundEffect { + id: shootSound + source: "../audio/melee-action.wav" + } +} diff --git a/examples/demos/maroon/content/towers/Ranged.qml b/examples/demos/maroon/content/towers/Ranged.qml new file mode 100644 index 0000000..1f9da39 --- /dev/null +++ b/examples/demos/maroon/content/towers/Ranged.qml @@ -0,0 +1,128 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import "../logic.js" as Logic +import ".." + +TowerBase { + id: container + hp: 2 + range: 6 + damage: 0 // By projectile + rof: 40 + income: 0 + property var targetMob + property real realDamage: 1 + function fire() { + proj.x = 32 - proj.width / 2 + proj.y = 0 + targetMob = Logic.gameState.mobs[col][0] + projAnim.to = targetMob.y - container.y -10 + projAnim.start() + shootSound.play() + sprite.jumpTo("shoot") + } + + Image { + id: proj + y: 1000 + SequentialAnimation on y { + id: projAnim + running: false + property real to: 1000 + SmoothedAnimation { + to: projAnim.to + velocity: 400 + } + ScriptAction { + script: { + if (targetMob && targetMob.hit) { + targetMob.hit(realDamage) + targetMob.inked() + projSound.play() + } + } + } + PropertyAction { + value: 1000; + } + } + source: "../gfx/projectile.png" + } + + SoundEffect { + id: shootSound + source: "../audio/shooter-action.wav" + } + SoundEffect { + id: projSound + source: "../audio/projectile-action.wav" + } + + SpriteSequence { + id: sprite + width: 64 + height: 64 + interpolate: false + goalSprite: "" + + Sprite { + name: "idle" + source: "../gfx/shooter-idle.png" + frameCount: 4 + frameDuration: 250 + } + + Sprite { + name: "shoot" + source: "../gfx/shooter-action.png" + frameCount: 5 + frameDuration: 90 + to: { "idle" : 1 } + } + + SequentialAnimation on x { + loops: Animation.Infinite + NumberAnimation { from: x; to: x - 4; duration: 900; easing.type: Easing.InOutQuad } + NumberAnimation { from: x - 4; to: x; duration: 900; easing.type: Easing.InOutQuad } + } + } +} diff --git a/examples/demos/maroon/content/towers/TowerBase.qml b/examples/demos/maroon/content/towers/TowerBase.qml new file mode 100644 index 0000000..bafa874 --- /dev/null +++ b/examples/demos/maroon/content/towers/TowerBase.qml @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Item { + property real hp: 1 + property real range: 0 + property real damage: 0 + property int rof: 100 + property int fireCounter: 0 + property int income: 0 + property int row: 0 + property int col: 0 + + width: parent ? parent.squareSize : 0 + height: parent ? parent.squareSize : 0 + //This is how it is placed on the gameboard, do not modify/animate the X/Y/Z of a TowerBase please + x: col * width + y: row * height + z: 1000 + + function fire() { } + function spawn() { } //After all game properties are set + function die() { stdDeath.start(); destroy(1000); } + function sell() { destroy(); } + + SequentialAnimation on opacity { + id: stdDeath + running: false + loops: 2 + NumberAnimation { from: 1; to: 0; } + NumberAnimation { from: 0; to: 1; } + } +} diff --git a/examples/demos/maroon/main.cpp b/examples/demos/maroon/main.cpp new file mode 100644 index 0000000..84eb4e3 --- /dev/null +++ b/examples/demos/maroon/main.cpp @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "../../shared/shared.h" +DECLARATIVE_EXAMPLE_MAIN(maroon) diff --git a/examples/demos/maroon/maroon.pro b/examples/demos/maroon/maroon.pro new file mode 100644 index 0000000..32d1e43 --- /dev/null +++ b/examples/demos/maroon/maroon.pro @@ -0,0 +1,9 @@ +TEMPLATE = app + +QT += qml quick +SOURCES += main.cpp + +target.path = $$[QT_INSTALL_EXAMPLES]/qtdeclarative/demos/maroon +qml.files = maroon.qml content +qml.path = $$[QT_INSTALL_EXAMPLES]/qtdeclarative/demos/maroon +INSTALLS += target qml diff --git a/examples/demos/maroon/maroon.qdoc b/examples/demos/maroon/maroon.qdoc new file mode 100644 index 0000000..1b30033 --- /dev/null +++ b/examples/demos/maroon/maroon.qdoc @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** GNU Free Documentation License +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms +** and conditions contained in a signed written agreement between you +** and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \title QML Demos - Maroon in Trouble + \example demos/maroon + \brief This is an example game written in QML. + \image qml-maroon-demo-icon.png + + The Maroon in Trouble game demonstrates some of the UI effects that QtQuick provides to + make UIs more visually rich. It take a simple tower defense game and then jazzes it up with + animated sprites, particle effects, and sound effects (if the QtMultimedia module is available). + + The game also demonstrates the extensibility of QML, by making it easy to add more types of tower + for the player to build. Advanced QML users should be able to play around with adding additional + types of towers or mobs. + +*/ + diff --git a/examples/demos/maroon/maroon.qml b/examples/demos/maroon/maroon.qml new file mode 100644 index 0000000..c3b736b --- /dev/null +++ b/examples/demos/maroon/maroon.qml @@ -0,0 +1,239 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Particles 2.0 +import "content" +import "content/logic.js" as Logic + +Item { + id: root + width: 320 + height: 480 + property var gameState: Logic.newGameState(canvas); + property bool passedSplash: false + + Image { + source:"content/gfx/background.png" + anchors.bottom: view.bottom + + ParticleSystem { + id: particles + } + + ImageParticle { + id: bubble + anchors.fill: parent + system: particles + source: "content/gfx/catch.png" + opacity: 0.25 + smooth: true + } + Wander { + system: particles + anchors.fill: parent + xVariance: 25; + pace: 25; + } + + Emitter { + id: fire + system: particles + + width: parent.width + height: 150 + anchors.bottom: parent.bottom + anchors.bottomMargin: 3 + startTime: 15000 + + emitRate: 2 + lifeSpan: 15000 + + acceleration: PointDirection{ y: -6; xVariation: 2; yVariation: 2 } + + size: 24 + sizeVariation: 16 + } + + } + + Column { + id: view + y: -(height - 480) + width: 320 + + GameOverScreen { gameCanvas: canvas } + + Item { + id: canvasArea + width: 320 + height: 480 + + Row { + height: childrenRect.height + Image { + id: wave + y: 30 + source:"content/gfx/wave.png" + } + Image { + y: 30 + source:"content/gfx/wave.png" + } + NumberAnimation on x { from: 0; to: -(wave.width); duration: 16000; loops: Animation.Infinite } + SequentialAnimation on y { + loops: Animation.Infinite + NumberAnimation { from: y - 2; to: y + 2; duration: 1600; easing.type: Easing.InOutQuad } + NumberAnimation { from: y + 2; to: y - 2; duration: 1600; easing.type: Easing.InOutQuad } + } + } + + Row { + opacity: 0.5 + Image { + id: wave2 + y: 25 + source: "content/gfx/wave.png" + } + Image { + y: 25 + source: "content/gfx/wave.png" + } + NumberAnimation on x { from: -(wave2.width); to: 0; duration: 32000; loops: Animation.Infinite } + SequentialAnimation on y { + loops: Animation.Infinite + NumberAnimation { from: y + 2; to: y - 2; duration: 1600; easing.type: Easing.InOutQuad } + NumberAnimation { from: y - 2; to: y + 2; duration: 1600; easing.type: Easing.InOutQuad } + } + } + + Image { + source: "content/gfx/sunlight.png" + opacity: 0.02 + y: 0 + anchors.horizontalCenter: parent.horizontalCenter + transformOrigin: Item.Top + SequentialAnimation on rotation { + loops: Animation.Infinite + NumberAnimation { from: -10; to: 10; duration: 8000; easing.type: Easing.InOutSine } + NumberAnimation { from: 10; to: -10; duration: 8000; easing.type: Easing.InOutSine } + } + } + + Image { + source: "content/gfx/sunlight.png" + opacity: 0.04 + y: 20 + anchors.horizontalCenter: parent.horizontalCenter + transformOrigin: Item.Top + SequentialAnimation on rotation { + loops: Animation.Infinite + NumberAnimation { from: 10; to: -10; duration: 8000; easing.type: Easing.InOutSine } + NumberAnimation { from: -10; to: 10; duration: 8000; easing.type: Easing.InOutSine } + } + } + + Image { + source: "content/gfx/grid.png" + opacity: 0.5 + } + + GameCanvas { + id: canvas + anchors.bottom: parent.bottom + anchors.bottomMargin: 20 + x: 32 + focus: true + } + + InfoBar { anchors.bottom: canvas.top; anchors.bottomMargin: 6; width: parent.width } + + //3..2..1..go + Timer { + id: countdownTimer + interval: 1000 + running: root.countdown < 5 + repeat: true + onTriggered: root.countdown++ + } + Repeater { + model: ["content/gfx/text-blank.png", "content/gfx/text-3.png", "content/gfx/text-2.png", "content/gfx/text-1.png", "content/gfx/text-go.png"] + delegate: Image { + visible: root.countdown <= index + opacity: root.countdown == index ? 0.5 : 0.1 + scale: root.countdown >= index ? 1.0 : 0.0 + source: modelData + Behavior on opacity { NumberAnimation {} } + Behavior on scale { NumberAnimation {} } + } + } + } + + NewGameScreen { + onStartButtonClicked: root.passedSplash = true + } + } + + property int countdown: 10 + Timer { + id: gameStarter + interval: 4000 + running: false + repeat: false + onTriggered: Logic.startGame(canvas); + } + + states: [ + State { + name: "gameOn"; when: gameState.gameOver == false && passedSplash + PropertyChanges { target: view; y: -(height - 960) } + StateChangeScript { script: root.countdown = 0; } + PropertyChanges { target: gameStarter; running: true } + }, + State { + name: "gameOver"; when: gameState.gameOver == true + PropertyChanges { target: view; y: 0 } + } + ] + + transitions: Transition { + NumberAnimation { properties: "x,y"; duration: 1200; easing.type: Easing.OutQuad } + } +} diff --git a/examples/demos/maroon/maroon.qmlproject b/examples/demos/maroon/maroon.qmlproject new file mode 100644 index 0000000..7526661 --- /dev/null +++ b/examples/demos/maroon/maroon.qmlproject @@ -0,0 +1,16 @@ +import QmlProject 1.1 + +Project { + mainFile: "maroon.qml" + + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } +} -- 1.7.2.5