From a129444bb0156c936900dbd2f12bd9f427ff366c Mon Sep 17 00:00:00 2001 From: Qt by Nokia Date: Wed, 27 Apr 2011 14:13:26 +0200 Subject: Initial import from qtquick2. Branched from the monolithic repo, Qt qtquick2 branch, at commit a4a585d2ee907746682846ae6e8a48e19deef469 --- .../plasmapatrol/PlasmaPatrol.qmlproject | 18 + demos/declarative/plasmapatrol/TODO | 10 + .../plasmapatrol/content/BlasterHardpoint.qml | 133 +++++++ demos/declarative/plasmapatrol/content/Button.qml | 66 ++++ .../plasmapatrol/content/CannonHardpoint.qml | 97 ++++++ .../declarative/plasmapatrol/content/ChoiceBox.qml | 105 ++++++ demos/declarative/plasmapatrol/content/Cruiser.qml | 146 ++++++++ demos/declarative/plasmapatrol/content/Frigate.qml | 114 ++++++ .../declarative/plasmapatrol/content/Hardpoint.qml | 112 ++++++ .../plasmapatrol/content/HelpScreens.qml | 268 ++++++++++++++ .../plasmapatrol/content/LaserHardpoint.qml | 108 ++++++ .../plasmapatrol/content/PlasmaPatrolParticles.qml | 173 +++++++++ .../plasmapatrol/content/SequentialLoader.qml | 54 +++ demos/declarative/plasmapatrol/content/Ship.qml | 113 ++++++ demos/declarative/plasmapatrol/content/Sloop.qml | 108 ++++++ .../plasmapatrol/content/pics/TitleText.png | Bin 0 -> 1109 bytes .../plasmapatrol/content/pics/blur-circle2.png | Bin 0 -> 3627 bytes .../plasmapatrol/content/pics/blur-circle3.png | Bin 0 -> 5148 bytes .../plasmapatrol/content/pics/finalfrontier.png | Bin 0 -> 695061 bytes .../plasmapatrol/content/pics/meteor.png | Bin 0 -> 83169 bytes .../plasmapatrol/content/pics/meteor_explo.png | Bin 0 -> 81528 bytes .../plasmapatrol/content/pics/nullRock.png | Bin 0 -> 140 bytes .../plasmapatrol/content/pics/particle.png | Bin 0 -> 861 bytes .../declarative/plasmapatrol/content/pics/star.png | Bin 0 -> 1550 bytes .../plasmapatrol/content/pics/star2.png | Bin 0 -> 6507 bytes .../plasmapatrol/content/pics/star3.png | Bin 0 -> 4602 bytes demos/declarative/plasmapatrol/plasmapatrol.qml | 386 +++++++++++++++++++++ .../samegame/SamegameCore/BoomBlock.qml | 36 +- demos/declarative/samegame/SamegameCore/Button.qml | 2 +- demos/declarative/samegame/SamegameCore/Dialog.qml | 7 +- .../samegame/SamegameCore/pics/blueStar.png | Bin 278 -> 0 bytes .../samegame/SamegameCore/pics/greenStar.png | Bin 273 -> 0 bytes .../samegame/SamegameCore/pics/particle.png | Bin 0 -> 861 bytes .../samegame/SamegameCore/pics/redStar.png | Bin 274 -> 0 bytes .../samegame/SamegameCore/pics/star.png | Bin 262 -> 0 bytes .../declarative/samegame/SamegameCore/samegame.js | 43 ++- demos/declarative/samegame/samegame.qml | 35 +- demos/declarative/shadereffects/Slider.qml | 93 +++++ demos/declarative/shadereffects/face-smile.png | Bin 0 -> 15408 bytes demos/declarative/shadereffects/qt-logo.png | Bin 0 -> 13923 bytes demos/declarative/shadereffects/shader-demo.qml | 295 ++++++++++++++++ 41 files changed, 2494 insertions(+), 28 deletions(-) create mode 100644 demos/declarative/plasmapatrol/PlasmaPatrol.qmlproject create mode 100644 demos/declarative/plasmapatrol/TODO create mode 100644 demos/declarative/plasmapatrol/content/BlasterHardpoint.qml create mode 100644 demos/declarative/plasmapatrol/content/Button.qml create mode 100644 demos/declarative/plasmapatrol/content/CannonHardpoint.qml create mode 100644 demos/declarative/plasmapatrol/content/ChoiceBox.qml create mode 100644 demos/declarative/plasmapatrol/content/Cruiser.qml create mode 100644 demos/declarative/plasmapatrol/content/Frigate.qml create mode 100644 demos/declarative/plasmapatrol/content/Hardpoint.qml create mode 100644 demos/declarative/plasmapatrol/content/HelpScreens.qml create mode 100644 demos/declarative/plasmapatrol/content/LaserHardpoint.qml create mode 100644 demos/declarative/plasmapatrol/content/PlasmaPatrolParticles.qml create mode 100644 demos/declarative/plasmapatrol/content/SequentialLoader.qml create mode 100644 demos/declarative/plasmapatrol/content/Ship.qml create mode 100644 demos/declarative/plasmapatrol/content/Sloop.qml create mode 100644 demos/declarative/plasmapatrol/content/pics/TitleText.png create mode 100644 demos/declarative/plasmapatrol/content/pics/blur-circle2.png create mode 100644 demos/declarative/plasmapatrol/content/pics/blur-circle3.png create mode 100644 demos/declarative/plasmapatrol/content/pics/finalfrontier.png create mode 100644 demos/declarative/plasmapatrol/content/pics/meteor.png create mode 100644 demos/declarative/plasmapatrol/content/pics/meteor_explo.png create mode 100644 demos/declarative/plasmapatrol/content/pics/nullRock.png create mode 100644 demos/declarative/plasmapatrol/content/pics/particle.png create mode 100644 demos/declarative/plasmapatrol/content/pics/star.png create mode 100644 demos/declarative/plasmapatrol/content/pics/star2.png create mode 100644 demos/declarative/plasmapatrol/content/pics/star3.png create mode 100644 demos/declarative/plasmapatrol/plasmapatrol.qml delete mode 100644 demos/declarative/samegame/SamegameCore/pics/blueStar.png delete mode 100644 demos/declarative/samegame/SamegameCore/pics/greenStar.png create mode 100644 demos/declarative/samegame/SamegameCore/pics/particle.png delete mode 100644 demos/declarative/samegame/SamegameCore/pics/redStar.png delete mode 100644 demos/declarative/samegame/SamegameCore/pics/star.png create mode 100644 demos/declarative/shadereffects/Slider.qml create mode 100644 demos/declarative/shadereffects/face-smile.png create mode 100644 demos/declarative/shadereffects/qt-logo.png create mode 100644 demos/declarative/shadereffects/shader-demo.qml (limited to 'demos') diff --git a/demos/declarative/plasmapatrol/PlasmaPatrol.qmlproject b/demos/declarative/plasmapatrol/PlasmaPatrol.qmlproject new file mode 100644 index 0000000000..53f5ecb8d2 --- /dev/null +++ b/demos/declarative/plasmapatrol/PlasmaPatrol.qmlproject @@ -0,0 +1,18 @@ +/* File generated by QtCreator */ + +import QmlProject 1.0 + +Project { + /* Include .qml, .js, and image files from current directory and subdirectories */ + QmlFiles { + directory: "." + } + JavaScriptFiles { + directory: "." + } + ImageFiles { + directory: "." + } + /* List of plugin directories passed to QML runtime */ + // importPaths: [ "../exampleplugin" ] +} diff --git a/demos/declarative/plasmapatrol/TODO b/demos/declarative/plasmapatrol/TODO new file mode 100644 index 0000000000..ef9d21a73d --- /dev/null +++ b/demos/declarative/plasmapatrol/TODO @@ -0,0 +1,10 @@ +Realistic Tasks: +Particle explosions on ship death. +Better help text (both content and styled a little nicer). +Hardpoint help showing them firing across the screen. +Endless Demo Mode + +Nice-but-i-doubt-it-will-get-done Tasks: +Particle Text for the winner. +Particle-based buttons. +Single player mode that is challenges (known opponents) to master the game with and earn achievements (in addition to 'skirmish'). diff --git a/demos/declarative/plasmapatrol/content/BlasterHardpoint.qml b/demos/declarative/plasmapatrol/content/BlasterHardpoint.qml new file mode 100644 index 0000000000..8d36cdfb13 --- /dev/null +++ b/demos/declarative/plasmapatrol/content/BlasterHardpoint.qml @@ -0,0 +1,133 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 2.0 +import Qt.labs.particles 2.0 + +Item { + id: container + property variant target: {"y": -90, "x":12} + property Item targetObj: container + property Item hardpoint: container + property ParticleSystem system + property int blasts: 16 + property int bonusBlasts: 12 + property bool show: true + + width: 24 + height: 24 + TrailEmitter{ + id: visualization + particle: "blaster" + system: container.system + emitting: show + anchors.fill: parent + shape: Ellipse{} + speed: DirectedVector{ targetX: width/2; targetY: width/2; magnitude: -1; proportionalMagnitude: true} + particleDuration: 1000 + particlesPerSecond: 64 + + particleSize: 24 + particleSizeVariation: 24 + particleEndSize: 0 + } + + property int blastsLeft: 0 + function fireAt(targetArg, container){ + target = container.mapFromItem(targetArg, targetArg.width/2, targetArg.height/2); + targetObj = targetArg; + hardpoint = container; + blastsLeft = blasts; + rofTimer.repeat = true; + rofTimer.start(); + } + Timer{ + id: rofTimer + interval: 30;//Has to be greater than 1 frame or they stack up + running: false + repeat: false + onTriggered:{ + if(targetObj.hp <= 0) + return; + //TODO: calculate hit and damage at target, which must be a Ship + var hit; + if(blastsLeft >= bonusBlasts) + hit = Math.random() > targetObj.dodge; + else + hit = false; //purely aesthetic shots, because the damage isn't that fine grained + if(hit == true){ + switch(targetObj.shipType){ + case 1: hardpoint.damageDealt += 4; break; + case 2: hardpoint.damageDealt += 5; break; + case 3: hardpoint.damageDealt += 1; break; + default: hardpoint.damageDealt += 100; + } + } + blastVector.targetX = target.x; + blastVector.targetY = target.y; + if(!hit){//TODO: Actual targetVariation + blastVector.targetX += (128 * Math.random() - 64); + blastVector.targetY += (128 * Math.random() - 64); + } + emitter.burst(1); + blastsLeft--; + if(!blastsLeft) + rofTimer.repeat = false; + } + } + TrailEmitter{ + id: emitter + particle: "blaster" + emitting: false + system: container.system + anchors.centerIn: parent + + particleDuration: 1000 + particlesPerSecond: 16 + maxParticles: blasts + particleSize: 24 + particleEndSize:16 + particleSizeVariation: 8 + speed: DirectedVector{ + id: blastVector + targetX: target.x; targetY: target.y; magnitude: 1.1; proportionalMagnitude: true + } + } +} diff --git a/demos/declarative/plasmapatrol/content/Button.qml b/demos/declarative/plasmapatrol/content/Button.qml new file mode 100644 index 0000000000..0d810e3b75 --- /dev/null +++ b/demos/declarative/plasmapatrol/content/Button.qml @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 2.0 + +//TODO: Add particles to this component too +Rectangle{ + id: container + property alias text: txt.text + signal clicked + //color: "lightsteelblue" + gradient: Gradient{ + GradientStop{ position: 0.0; color: "lightsteelblue" } + GradientStop{ position: 1.0; color: "steelblue" } + } + height: 64 + radius: 16 + width: 128 + Text{ + id: txt + anchors.centerIn: parent + font.pixelSize: 24 + color: "white" + } + MouseArea{ + anchors.fill: parent + onClicked: container.clicked() + } +} diff --git a/demos/declarative/plasmapatrol/content/CannonHardpoint.qml b/demos/declarative/plasmapatrol/content/CannonHardpoint.qml new file mode 100644 index 0000000000..d9a307cc64 --- /dev/null +++ b/demos/declarative/plasmapatrol/content/CannonHardpoint.qml @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 2.0 +import Qt.labs.particles 2.0 + +Item { + id: container + property variant target: {"y": -90, "x":12} + property ParticleSystem system + property bool show: true + + width: 24 + height: 24 + TrailEmitter{ + id: visualization + particle: "cannon" + emitting: container.show + system: container.system + anchors.centerIn: parent + particleDuration: 2000 + particlesPerSecond: 1 + + particleSize: 4 + particleEndSize: 0 + } + + function fireAt(targetArg, hardpoint){ + target = container.mapFromItem(targetArg, targetArg.width/2, targetArg.height/2); + if(container.hp <= 0 || targetArg.hp <= 0) + return; + //TODO: calculate hit and damage at target, which must be a Ship + var hit = Math.random() > targetArg.dodge + if(hit){ + switch(targetArg.shipType){ + case 1: hardpoint.damageDealt += 8; break; + case 2: hardpoint.damageDealt += 10; break; + case 3: hardpoint.damageDealt += 16; break; + default: hardpoint.damageDealt += 1000; + } + } + emitter.burst(1); + } + TrailEmitter{ + id: emitter + particle: "cannon" + emitting: false + system: container.system + anchors.centerIn: parent + + particleDuration: 1000 + particlesPerSecond: 1 + particleSize: 8 + particleEndSize: 4 + speed: DirectedVector{ + id: blastVector + targetX: target.x; targetY: target.y; magnitude: 1.1; proportionalMagnitude: true + } + } +} diff --git a/demos/declarative/plasmapatrol/content/ChoiceBox.qml b/demos/declarative/plasmapatrol/content/ChoiceBox.qml new file mode 100644 index 0000000000..6bdc4288ee --- /dev/null +++ b/demos/declarative/plasmapatrol/content/ChoiceBox.qml @@ -0,0 +1,105 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 2.0 +import Qt.labs.particles 2.0 + +Item{ + id: container + width: 360 + height: 160 + property ParticleSystem system + Ship{ + id: nully + system: system + } + property Item target: nully + /* + Component.onCompleted:{ + container.target.shipType = 1 + container.target.gunType = 1 + } + */ + Row{ + anchors.horizontalCenter: parent.horizontalCenter + height: parent.height + spacing: 8 + Button{ + width: 80 + height: 80 + anchors.verticalCenter: parent.verticalCenter + text: "Cycle\nShip" + onClicked: { + var nextVal = container.target.shipType; + if(nextVal == 3) + nextVal = 1; + else + nextVal++; + container.target.shipType = nextVal; + } + } + Item{ + width: 128 + height: 128 + anchors.verticalCenter: parent.verticalCenter + Ship{ + hp: 20 + anchors.centerIn: parent + shipType: container.target.shipType + gunType: container.target.gunType + system: container.system + } + } + Button{ + width: 80 + height: 80 + anchors.verticalCenter: parent.verticalCenter + text: "Cycle\nGun" + onClicked: { + var nextVal = container.target.gunType; + if(nextVal == 3) + nextVal = 1; + else + nextVal++; + container.target.gunType = nextVal; + } + } + } +} diff --git a/demos/declarative/plasmapatrol/content/Cruiser.qml b/demos/declarative/plasmapatrol/content/Cruiser.qml new file mode 100644 index 0000000000..8b8073328e --- /dev/null +++ b/demos/declarative/plasmapatrol/content/Cruiser.qml @@ -0,0 +1,146 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 2.0 +import Qt.labs.particles 2.0 + +Item { + id: container + property int maxHP: 100 + property int hp: maxHP + property real initialDodge: 0.01 + property real dodge: initialDodge + onHpChanged: if(hp <= 0) target = container; + property ParticleSystem system//TODO: Ship abstraction + property Item target: container + property string shipParticle: "default"//Per team colors? + property int gunType: 0 + width: 128 + height: 128 + TrailEmitter{ + //TODO: Cooler would be an 'orbiting' affector + //TODO: On the subject, opacity and size should be grouped type 'overLife' if we can cram that in the particles + system: container.system + particle: container.shipParticle + anchors.centerIn: parent + width: 64 + height: 64 + shape: Ellipse{} + + particlesPerSecond: hp > 0 ? hp * 1 + 20 : 0 + particleDuration: 2400 + maxParticles: (maxHP * 1 + 20)*2.4 + + particleSize: 48 + particleSizeVariation: 16 + particleEndSize: 16 + + speed: AngleVector{angleVariation:360; magnitudeVariation: 32} + } + TrailEmitter{ + system: container.system + particle: "cruiserArmor" + anchors.fill: parent + shape: Ellipse{ fill: false } + emitting: hp>0 + + particlesPerSecond: 16 + particleDuration: 2000 + + particleSize: 48 + particleSizeVariation: 24 + + SpriteGoal{ + id: destructor + system: container.system + active: container.hp <=0 + anchors.fill: parent + particles: ["cruiserArmor"] + goalState: "death" +// jump: true + onceOff: true + } + } + + Timer{ + id: fireControl + property int next: Math.floor(Math.random() * 3) + 1 + interval: 800 + running: root.readySetGo + repeat: true + onTriggered:{ + if(next == 1){ + gun1.fireAt(container.target); + next = Math.floor(Math.random() * 3) + 1; + }else if(next == 2){ + gun2.fireAt(container.target); + next = Math.floor(Math.random() * 3) + 1; + }else if(next == 3){ + gun3.fireAt(container.target); + next = Math.floor(Math.random() * 3) + 1; + } + } + } + + Hardpoint{//TODO: Hardpoint abstraction + x: 112 - 12 - 8*2 + y: 128 - 12 - 12*2 + id: gun1 + system: container.system + show: hp > 0 + hardpointType: gunType + } + Hardpoint{ + x: 64 - 12 + y: 0 - 12 + 12*2 + id: gun2 + system: container.system + show: hp > 0 + hardpointType: gunType + } + Hardpoint{ + x: 16 - 12 + 8*2 + y: 128 - 12 - 12*2 + id: gun3 + system: container.system + show: hp > 0 + hardpointType: gunType + } +} diff --git a/demos/declarative/plasmapatrol/content/Frigate.qml b/demos/declarative/plasmapatrol/content/Frigate.qml new file mode 100644 index 0000000000..54f629268f --- /dev/null +++ b/demos/declarative/plasmapatrol/content/Frigate.qml @@ -0,0 +1,114 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 2.0 +import Qt.labs.particles 2.0 + +Item { + id: container + property int maxHP: 100 + property int hp: maxHP + property real initialDodge: 0.2 + property real dodge: initialDodge + onHpChanged: if(hp <= 0) target = container; + property ParticleSystem system//TODO: Ship abstraction + property Item target: container + property string shipParticle: "default"//Per team colors? + property int gunType: 0 + width: 128 + height: 128 + TrailEmitter{ + system: container.system + particle: "frigateShield" + anchors.centerIn: parent + particleSize: 92 + particlesPerSecond: 1 + particleDuration: 4800 + emitting: hp > 0 + } + TrailEmitter{ + system: container.system + particle: container.shipParticle + anchors.centerIn: parent + width: 64 + height: 16 + shape: Ellipse{} + + particleSize: 16 + particleSizeVariation: 8 + particleEndSize: 8 + particlesPerSecond: hp > 0 ? hp * 1 + 20 : 0 + particleDuration: 1200 + maxParticles: (maxHP * 1 + 20)*2 + } + Timer{ + id: fireControl + property int next: Math.floor(Math.random() * 2) + 1 + interval: 800 + running: root.readySetGo + repeat: true + onTriggered:{ + if(next == 1){ + gun1.fireAt(container.target); + next = Math.floor(Math.random() * 2) + 1; + }else if(next == 2){ + gun2.fireAt(container.target); + next = Math.floor(Math.random() * 2) + 1; + } + } + } + + Hardpoint{ + x: 128 - 32 - 12 + y: 64 - 12 + id: gun1 + system: container.system + show: hp > 0 + hardpointType: gunType + } + Hardpoint{ + x: 0 + 32 - 12 + y: 64 - 12 + id: gun2 + system: container.system + show: hp > 0 + hardpointType: gunType + } +} diff --git a/demos/declarative/plasmapatrol/content/Hardpoint.qml b/demos/declarative/plasmapatrol/content/Hardpoint.qml new file mode 100644 index 0000000000..184c750a79 --- /dev/null +++ b/demos/declarative/plasmapatrol/content/Hardpoint.qml @@ -0,0 +1,112 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 2.0 +import Qt.labs.particles 2.0 + +Item { + id: container + //ReflectiveProperties + //TransferredProperties + property variant target: {"y": -90, "x":12} + property ParticleSystem system + property bool show: true + property int hardpointType: 0 //default is pea shooter - always bad. + + property Item targetObj: null + property int damageDealt: 0 + onDamageDealtChanged: dealDamageTimer.start(); + Timer{ + id: dealDamageTimer + interval: 16 + running: false + repeat: false + onTriggered: {targetObj.hp -= damageDealt; damageDealt = 0;} + } + width: 24 + height: 24 + function fireAt(targetArg){//Each implement own + if(targetArg != null){ + hardpointLoader.item.fireAt(targetArg, container); + targetObj = targetArg; + } + } + Loader{ + id: hardpointLoader + sourceComponent: {switch(hardpointType){ + case 1: laserComponent; break; + case 2: blasterComponent; break; + case 3: cannonComponent; break; + default: emptyComponent; + }} + } + Component{ + id: laserComponent + LaserHardpoint{ + target: container.target + system: container.system + show: container.show + } + } + Component{ + id: blasterComponent + BlasterHardpoint{ + target: container.target + system: container.system + show: container.show + } + } + Component{ + id: cannonComponent + CannonHardpoint{ + target: container.target + system: container.system + show: container.show + } + } + Component{ + id: emptyComponent + Item { + function fireAt(obj){ + console.log("Firing null weapon. It hurts."); + } + } + } +} diff --git a/demos/declarative/plasmapatrol/content/HelpScreens.qml b/demos/declarative/plasmapatrol/content/HelpScreens.qml new file mode 100644 index 0000000000..8896aeee4a --- /dev/null +++ b/demos/declarative/plasmapatrol/content/HelpScreens.qml @@ -0,0 +1,268 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 2.0 +import Qt.labs.particles 2.0 + +SequentialLoader { + id: hLdr + signal exitDesired + Component.onCompleted: advance(); + ParticleSystem{ id: helpSystem } + PlasmaPatrolParticles{ sys: helpSystem } + pages: [ + Component{Item{ + id: story + Text{ + color: "white" + text: "Story" + font.pixelSize: 48 + } + /* + Flickable{ + y: 60 + width: 360 + height: 500 + contentHeight: txt1.height + contentWidth: 360//TODO: Less magic numbers? + */ + Text{ + id: txt1 + color: "white" + y: 60 + font.pixelSize: 18 + text: " +In a remote nebula, a race of energy beings formed and lived prosperous lives for millenia. Until the schism - when they became constantly at each other's energy-throats. War soon followed, crippling both sides, until a truce was formed. But while governments knew the desparate need for peace, the soldiers in the ion-field were still filled with rampant bloodlust. On the border, patrols are constantly engaging in minor skirmishes whenever they cross paths. + +You must select one such patrol unit for the border, heading into an inevitable skirmish, in Plasma Patrol: the game of energy being spaceship combat! + " + width: 360 + wrapMode: Text.WordWrap + } + // } + Button{ + x: 20 + y: 560 + height: 40 + width: 120 + text: "Next" + onClicked: hLdr.advance(); + } + Button{ + x: 220 + y: 560 + height: 40 + width: 120 + text: "Menu" + onClicked: hLdr.exitDesired(); + } + }}, + Component{Item{ + id: ships + Text{ + color: "white" + text: "Vessels" + font.pixelSize: 48 + } + Column{ + spacing: 16 + y: 60 + Row{ + height: 128 + Sloop{ + system: helpSystem + } + Text{ + text: "The nimble sloop" + color: "white" + font.pixelSize: 18 + } + } + Row{ + height: 128 + Frigate{ + system: helpSystem + } + Text{ + text: "The versitile shield frigate" + color: "white" + font.pixelSize: 18 + } + } + Row{ + height: 128 + Cruiser{ + system: helpSystem + } + Text{ + text: "The armored cruiser" + color: "white" + font.pixelSize: 18 + } + } + } + Button{ + x: 20 + y: 560 + height: 40 + width: 120 + text: "Next" + onClicked: hLdr.advance(); + } + Button{ + x: 220 + y: 560 + height: 40 + width: 120 + text: "Menu" + onClicked: hLdr.exitDesired(); + } + }}, + Component{Item{ + id: guns + Text{ + color: "white" + text: "Hardpoints" + font.pixelSize: 48 + } + Column{ + spacing: 16 + y: 60 + Row{ + height: 128 + LaserHardpoint{ + system: helpSystem + } + Text{ + text: "The laser hardpoint almost always hits the target, even the nimble sloop, but loses much of its potency against the frigate's shields" + width: 332 + wrapMode: Text.WordWrap + color: "white" + font.pixelSize: 18 + } + } + Row{ + height: 128 + BlasterHardpoint{ + system: helpSystem + } + Text{ + text: "The blaster passes right through the frigate's shields but loses much of its impact against the armor of the cruiser" + width: 332 + wrapMode: Text.WordWrap + color: "white" + font.pixelSize: 18 + } + } + Row{ + height: 128 + CannonHardpoint{ + system: helpSystem + } + Text{ + text: "The cannon has poor accuracy, often missing the nimble sloop, but can punch right through the armor of the cruiser" + width: 332 + wrapMode: Text.WordWrap + color: "white" + font.pixelSize: 18 + } + } + } + Button{ + x: 20 + y: 560 + height: 40 + width: 120 + text: "Next" + onClicked: hLdr.advance(); + } + Button{ + x: 220 + y: 560 + height: 40 + width: 120 + text: "Menu" + onClicked: hLdr.exitDesired(); + } + }}, + Component{Item{ + id: strategy + Text{ + color: "white" + text: "Strategy" + font.pixelSize: 48 + } + Flickable{ + y: 60 + width: 360 + height: 500 + contentHeight: txt1.height + contentWidth: 360//TODO: Less magic numbers? + Text{ + id: txt1 + color: "white" + font.pixelSize: 18 + text: " +Basic Strategy: Good luck, have fun - don't die. +More to come after thorough playtesting. + " + width: 360 + wrapMode: Text.WordWrap + } + } + Button{ + x: 20 + y: 560 + height: 40 + width: 120 + text: "Story" + onClicked: {hLdr.at=0; hLdr.advance();} + } + Button{ + x: 220 + y: 560 + height: 40 + width: 120 + text: "Menu" + onClicked: hLdr.exitDesired(); + } + }} + ] +} diff --git a/demos/declarative/plasmapatrol/content/LaserHardpoint.qml b/demos/declarative/plasmapatrol/content/LaserHardpoint.qml new file mode 100644 index 0000000000..d6d470a15b --- /dev/null +++ b/demos/declarative/plasmapatrol/content/LaserHardpoint.qml @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 2.0 +import Qt.labs.particles 2.0 + +Item { + id: container + property variant target: {"y": -90, "x":12} + property ParticleSystem system + property bool show: true + + width: 24 + height: 24 + TrailEmitter{ + id: visualization + particle: "laser" + system: container.system + anchors.fill: parent + emitting: container.show + shape: Ellipse{} + speed: DirectedVector{ targetX: width/2; targetY: width/2; magnitude: -1; proportionalMagnitude: true } + particleDuration: 1000 + particlesPerSecond: 64 + + particleSize: 24 + particleSizeVariation: 8 + particleEndSize: 8 + } + + function fireAt(targetArg, hardpoint){ + if(targetArg.hp <= 0) + return; + //TODO: calculate hit and damage at target, which must be a Ship + var offset = 0; + if(Math.random() < 0.99){ + switch(targetArg.shipType){ + case 1: hardpoint.damageDealt += 16; break; + case 2: hardpoint.damageDealt += 4; break; + case 3: hardpoint.damageDealt += 8; break; + default: hardpoint.damageDealt += 500; //Really effective against unregistered vessels + } + }else{//Misses with Lasers are really rare + offset = Math.random() * 100; + } + target = container.mapFromItem(targetArg, offset + targetArg.width/2, offset + targetArg.height/2); + emitter.pulse(0.10); + // console.log("Fire box: " + Math.min(container.width/2, target.x) + "," + Math.min(container.height/2, target.y) + " " + (Math.max(container.width/2, target.x) - Math.min(container.width/2, target.x)) + "," + (Math.max(container.height/2, target.y) - Math.min(container.height/2, target.y))); + } + TrailEmitter{ + id: emitter + particle: "laser" + emitting: false + system: container.system + x: Math.min(container.width/2, target.x); + width: Math.max(container.width/2, target.x) - x; + y: Math.min(container.height/2, target.y); + height: Math.max(container.height/2, target.y) - y; + shape: Line{ + mirrored: (emitter.y < 0 || emitter.x < 0) && !(emitter.y < 0 && emitter.x < 0 )//I just want XOR + } + + particleDuration: 1000 + particlesPerSecond: 8000 + maxParticles: 800 + particleSize: 16 + particleEndSize: 0 + + speed: PointVector{xVariation: 4; yVariation: 4} + } +} diff --git a/demos/declarative/plasmapatrol/content/PlasmaPatrolParticles.qml b/demos/declarative/plasmapatrol/content/PlasmaPatrolParticles.qml new file mode 100644 index 0000000000..7a6fcb96d0 --- /dev/null +++ b/demos/declarative/plasmapatrol/content/PlasmaPatrolParticles.qml @@ -0,0 +1,173 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 2.0 +import Qt.labs.particles 2.0 + +Item{ + property ParticleSystem sys + ColoredParticle{ + system: sys + particles: ["default"] + image: "pics/blur-circle3.png" + color: "#003A3A3A" + colorVariation: 0.1 + z: 0 + } + ColoredParticle{ + system: sys + particles: ["redTeam"] + image: "pics/blur-circle3.png" + color: "#0028060A" + colorVariation: 0.1 + z: 0 + } + ColoredParticle{ + system: sys + particles: ["greenTeam"] + image: "pics/blur-circle3.png" + color: "#0006280A" + colorVariation: 0.1 + z: 0 + } + ColoredParticle{ + system: sys + particles: ["blaster"] + image: "pics/star2.png" + //color: "#0F282406" + color: "#0F484416" + colorVariation: 0.2 + z: 2 + } + ColoredParticle{ + system: sys + particles: ["laser"] + image: "pics/star3.png" + //color: "#00123F68" + color: "#00428FF8" + colorVariation: 0.2 + z: 2 + } + ColoredParticle{ + system: sys + particles: ["cannon"] + image: "pics/particle.png" + color: "#80FFAAFF" + colorVariation: 0.1 + z: 2 + } + ColoredParticle{ + system: sys + particles: ["cannonCore"] + image: "pics/particle.png" + color: "#00666666" + colorVariation: 0.8 + z: 1 + } + ColoredParticle{ + system: sys + particles: ["cannonWake"] + image: "pics/star.png" + color: "#00CCCCCC" + colorVariation: 0.2 + z: 1 + } + ColoredParticle{ + system: sys + particles: ["frigateShield"] + image: "pics/blur-circle2.png" + color: "#00000000" + colorVariation: 0.05 + blueVariation: 0.5 + greenVariation: 0.1 + z: 3 + } + SpriteParticle{ + system: sys + particles: ["cruiserArmor"] + z: 1 + sprites:[Sprite{ + id: spinState + name: "spinning" + source: "pics/meteor.png" + frames: 35 + duration: 40 + to: {"death":0, "spinning":1} + },Sprite{ + name: "death" + source: "pics/meteor_explo.png" + frames: 22 + duration: 40 + to: {"null":1} + }, Sprite{ + name: "null" + source: "pics/nullRock.png" + frames: 1 + duration: 1000 + } + ] + } + FollowEmitter{ + system: sys + particle: "cannonWake" + follow: "cannon" + particlesPerParticlePerSecond: 64 + particleDuration: 600 + speed: AngleVector{ angleVariation: 360; magnitude: 48} + particleSize: 16 + particleEndSize: 8 + particleSizeVariation: 2 + emitting: true + width: 1000//XXX: Terrible hack + height: 1000 + } + FollowEmitter{ + system: sys + particle: "cannonCore" + follow: "cannon" + particlesPerParticlePerSecond: 256 + particleDuration: 128 + particleSize: 24 + particleEndSize: 8 + emitting: true + width: 1000//XXX: Terrible hack + height: 1000 + } +} diff --git a/demos/declarative/plasmapatrol/content/SequentialLoader.qml b/demos/declarative/plasmapatrol/content/SequentialLoader.qml new file mode 100644 index 0000000000..85a979b222 --- /dev/null +++ b/demos/declarative/plasmapatrol/content/SequentialLoader.qml @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 2.0 + +Item{ + id: container + //TODO: Somehow get particles into this? + property list pages + property Item cur: null + property int at: 0 + function advance(){ + if(cur != null) + cur.destroy(); + cur = pages[at++].createObject(container); + } +} diff --git a/demos/declarative/plasmapatrol/content/Ship.qml b/demos/declarative/plasmapatrol/content/Ship.qml new file mode 100644 index 0000000000..0ccea94221 --- /dev/null +++ b/demos/declarative/plasmapatrol/content/Ship.qml @@ -0,0 +1,113 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 2.0 +import Qt.labs.particles 2.0 + +Item { + id: me + //Reflective Properties + width: shipLoader.width + height: shipLoader.height + //Transfered Properties + property int hp: 100//shipLoader.item.maxHP + property real dodge: shipLoader.item.initialDodge + property ParticleSystem system + property int targetIdx: 0 + property Item target: targets[targetIdx] == undefined?null:targets[targetIdx] + Connections{ + target: me.target + onHpChanged: if(me.target.hp<=0) me.targetIdx++; + } + property list targets + property string shipParticle: "default"//Per team colors? + property int gunType: 0 + property int shipType: 0 + Component{ + id: sloopComp + Sloop{ + system: me.system + target: me.target + shipParticle: me.shipParticle + gunType: me.gunType + hp: me.hp + dodge: me.dodge + } + } + Component{ + id: frigateComp + Frigate{ + system: me.system + target: me.target + shipParticle: me.shipParticle + gunType: me.gunType + hp: me.hp + dodge: me.dodge + } + } + Component{ + id: cruiserComp + Cruiser{ + system: me.system + target: me.target + shipParticle: me.shipParticle + gunType: me.gunType + hp: me.hp + dodge: me.dodge + } + } + Component{ + id: dumbComp + Item{ + property int maxHP: 0 + property int initialDodge: 0 + } + } + Loader{ + id: shipLoader + sourceComponent:{ switch(shipType){ + case 1: sloopComp; break; + case 2: frigateComp; break; + case 3: cruiserComp; break; + default: dumbComp; + } + } + } +} diff --git a/demos/declarative/plasmapatrol/content/Sloop.qml b/demos/declarative/plasmapatrol/content/Sloop.qml new file mode 100644 index 0000000000..1b9bce7333 --- /dev/null +++ b/demos/declarative/plasmapatrol/content/Sloop.qml @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 2.0 +import Qt.labs.particles 2.0 + +Item { + id: container + property int maxHP: 100 + property int hp: maxHP + property real initialDodge: 0.5 + property real dodge: initialDodge + property int blinkInterval: 800 + onHpChanged: if(hp <= 0) target = container; + property ParticleSystem system//TODO: Ship abstraction + property Item target: container + property string shipParticle: "default"//Per team colors? + property int gunType: 0 + width: 128 + height: 128 + TrailEmitter{ + id: emitter + //TODO: Cooler would be an 'orbiting' affector + //TODO: On the subject, opacity and size should be grouped type 'overLife' if we can cram that in the particles + system: container.system + particle: container.shipParticle + shape: Ellipse{} + + particlesPerSecond: hp > 0 ? hp + 20 : 0 + particleDuration: blinkInterval + maxParticles: (maxHP + 20) + + acceleration: AngleVector{angleVariation: 360; magnitude: 8} + + particleSize: 24 + particleEndSize: 4 + particleSizeVariation: 8 + width: 16 + height: 16 + x: 64 + y: 64 + Behavior on x{NumberAnimation{duration:blinkInterval}} + Behavior on y{NumberAnimation{duration:blinkInterval}} + Timer{ + interval: blinkInterval + running: true + repeat: true + onTriggered: { + emitter.x = Math.random() * 48 + 32 + emitter.y = Math.random() * 48 + 32 + } + } + } + Hardpoint{ + anchors.centerIn: parent + id: gun2 + system: container.system + show: container.hp > 0 + hardpointType: gunType + } + Timer{ + id: fireControl + interval: 800 + running: root.readySetGo + repeat: true + onTriggered:{ + gun2.fireAt(container.target); + } + } + +} diff --git a/demos/declarative/plasmapatrol/content/pics/TitleText.png b/demos/declarative/plasmapatrol/content/pics/TitleText.png new file mode 100644 index 0000000000..dc3acebe39 Binary files /dev/null and b/demos/declarative/plasmapatrol/content/pics/TitleText.png differ diff --git a/demos/declarative/plasmapatrol/content/pics/blur-circle2.png b/demos/declarative/plasmapatrol/content/pics/blur-circle2.png new file mode 100644 index 0000000000..f7c9f3e98e Binary files /dev/null and b/demos/declarative/plasmapatrol/content/pics/blur-circle2.png differ diff --git a/demos/declarative/plasmapatrol/content/pics/blur-circle3.png b/demos/declarative/plasmapatrol/content/pics/blur-circle3.png new file mode 100644 index 0000000000..dbc39cb16e Binary files /dev/null and b/demos/declarative/plasmapatrol/content/pics/blur-circle3.png differ diff --git a/demos/declarative/plasmapatrol/content/pics/finalfrontier.png b/demos/declarative/plasmapatrol/content/pics/finalfrontier.png new file mode 100644 index 0000000000..2ba1815230 Binary files /dev/null and b/demos/declarative/plasmapatrol/content/pics/finalfrontier.png differ diff --git a/demos/declarative/plasmapatrol/content/pics/meteor.png b/demos/declarative/plasmapatrol/content/pics/meteor.png new file mode 100644 index 0000000000..e8c368aea7 Binary files /dev/null and b/demos/declarative/plasmapatrol/content/pics/meteor.png differ diff --git a/demos/declarative/plasmapatrol/content/pics/meteor_explo.png b/demos/declarative/plasmapatrol/content/pics/meteor_explo.png new file mode 100644 index 0000000000..4297245d49 Binary files /dev/null and b/demos/declarative/plasmapatrol/content/pics/meteor_explo.png differ diff --git a/demos/declarative/plasmapatrol/content/pics/nullRock.png b/demos/declarative/plasmapatrol/content/pics/nullRock.png new file mode 100644 index 0000000000..4076327a1a Binary files /dev/null and b/demos/declarative/plasmapatrol/content/pics/nullRock.png differ diff --git a/demos/declarative/plasmapatrol/content/pics/particle.png b/demos/declarative/plasmapatrol/content/pics/particle.png new file mode 100644 index 0000000000..5c83896d22 Binary files /dev/null and b/demos/declarative/plasmapatrol/content/pics/particle.png differ diff --git a/demos/declarative/plasmapatrol/content/pics/star.png b/demos/declarative/plasmapatrol/content/pics/star.png new file mode 100644 index 0000000000..0d592cfa87 Binary files /dev/null and b/demos/declarative/plasmapatrol/content/pics/star.png differ diff --git a/demos/declarative/plasmapatrol/content/pics/star2.png b/demos/declarative/plasmapatrol/content/pics/star2.png new file mode 100644 index 0000000000..bb55c44788 Binary files /dev/null and b/demos/declarative/plasmapatrol/content/pics/star2.png differ diff --git a/demos/declarative/plasmapatrol/content/pics/star3.png b/demos/declarative/plasmapatrol/content/pics/star3.png new file mode 100644 index 0000000000..636a25f480 Binary files /dev/null and b/demos/declarative/plasmapatrol/content/pics/star3.png differ diff --git a/demos/declarative/plasmapatrol/plasmapatrol.qml b/demos/declarative/plasmapatrol/plasmapatrol.qml new file mode 100644 index 0000000000..3a7b217618 --- /dev/null +++ b/demos/declarative/plasmapatrol/plasmapatrol.qml @@ -0,0 +1,386 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 2.0 +import Qt.labs.particles 2.0 +import "content" + +Rectangle { + id: root + property bool readySetGo: false + //Debugging + property int hits: 0 + property int misses: 0 + property real ratio: hits/(misses?misses:1) + //Move to JS file? + property Ship redVar1: Ship{shipType: 1; gunType: 1} + property Ship redVar2: Ship{shipType: 1; gunType: 2} + property Ship redVar3: Ship{shipType: 1; gunType: 3} + property Ship greenVar1: Ship{shipType: 3; gunType: 1} + property Ship greenVar2: Ship{shipType: 2; gunType: 2} + property Ship greenVar3: Ship{shipType: 1; gunType: 3} + property string winner: "0" + property int players: 0 + function aiSet(ship){ + ship.gunType = Math.floor(Math.random() * 3) + 1 + ship.shipType = Math.floor(Math.random() * 3) + 1 + } + + width: 360 + height: 600 + color: "black" + SequentialLoader{ + anchors.fill: parent + //General Children + Image{ + anchors.centerIn: parent + source: "content/pics/finalfrontier.png" + } + ParticleSystem{ + id: particles + } + PlasmaPatrolParticles{ sys: particles; z: 100 }//Renders all particles on the one plane + //Component parts + id: pageControl + Component.onCompleted: advance(); + pages:[ + Component{Item{ + id: menu + width: root.width + height: root.height + Column{ + anchors.verticalCenter: parent.verticalCenter + width: parent.width + spacing: 8 + Item{ + id: title + width: root.width + height: 240 + TrailEmitter{ + anchors.fill: parent + system: particles + emitting: true + particle: "default" + particlesPerSecond: 1200 + particleDuration: 1200 + shape: Mask{source:"content/pics/TitleText.png"} + particleSize: 16 + particleEndSize: 0 + particleSizeVariation: 8 + speed: AngleVector{angleVariation:360; magnitudeVariation: 6} + } + } + Button{ + text: "1P" + onClicked: {root.players = 1; pageControl.advance();} + anchors.horizontalCenter: parent.horizontalCenter + } + Button{ + text: "2P" + onClicked: {root.players = 2; pageControl.advance();} + anchors.horizontalCenter: parent.horizontalCenter + } + Button{ + text: "Demo" + anchors.horizontalCenter: parent.horizontalCenter + onClicked: {root.players = 0; + aiSet(redVar1); + aiSet(redVar2); + aiSet(redVar3); + aiSet(greenVar1); + aiSet(greenVar2); + aiSet(greenVar3); + pageControl.at = 5;//TODO: Not a magic number + pageControl.advance();} + } + Button{ + text: "Help" + anchors.horizontalCenter: parent.horizontalCenter + onClicked: { + pageControl.at = 7;//TODO: Not a magic number + pageControl.advance(); + } + } + Button{ + text: "Quit" + anchors.horizontalCenter: parent.horizontalCenter + onClicked: Qt.quit(); + } + } + }}, + Component{Item{ + id: p1Screen + z: 101 + width: root.width + height: root.height + Rectangle{ + anchors.fill: parent + color: "red" + } + Text{ + anchors.centerIn: parent + color: "white" + font.pixelSize: 64 + font.bold: true + text: "Player\n 1" + horizontalAlignment: Text.AlignHCenter + } + MouseArea{ + anchors.fill: parent + onClicked: pageControl.advance() + } + }}, + Component{Item{ + id: p1Choices + z: 3 + width: root.width + height: root.height + Rectangle{ + color: "black" + anchors.fill: parent + } + Column{ + spacing: 16 + width: root.width + anchors.horizontalCenter: parent.horizontalCenter + ChoiceBox{ + target: redVar1 + system: particles + } + ChoiceBox{ + target: redVar2 + system: particles + } + ChoiceBox{ + target: redVar3 + system: particles + } + Button{ + anchors.horizontalCenter: parent.horizontalCenter + text: "Next" + onClicked: { + if(root.players < 2){ + aiSet(greenVar1); + aiSet(greenVar2); + aiSet(greenVar3); + pageControl.at = 5;//TODO: Not a magic number + } + pageControl.advance(); + } + } + } + }}, + Component{Item{ + id: p2Screen + z: 101 + width: root.width + height: root.height + Rectangle{ + anchors.fill: parent + color: "green" + } + Text{ + anchors.centerIn: parent + color: "white" + font.pixelSize: 64 + font.bold: true + text: "Player\n 2" + horizontalAlignment: Text.AlignHCenter + } + MouseArea{ + anchors.fill: parent + onClicked: pageControl.advance() + } + }}, + Component{Item{ + id: p2Choices + z: 1 + width: root.width + height: root.height + Rectangle{ + color: "black" + anchors.fill: parent + } + Column{ + spacing: 16 + width: root.width + anchors.horizontalCenter: parent.horizontalCenter + ChoiceBox{ + target: greenVar1 + system: particles + } + ChoiceBox{ + target: greenVar2 + system: particles + } + ChoiceBox{ + target: greenVar3 + system: particles + } + Button{ + anchors.horizontalCenter: parent.horizontalCenter + text: "Next" + onClicked: pageControl.advance() + } + } + }}, + Component{Item{ + id: arena + width: root.width + height: root.height + z: 0 + Component.onCompleted: root.readySetGo = true + Component.onDestruction: root.readySetGo = false + property bool victory: redShip3.hp <= 0 || greenShip3.hp <=0 + onVictoryChanged: { + if(redShip3.hp <= 0){ + if(greenShip3.hp <= 0){ + root.winner = "1&2" + }else{ + root.winner = "2" + } + }else{ + root.winner = "1" + } + winTimer.start() + } + Timer{ + id: winTimer + interval: 1200 + repeat: false + running: false + onTriggered: pageControl.advance(); + } + Ship{ + id: redShip1 + shipParticle: "redTeam" + system: particles + x: 180-64 + y: 128 + shipType: redVar1.shipType + gunType: redVar1.gunType + targets: [greenShip1, greenShip2, greenShip3] + } + Ship{ + id: redShip2 + shipParticle: "redTeam" + system: particles + x: 0 + y: 0 + shipType: redVar2.shipType + gunType: redVar2.gunType + targets: [greenShip1, greenShip2, greenShip3] + } + Ship{ + id: redShip3 + shipParticle: "redTeam" + system: particles + x: 360-128 + y: 0 + shipType: redVar3.shipType + gunType: redVar3.gunType + targets: [greenShip1, greenShip2, greenShip3] + } + + Ship{ + id: greenShip1 + shipParticle: "greenTeam" + system: particles + x: 180-64 + y: 600 - 128 - 128 + shipType: greenVar1.shipType + gunType: greenVar1.gunType + targets: [redShip1, redShip2, redShip3] + } + Ship{ + id: greenShip2 + shipParticle: "greenTeam" + system: particles + x: 0 + y: 600-128 + shipType: greenVar2.shipType + gunType: greenVar2.gunType + targets: [redShip1, redShip2, redShip3] + } + Ship{ + id: greenShip3 + shipParticle: "greenTeam" + system: particles + x: 360 - 128 + y: 600 - 128 + shipType: greenVar3.shipType + gunType: greenVar3.gunType + targets: [redShip1, redShip2, redShip3] + } + }}, + Component{Item{ + id: winScreen + z: 101 + width: root.width + height: root.height + /* + Rectangle{ + anchors.fill: parent + color: "black" + } + */ + Text{//TODO: Particle Text? + anchors.fill: parent + color: "white" + font.pixelSize: 64 + font.bold: true + text: "Player " + root.winner + " wins!" + wrapMode: Text.WordWrap + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + MouseArea{ + anchors.fill: parent + onClicked: {pageControl.at = 0; pageControl.advance();} + } + }}, + Component{ + HelpScreens{ + onExitDesired: {pageControl.at = 0; pageControl.advance();} + } + } + ] + } +} diff --git a/demos/declarative/samegame/SamegameCore/BoomBlock.qml b/demos/declarative/samegame/SamegameCore/BoomBlock.qml index 009aeca2c6..3d11fb9df2 100644 --- a/demos/declarative/samegame/SamegameCore/BoomBlock.qml +++ b/demos/declarative/samegame/SamegameCore/BoomBlock.qml @@ -39,8 +39,8 @@ ** ****************************************************************************/ -import QtQuick 1.1 -import Qt.labs.particles 1.0 +import QtQuick 2.0 +import Qt.labs.particles 2.0 Item { id: block @@ -71,26 +71,28 @@ Item { Behavior on opacity { NumberAnimation { duration: 200 } } anchors.fill: parent } - - Particles { + TrailEmitter { id: particles - - width: 1; height: 1 - anchors.centerIn: parent - - emissionRate: 0 - lifeSpan: 700; lifeSpanDeviation: 600 - angle: 0; angleDeviation: 360; - velocity: 100; velocityDeviation: 30 - source: { + system: particleSystem + particle: { if(type == 0){ - "pics/redStar.png"; + "red"; } else if (type == 1) { - "pics/blueStar.png"; + "blue"; } else { - "pics/greenStar.png"; + "green"; } } + anchors.fill: parent + + speed: DirectedVector{targetX: block.width/2; targetY: block.height/2; magnitude: -60; magnitudeVariation: 60} + shape: Ellipse{fill:true} + emitting: false; + particleDuration: 700; particleDurationVariation: 100 + particlesPerSecond: 1000 + maxParticles: 100 //only fires 0.1s bursts (still 2x old number, ColoredParticle wants less than 16000 max though) + particleSize: 28 + particleEndSize: 14 } states: [ @@ -101,7 +103,7 @@ Item { State { name: "DeathState"; when: dying == true - StateChangeScript { script: particles.burst(50); } + StateChangeScript { script: particles.pulse(0.1); } PropertyChanges { target: img; opacity: 0 } StateChangeScript { script: block.destroy(1000); } } diff --git a/demos/declarative/samegame/SamegameCore/Button.qml b/demos/declarative/samegame/SamegameCore/Button.qml index b2b232ca8e..8bcca5b5d5 100644 --- a/demos/declarative/samegame/SamegameCore/Button.qml +++ b/demos/declarative/samegame/SamegameCore/Button.qml @@ -39,7 +39,7 @@ ** ****************************************************************************/ -import QtQuick 1.1 +import QtQuick 2.0 Rectangle { id: container diff --git a/demos/declarative/samegame/SamegameCore/Dialog.qml b/demos/declarative/samegame/SamegameCore/Dialog.qml index ecac475826..ee1b51006a 100644 --- a/demos/declarative/samegame/SamegameCore/Dialog.qml +++ b/demos/declarative/samegame/SamegameCore/Dialog.qml @@ -39,23 +39,26 @@ ** ****************************************************************************/ -import QtQuick 1.1 +import QtQuick 2.0 Rectangle { id: page property Item text: dialogText + property bool open: false signal closed signal opened function forceClose() { - if(page.opacity == 0) + if(!open) return; //already closed + page.open = false; page.closed(); page.opacity = 0; } function show(txt) { + page.open = true; page.opened(); dialogText.text = txt; page.opacity = 1; diff --git a/demos/declarative/samegame/SamegameCore/pics/blueStar.png b/demos/declarative/samegame/SamegameCore/pics/blueStar.png deleted file mode 100644 index ff9588f80a..0000000000 Binary files a/demos/declarative/samegame/SamegameCore/pics/blueStar.png and /dev/null differ diff --git a/demos/declarative/samegame/SamegameCore/pics/greenStar.png b/demos/declarative/samegame/SamegameCore/pics/greenStar.png deleted file mode 100644 index cd06854719..0000000000 Binary files a/demos/declarative/samegame/SamegameCore/pics/greenStar.png and /dev/null differ diff --git a/demos/declarative/samegame/SamegameCore/pics/particle.png b/demos/declarative/samegame/SamegameCore/pics/particle.png new file mode 100644 index 0000000000..5c83896d22 Binary files /dev/null and b/demos/declarative/samegame/SamegameCore/pics/particle.png differ diff --git a/demos/declarative/samegame/SamegameCore/pics/redStar.png b/demos/declarative/samegame/SamegameCore/pics/redStar.png deleted file mode 100644 index 0a4dffe583..0000000000 Binary files a/demos/declarative/samegame/SamegameCore/pics/redStar.png and /dev/null differ diff --git a/demos/declarative/samegame/SamegameCore/pics/star.png b/demos/declarative/samegame/SamegameCore/pics/star.png deleted file mode 100644 index defbde53ca..0000000000 Binary files a/demos/declarative/samegame/SamegameCore/pics/star.png and /dev/null differ diff --git a/demos/declarative/samegame/SamegameCore/samegame.js b/demos/declarative/samegame/SamegameCore/samegame.js index bb587bc6f3..4c5cbe5bb3 100755 --- a/demos/declarative/samegame/SamegameCore/samegame.js +++ b/demos/declarative/samegame/SamegameCore/samegame.js @@ -4,10 +4,11 @@ var maxColumn = 10; var maxRow = 15; var maxIndex = maxColumn*maxRow; var board = new Array(maxIndex); -var blockSrc = "SamegameCore/BoomBlock.qml"; +var blockSrc = "BoomBlock.qml"; var scoresURL = ""; var gameDuration; var component = Qt.createComponent(blockSrc); +var highScoreBar = 0; // Index function used instead of a 2D array function index(column, row) @@ -152,11 +153,15 @@ function victoryCheck() // Checks for game over if (deservesBonus || !(floodMoveCheck(0, maxRow - 1, -1))) { gameDuration = new Date() - gameDuration; - nameInputDialog.show("You won! Please enter your name: "); - nameInputDialog.initialWidth = nameInputDialog.text.width + 20; - if (nameInputDialog.name == "") - nameInputDialog.width = nameInputDialog.initialWidth; - nameInputDialog.text.opacity = 0; // Just a spacer + if(gameCanvas.score > highScoreBar){ + nameInputDialog.show("You won! Please enter your name: "); + nameInputDialog.initialWidth = nameInputDialog.text.width + 20; + if (nameInputDialog.name == "") + nameInputDialog.width = nameInputDialog.initialWidth; + nameInputDialog.text.opacity = 0; // Just a spacer + }else{ + dialog.show("You won!"); + } } } @@ -203,6 +208,30 @@ function createBlock(column,row) return true; } +function initHighScoreBar() +{ + if(scoresURL != "") + return true;//don't query remote scores + var db = openDatabaseSync( + "SameGameScores", + "1.0", + "Local SameGame High Scores", + 100 + ); + db.transaction( + function(tx) { + tx.executeSql('CREATE TABLE IF NOT EXISTS Scores(name TEXT, score NUMBER, gridSize TEXT, time NUMBER)'); + // Only show results for the current grid size + var rs = tx.executeSql('SELECT * FROM Scores WHERE gridSize = "' + + maxColumn + "x" + maxRow + '" ORDER BY score desc LIMIT 10'); + if(rs.rows.length < 10) + highScoreBar = 0; + else + highScoreBar = rs.rows.item(rs.rows.length - 1).score; + } + ); +} + function saveHighScore(name) { if (scoresURL != "") @@ -235,6 +264,8 @@ function saveHighScore(name) + rs.rows.item(i).score + ' points in ' + rs.rows.item(i).time + ' seconds.\n'; } + if(rs.rows.length == 10) + highScoreBar = rs.rows.item(9).score; dialog.show(r); } ); diff --git a/demos/declarative/samegame/samegame.qml b/demos/declarative/samegame/samegame.qml index ab64156278..0defdeec3c 100644 --- a/demos/declarative/samegame/samegame.qml +++ b/demos/declarative/samegame/samegame.qml @@ -39,13 +39,14 @@ ** ****************************************************************************/ -import QtQuick 1.1 +import QtQuick 2.0 +import Qt.labs.particles 2.0 import "SamegameCore" import "SamegameCore/samegame.js" as Logic Rectangle { id: screen - width: 490; height: 720 + width: 360; height: 640 property bool inAnotherDemo: false //Samegame often is just plonked straight into other demos SystemPalette { id: activePalette } @@ -74,6 +75,36 @@ Rectangle { anchors.fill: parent; onClicked: Logic.handleClick(mouse.x,mouse.y); } } + Item{ + ParticleSystem{ id: particleSystem; } + ColoredParticle { + system: particleSystem + particles: ["red"] + color: Qt.darker("red");//Actually want desaturated... + image: "SamegameCore/pics/particle.png" + colorVariation: 0.4 + alpha: 0.1 + } + ColoredParticle { + system: particleSystem + particles: ["green"] + color: Qt.darker("green");//Actually want desaturated... + image: "SamegameCore/pics/particle.png" + colorVariation: 0.4 + alpha: 0.1 + } + ColoredParticle { + system: particleSystem + particles: ["blue"] + color: Qt.darker("blue");//Actually want desaturated... + image: "SamegameCore/pics/particle.png" + colorVariation: 0.4 + alpha: 0.1 + } + id: aboveGameCanvas + anchors.fill: gameCanvas + z: gameCanvas.z + 1 + } } Dialog { id: dialog; anchors.centerIn: parent; z: 21 } diff --git a/demos/declarative/shadereffects/Slider.qml b/demos/declarative/shadereffects/Slider.qml new file mode 100644 index 0000000000..e31335d984 --- /dev/null +++ b/demos/declarative/shadereffects/Slider.qml @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Declarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Item { + property real value: bar.x / (foo.width - bar.width) + Item { + id: foo + width: parent.width - 4 + height: 6 + anchors.centerIn: parent + + Rectangle { + height: parent.height + anchors.left: parent.left + anchors.right: bar.horizontalCenter + color: "blue" + radius: 3 + } + Rectangle { + height: parent.height + anchors.left: bar.horizontalCenter + anchors.right: parent.right + color: "gray" + radius: 3 + } + Rectangle { + anchors.fill: parent + color: "transparent" + radius: 3 + border.width: 2 + border.color: "black" + } + + Rectangle { + id: bar + y: -7 + width: 20 + height: 20 + radius: 15 + color: "white" + border.width: 2 + border.color: "black" + MouseArea { + anchors.fill: parent + drag.target: parent + drag.axis: Drag.XAxis + drag.minimumX: 0 + drag.maximumX: foo.width - parent.width + } + } + } +} + diff --git a/demos/declarative/shadereffects/face-smile.png b/demos/declarative/shadereffects/face-smile.png new file mode 100644 index 0000000000..3d66d72578 Binary files /dev/null and b/demos/declarative/shadereffects/face-smile.png differ diff --git a/demos/declarative/shadereffects/qt-logo.png b/demos/declarative/shadereffects/qt-logo.png new file mode 100644 index 0000000000..7d3e97eb36 Binary files /dev/null and b/demos/declarative/shadereffects/qt-logo.png differ diff --git a/demos/declarative/shadereffects/shader-demo.qml b/demos/declarative/shadereffects/shader-demo.qml new file mode 100644 index 0000000000..1226064a5d --- /dev/null +++ b/demos/declarative/shadereffects/shader-demo.qml @@ -0,0 +1,295 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Declarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Image { + width: 640 + height: 360 + source: "../snake/content/pics/background.png" + + ShaderEffectSource { + id: theSource + sourceItem: theItem + smooth: true + } + + function saturate(x) { + return Math.min(Math.max(x, 0), 1) + } + + function sliderToColor(x) { + return Qt.rgba(saturate(Math.max(2 - 6 * x, 6 * x - 4)), + saturate(Math.min(6 * x, 4 - 6 * x)), + saturate(Math.min(6 * x - 2, 6 - 6 * x))) + } + + Grid { + anchors.centerIn: parent + columns: 3 + + Item { + id: theItem + width: 180 + height: 180 + ListView { + anchors.centerIn: parent + width: 160 + height: 140 + clip: true + snapMode: ListView.SnapOneItem + model: VisualItemModel { + Text { + width: 160 + height: 140 + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + font.pixelSize: 120 + font.family: "Times" + color: "blue" + text: "Qt" + } + Image { + width: 160 + height: 140 + source: "qt-logo.png" + smooth: true + } + Image { + width: 160 + height: 140 + source: "face-smile.png" + smooth: true + } + } + } + } + ShaderEffectItem { + width: 180 + height: 180 + property variant source: theSource + property real amplitude: 0.04 * wobbleSlider.value + property real frequency: 20 + property real time: 0 + NumberAnimation on time { loops: Animation.Infinite; from: 0; to: Math.PI * 2; duration: 600 } + fragmentShader: + "uniform highp float amplitude;" + + "uniform highp float frequency;" + + "uniform highp float time;" + + "uniform sampler2D source;" + + "varying highp vec2 qt_TexCoord0;" + + "void main() {" + + " highp vec2 p = sin(time + frequency * qt_TexCoord0);" + + " gl_FragColor = texture2D(source, qt_TexCoord0 + amplitude * vec2(p.y, -p.x));" + + "}" + Slider { + id: wobbleSlider + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + height: 40 + } + } + ShaderEffectItem { + width: 180 + height: 180 + property variant source: theSource + property variant shadow: ShaderEffectSource { + smooth: true + sourceItem: ShaderEffectItem { + width: theItem.width + height: theItem.height + property variant delta: Qt.size(0.0, 1.0 / height) + property variant source: ShaderEffectSource { + smooth: true + sourceItem: ShaderEffectItem { + width: theItem.width + height: theItem.height + property variant delta: Qt.size(1.0 / width, 0.0) + property variant source: theSource + fragmentShader: " + uniform sampler2D source; + uniform highp vec2 delta; + varying highp vec2 qt_TexCoord0; + void main() { + gl_FragColor = 0.0538 * texture2D(source, qt_TexCoord0 - 3.182 * delta) + + 0.3229 * texture2D(source, qt_TexCoord0 - 1.364 * delta) + + 0.2466 * texture2D(source, qt_TexCoord0) + + 0.3229 * texture2D(source, qt_TexCoord0 + 1.364 * delta) + + 0.0538 * texture2D(source, qt_TexCoord0 + 3.182 * delta); + }" + } + } + fragmentShader: " + uniform sampler2D source; + uniform highp vec2 delta; + varying highp vec2 qt_TexCoord0; + void main() { + gl_FragColor = 0.0538 * texture2D(source, qt_TexCoord0 - 3.182 * delta) + + 0.3229 * texture2D(source, qt_TexCoord0 - 1.364 * delta) + + 0.2466 * texture2D(source, qt_TexCoord0) + + 0.3229 * texture2D(source, qt_TexCoord0 + 1.364 * delta) + + 0.0538 * texture2D(source, qt_TexCoord0 + 3.182 * delta); + }" + } + } + property real angle: 0 + property variant offset: Qt.point(15.0 * Math.cos(angle), 15.0 * Math.sin(angle)) + NumberAnimation on angle { loops: Animation.Infinite; from: 0; to: Math.PI * 2; duration: 6000 } + property variant delta: Qt.size(offset.x / width, offset.y / height) + property real darkness: shadowSlider.value + fragmentShader: " + uniform highp vec2 offset; + uniform sampler2D source; + uniform sampler2D shadow; + uniform highp float darkness; + uniform highp vec2 delta; + varying highp vec2 qt_TexCoord0; + void main() { + lowp vec4 fg = texture2D(source, qt_TexCoord0); + lowp vec4 bg = texture2D(shadow, qt_TexCoord0 + delta); + gl_FragColor = fg + vec4(0., 0., 0., darkness * bg.a) * (1. - fg.a); + }" + Slider { + id: shadowSlider + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + height: 40 + } + } + ShaderEffectItem { + width: 180 + height: 180 + property variant source: theSource + property variant delta: Qt.size(0.5 / width, 0.5 / height) + fragmentShader: " + uniform sampler2D source; + uniform highp vec2 delta; + uniform highp float qt_Opacity; + varying highp vec2 qt_TexCoord0; + void main() { + lowp vec4 tl = texture2D(source, qt_TexCoord0 - delta); + lowp vec4 tr = texture2D(source, qt_TexCoord0 + vec2(delta.x, -delta.y)); + lowp vec4 bl = texture2D(source, qt_TexCoord0 - vec2(delta.x, -delta.y)); + lowp vec4 br = texture2D(source, qt_TexCoord0 + delta); + lowp vec4 gx = (tl + bl) - (tr + br); + lowp vec4 gy = (tl + tr) - (bl + br); + gl_FragColor.xyz = vec3(0.); + gl_FragColor.w = clamp(dot(sqrt(gx * gx + gy * gy), vec4(1.)), 0., 1.) * qt_Opacity; + }" + } + ShaderEffectItem { + width: 180 + height: 180 + property variant source: theSource + property color tint: sliderToColor(colorizeSlider.value) + fragmentShader: " + uniform sampler2D source; + uniform lowp vec4 tint; + uniform lowp float qt_Opacity; + varying highp vec2 qt_TexCoord0; + void main() { + lowp vec4 c = texture2D(source, qt_TexCoord0); + lowp float lo = min(min(c.x, c.y), c.z); + lowp float hi = max(max(c.x, c.y), c.z); + gl_FragColor = qt_Opacity * vec4(mix(vec3(lo), vec3(hi), tint.xyz), c.w); + }" + Slider { + id: colorizeSlider + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + height: 40 + } + } + ShaderEffectItem { + width: 180 + height: 180 + mesh: GridMesh { resolution: Qt.size(10, 10) } + property variant source: theSource + property real bend: 0 + property real minimize: 0 + property real side: genieSlider.value + SequentialAnimation on bend { + loops: Animation.Infinite + NumberAnimation { to: 1; duration: 700; easing.type: Easing.InOutSine } + PauseAnimation { duration: 1600 } + NumberAnimation { to: 0; duration: 700; easing.type: Easing.InOutSine } + PauseAnimation { duration: 1000 } + } + SequentialAnimation on minimize { + loops: Animation.Infinite + PauseAnimation { duration: 300 } + NumberAnimation { to: 1; duration: 700; easing.type: Easing.InOutSine } + PauseAnimation { duration: 1000 } + NumberAnimation { to: 0; duration: 700; easing.type: Easing.InOutSine } + PauseAnimation { duration: 1300 } + } + vertexShader: " + uniform highp mat4 qt_ModelViewProjectionMatrix; + uniform highp float bend; + uniform highp float minimize; + uniform highp float side; + uniform highp float width; + uniform highp float height; + attribute highp vec4 qt_Vertex; + attribute highp vec2 qt_MultiTexCoord0; + varying highp vec2 qt_TexCoord0; + void main() { + qt_TexCoord0 = qt_MultiTexCoord0; + highp vec4 pos = qt_Vertex; + pos.y = mix(qt_Vertex.y, height, minimize); + highp float t = pos.y / height; + t = (3. - 2. * t) * t * t; + pos.x = mix(qt_Vertex.x, side * width, t * bend); + gl_Position = qt_ModelViewProjectionMatrix * pos; + }" + Slider { + id: genieSlider + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + height: 40 + } + } + } +} -- cgit v1.2.3