summaryrefslogtreecommitdiffstats
path: root/basicsuite/qt5-launchpresentation/maroon/content
diff options
context:
space:
mode:
Diffstat (limited to 'basicsuite/qt5-launchpresentation/maroon/content')
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/BuildButton.qml90
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/GameCanvas.qml240
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/GameOverScreen.qml115
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/InfoBar.qml84
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/NewGameScreen.qml111
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/SoundEffect.qml53
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/audio/bomb-action.wavbin0 -> 20972 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/audio/catch-action.wavbin0 -> 13274 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/audio/catch.wavbin0 -> 8638 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/audio/currency.wavbin0 -> 15790 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/audio/factory-action.wavbin0 -> 4936 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/audio/melee-action.wavbin0 -> 17798 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/audio/projectile-action.wavbin0 -> 2562 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/audio/shooter-action.wavbin0 -> 27554 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/background.pngbin0 -> 5802 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb-action.pngbin0 -> 23974 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb-idle.pngbin0 -> 12238 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb.pngbin0 -> 4067 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/button-help.pngbin0 -> 8916 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/button-play.pngbin0 -> 13945 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/catch-action.pngbin0 -> 6760 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/catch.pngbin0 -> 4771 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/cloud.pngbin0 -> 3398 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/currency.pngbin0 -> 1889 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-bomb.pngbin0 -> 3751 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-factory.pngbin0 -> 3946 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-melee.pngbin0 -> 4392 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-pointer.pngbin0 -> 911 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-shooter.pngbin0 -> 3737 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog.pngbin0 -> 3362 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/factory-action.pngbin0 -> 22440 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/factory-idle.pngbin0 -> 12729 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/factory.pngbin0 -> 4138 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/grid.pngbin0 -> 2830 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/help.pngbin0 -> 38255 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/lifes.pngbin0 -> 1675 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/logo-bubble.pngbin0 -> 7706 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/logo-fish.pngbin0 -> 3477 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/logo.pngbin0 -> 18332 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/melee-action.pngbin0 -> 7797 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/melee-idle.pngbin0 -> 22832 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/melee.pngbin0 -> 4046 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/mob-idle.pngbin0 -> 6181 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/mob.pngbin0 -> 2391 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/points.pngbin0 -> 1561 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/projectile-action.pngbin0 -> 6257 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/projectile.pngbin0 -> 801 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/scores.pngbin0 -> 1535 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter-action.pngbin0 -> 18121 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter-idle.pngbin0 -> 11929 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter.pngbin0 -> 4137 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/sunlight.pngbin0 -> 248412 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/text-1.pngbin0 -> 2777 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/text-2.pngbin0 -> 4959 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/text-3.pngbin0 -> 5063 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/text-blank.pngbin0 -> 1326 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/text-gameover.pngbin0 -> 1515 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/text-go.pngbin0 -> 4230 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/gfx/wave.pngbin0 -> 2763 bytes
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/logic.js264
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/mobs/MobBase.qml262
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/towers/Bomb.qml133
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/towers/Factory.qml114
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/towers/Melee.qml83
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/towers/Ranged.qml128
-rw-r--r--basicsuite/qt5-launchpresentation/maroon/content/towers/TowerBase.qml72
66 files changed, 1749 insertions, 0 deletions
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/BuildButton.qml b/basicsuite/qt5-launchpresentation/maroon/content/BuildButton.qml
new file mode 100644
index 0000000..49641fc
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/BuildButton.qml
@@ -0,0 +1,90 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia Plc 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
+
+Item {
+ id: container
+ width: 64
+ height: 64
+ property alias source: img.source
+ property int index
+ property int row: 0
+ property int col: 0
+ property int towerType
+ property bool canBuild: true
+ property Item gameCanvas: parent.parent.parent
+ signal clicked()
+
+ Image {
+ id: img
+ opacity: (canBuild && gameCanvas.coins >= 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/basicsuite/qt5-launchpresentation/maroon/content/GameCanvas.qml b/basicsuite/qt5-launchpresentation/maroon/content/GameCanvas.qml
new file mode 100644
index 0000000..5e6e963
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/GameCanvas.qml
@@ -0,0 +1,240 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia Plc 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/basicsuite/qt5-launchpresentation/maroon/content/GameOverScreen.qml b/basicsuite/qt5-launchpresentation/maroon/content/GameOverScreen.qml
new file mode 100644
index 0000000..dfb439f
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/GameOverScreen.qml
@@ -0,0 +1,115 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia Plc 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 {
+ anchors.fill: parent
+ ImageParticle {
+ id: cloud
+ source: "gfx/cloud.png"
+ alphaVariation: 0.25
+ opacity: 0.25
+ }
+
+ Wander {
+ xVariance: 100;
+ pace: 1;
+ }
+
+ Emitter {
+ id: cloudLeft
+ 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
+ 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/basicsuite/qt5-launchpresentation/maroon/content/InfoBar.qml b/basicsuite/qt5-launchpresentation/maroon/content/InfoBar.qml
new file mode 100644
index 0000000..36303fc
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/InfoBar.qml
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia Plc 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/basicsuite/qt5-launchpresentation/maroon/content/NewGameScreen.qml b/basicsuite/qt5-launchpresentation/maroon/content/NewGameScreen.qml
new file mode 100644
index 0000000..495e3aa
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/NewGameScreen.qml
@@ -0,0 +1,111 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia Plc 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/basicsuite/qt5-launchpresentation/maroon/content/SoundEffect.qml b/basicsuite/qt5-launchpresentation/maroon/content/SoundEffect.qml
new file mode 100644
index 0000000..d286a39
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/SoundEffect.qml
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia Plc 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/basicsuite/qt5-launchpresentation/maroon/content/audio/bomb-action.wav b/basicsuite/qt5-launchpresentation/maroon/content/audio/bomb-action.wav
new file mode 100644
index 0000000..b334dc1
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/audio/bomb-action.wav
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/audio/catch-action.wav b/basicsuite/qt5-launchpresentation/maroon/content/audio/catch-action.wav
new file mode 100644
index 0000000..3e22124
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/audio/catch-action.wav
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/audio/catch.wav b/basicsuite/qt5-launchpresentation/maroon/content/audio/catch.wav
new file mode 100644
index 0000000..d3eade8
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/audio/catch.wav
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/audio/currency.wav b/basicsuite/qt5-launchpresentation/maroon/content/audio/currency.wav
new file mode 100644
index 0000000..0d9ef2c
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/audio/currency.wav
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/audio/factory-action.wav b/basicsuite/qt5-launchpresentation/maroon/content/audio/factory-action.wav
new file mode 100644
index 0000000..a2ace6c
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/audio/factory-action.wav
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/audio/melee-action.wav b/basicsuite/qt5-launchpresentation/maroon/content/audio/melee-action.wav
new file mode 100644
index 0000000..d325af4
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/audio/melee-action.wav
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/audio/projectile-action.wav b/basicsuite/qt5-launchpresentation/maroon/content/audio/projectile-action.wav
new file mode 100644
index 0000000..4e2284f
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/audio/projectile-action.wav
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/audio/shooter-action.wav b/basicsuite/qt5-launchpresentation/maroon/content/audio/shooter-action.wav
new file mode 100644
index 0000000..3e12b94
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/audio/shooter-action.wav
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/background.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/background.png
new file mode 100644
index 0000000..d548b93
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/background.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb-action.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb-action.png
new file mode 100644
index 0000000..42da5d7
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb-action.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb-idle.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb-idle.png
new file mode 100644
index 0000000..3bd62e2
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb-idle.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb.png
new file mode 100644
index 0000000..380da7d
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/bomb.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/button-help.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/button-help.png
new file mode 100644
index 0000000..aecebc1
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/button-help.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/button-play.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/button-play.png
new file mode 100644
index 0000000..6cdad6c
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/button-play.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/catch-action.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/catch-action.png
new file mode 100644
index 0000000..78ca9fe
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/catch-action.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/catch.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/catch.png
new file mode 100644
index 0000000..b7620fe
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/catch.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/cloud.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/cloud.png
new file mode 100644
index 0000000..d7c35f8
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/cloud.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/currency.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/currency.png
new file mode 100644
index 0000000..1571341
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/currency.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-bomb.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-bomb.png
new file mode 100644
index 0000000..708d916
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-bomb.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-factory.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-factory.png
new file mode 100644
index 0000000..d2e2a48
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-factory.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-melee.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-melee.png
new file mode 100644
index 0000000..069d18d
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-melee.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-pointer.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-pointer.png
new file mode 100644
index 0000000..9b51a09
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-pointer.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-shooter.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-shooter.png
new file mode 100644
index 0000000..af980ca
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog-shooter.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog.png
new file mode 100644
index 0000000..d528ba7
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/dialog.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/factory-action.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/factory-action.png
new file mode 100644
index 0000000..8981678
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/factory-action.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/factory-idle.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/factory-idle.png
new file mode 100644
index 0000000..a145582
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/factory-idle.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/factory.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/factory.png
new file mode 100644
index 0000000..bfb9f3f
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/factory.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/grid.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/grid.png
new file mode 100644
index 0000000..b595552
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/grid.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/help.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/help.png
new file mode 100644
index 0000000..4654e4c
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/help.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/lifes.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/lifes.png
new file mode 100644
index 0000000..135310b
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/lifes.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/logo-bubble.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/logo-bubble.png
new file mode 100644
index 0000000..136151c
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/logo-bubble.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/logo-fish.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/logo-fish.png
new file mode 100644
index 0000000..c41833a
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/logo-fish.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/logo.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/logo.png
new file mode 100644
index 0000000..787ac99
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/logo.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/melee-action.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/melee-action.png
new file mode 100644
index 0000000..c53873b
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/melee-action.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/melee-idle.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/melee-idle.png
new file mode 100644
index 0000000..621d9df
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/melee-idle.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/melee.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/melee.png
new file mode 100644
index 0000000..ab24015
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/melee.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/mob-idle.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/mob-idle.png
new file mode 100644
index 0000000..dedacc7
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/mob-idle.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/mob.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/mob.png
new file mode 100644
index 0000000..7569c35
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/mob.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/points.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/points.png
new file mode 100644
index 0000000..1d2386d
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/points.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/projectile-action.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/projectile-action.png
new file mode 100644
index 0000000..aa2e650
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/projectile-action.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/projectile.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/projectile.png
new file mode 100644
index 0000000..c25a0c3
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/projectile.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/scores.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/scores.png
new file mode 100644
index 0000000..af757fe
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/scores.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter-action.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter-action.png
new file mode 100644
index 0000000..08e7e30
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter-action.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter-idle.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter-idle.png
new file mode 100644
index 0000000..663098d
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter-idle.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter.png
new file mode 100644
index 0000000..d44401e
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/shooter.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/sunlight.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/sunlight.png
new file mode 100644
index 0000000..d1c7042
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/sunlight.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-1.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-1.png
new file mode 100644
index 0000000..3ea399c
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-1.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-2.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-2.png
new file mode 100644
index 0000000..934a481
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-2.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-3.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-3.png
new file mode 100644
index 0000000..47523f5
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-3.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-blank.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-blank.png
new file mode 100644
index 0000000..4a687b2
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-blank.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-gameover.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-gameover.png
new file mode 100644
index 0000000..4f53ef0
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-gameover.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-go.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-go.png
new file mode 100644
index 0000000..bfc26f7
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/text-go.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/gfx/wave.png b/basicsuite/qt5-launchpresentation/maroon/content/gfx/wave.png
new file mode 100644
index 0000000..f97426c
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/gfx/wave.png
Binary files differ
diff --git a/basicsuite/qt5-launchpresentation/maroon/content/logic.js b/basicsuite/qt5-launchpresentation/maroon/content/logic.js
new file mode 100644
index 0000000..dd76b7e
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/logic.js
@@ -0,0 +1,264 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia Plc 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/basicsuite/qt5-launchpresentation/maroon/content/mobs/MobBase.qml b/basicsuite/qt5-launchpresentation/maroon/content/mobs/MobBase.qml
new file mode 100644
index 0000000..d4ece66
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/mobs/MobBase.qml
@@ -0,0 +1,262 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia Plc 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/basicsuite/qt5-launchpresentation/maroon/content/towers/Bomb.qml b/basicsuite/qt5-launchpresentation/maroon/content/towers/Bomb.qml
new file mode 100644
index 0000000..00437f4
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/towers/Bomb.qml
@@ -0,0 +1,133 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia Plc 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/basicsuite/qt5-launchpresentation/maroon/content/towers/Factory.qml b/basicsuite/qt5-launchpresentation/maroon/content/towers/Factory.qml
new file mode 100644
index 0000000..b34a184
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/towers/Factory.qml
@@ -0,0 +1,114 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia Plc 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/basicsuite/qt5-launchpresentation/maroon/content/towers/Melee.qml b/basicsuite/qt5-launchpresentation/maroon/content/towers/Melee.qml
new file mode 100644
index 0000000..1b49a45
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/towers/Melee.qml
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia Plc 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/basicsuite/qt5-launchpresentation/maroon/content/towers/Ranged.qml b/basicsuite/qt5-launchpresentation/maroon/content/towers/Ranged.qml
new file mode 100644
index 0000000..33f3354
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/towers/Ranged.qml
@@ -0,0 +1,128 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia Plc 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/basicsuite/qt5-launchpresentation/maroon/content/towers/TowerBase.qml b/basicsuite/qt5-launchpresentation/maroon/content/towers/TowerBase.qml
new file mode 100644
index 0000000..5c71cb0
--- /dev/null
+++ b/basicsuite/qt5-launchpresentation/maroon/content/towers/TowerBase.qml
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** 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 Digia Plc 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; }
+ }
+}