Immense Particles Refactor Part C

Demos work again (also, the examples I missed).

Added an example launcher for particles.
This commit is contained in:
Alan Alpert 2011-06-08 13:19:56 +10:00
parent 984f21f18d
commit 1f88f2ceed
61 changed files with 489 additions and 137 deletions

View File

@ -40,7 +40,7 @@
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.0
import Qt.labs.particles 2.0 import QtQuick.Particles 2.0
Flipable { Flipable {
id: container id: container
@ -57,6 +57,8 @@ Flipable {
property int rating: 2 property int rating: 2
property variant prevScale: 1.0 property variant prevScale: 1.0
property int flipDuration: 1600
signal closed signal closed
transform: Rotation { transform: Rotation {
@ -137,94 +139,172 @@ Flipable {
slider.value = prevScale; slider.value = prevScale;
} }
if (inBackState && bigImage.status == Image.Ready) if (inBackState && bigImage.status == Image.Ready)
particleBox.imageInAnim(); effectBox.imageInAnim();
} }
property bool inBackState: false property bool inBackState: false
onInBackStateChanged:{ onInBackStateChanged:{
if(inBackState && bigImage.status == Image.Ready) if(inBackState && bigImage.status == Image.Ready)
particleBox.imageInAnim(); effectBox.imageInAnim();
else if (!inBackState && bigImage.status == Image.Ready) else if (!inBackState && bigImage.status == Image.Ready)
particleBox.imageOutAnim(); effectBox.imageOutAnim();
} }
} }
ShaderEffectSource{
id: pictureSource
sourceItem: bigImage
smooth: true
//Workaround: Doesn't work below lines
width: bigImage.width
height: bigImage.width
visible: false
}
Turbulence{//only fill visible rect
id: turbulence
system: imageSystem
anchors.fill: parent
frequency: 100
strength: 250
active: false
}
Item{ Item{
id: particleBox id: effectBox
width: bigImage.width * bigImage.scale width: bigImage.width * bigImage.scale
height: bigImage.height * bigImage.scale height: bigImage.height * bigImage.scale
anchors.centerIn: parent anchors.centerIn: parent
function imageInAnim(){ function imageInAnim(){
cp.visible = true;
pixAffect.onceOff = false;
bigImage.visible = false; bigImage.visible = false;
noiseIn.visible = true;
endEffectTimer.start(); endEffectTimer.start();
pixelEmitter.pulse(1);
} }
function imageOutAnim(){ function imageOutAnim(){
cp.visible = true;
pixAffect.onceOff = true;
bigImage.visible = false; bigImage.visible = false;
noiseIn.visible = false;
turbulence.active = true; turbulence.active = true;
endEffectTimer.start(); endEffectTimer.start();
pixelEmitter.burst(2048); pixelEmitter.burst(2048);
} }
Timer{ Timer{
id: endEffectTimer id: endEffectTimer
interval: 1000 interval: flipDuration
repeat: false repeat: false
running: false running: false
onTriggered:{ onTriggered:{
bigImage.visible = true;
turbulence.active = false; turbulence.active = false;
cp.visible = false; noiseIn.visible = false;
bigImage.visible = true;
} }
} }
ShaderEffectItem{
id: noiseIn
anchors.fill: parent
property real t: 0
visible: false
onVisibleChanged: tAnim.start()
NumberAnimation{
id: tAnim
target: noiseIn
property: "t"
from: 0.0
to: 1.0
duration: flipDuration
}
property variant source: pictureSource
property variant noise: ShaderEffectSource{
sourceItem:Image{
source: "images/noise.png"
}
hideSource: true
smooth: false
}
fragmentShader:"
uniform sampler2D noise;
uniform sampler2D source;
uniform highp float t;
uniform lowp float qt_Opacity;
varying highp vec2 qt_TexCoord0;
void main(){
//Want to use noise2, but it always returns (0,0)?
if(texture2D(noise, qt_TexCoord0).w <= t)
gl_FragColor = texture2D(source, qt_TexCoord0) * qt_Opacity;
else
gl_FragColor = vec4(0.,0.,0.,0.);
}
"
}
ParticleSystem{ ParticleSystem{
id: imageSystem id: imageSystem
} }
ColoredParticle{ Emitter{
id: cp
system: imageSystem
color: "gray"
alpha: 1
image: "images/squareParticle.png"
colorVariation: 0
}
Picture{
id: pixAffect
system: imageSystem
anchors.fill: parent
image: container.photoUrl;
onceOff: true
}
Turbulence{
id: turbulence
system: imageSystem
anchors.fill: parent
frequency: 100
strength: 250
active: false
}
TrailEmitter{
id: pixelEmitter0
system: imageSystem
height: parent.height
particleSize: 4
particleDuration: 1000
particlesPerSecond: 4096
speed: PointVector{x: 360; xVariation: 8; yVariation: 4}
emitting: false
}
TrailEmitter{
id: pixelEmitter id: pixelEmitter
system: imageSystem system: imageSystem
anchors.fill: parent //anchors.fill: parent
width: Math.min(bigImage.width * bigImage.scale, flickable.width);
height: Math.min(bigImage.height * bigImage.scale, flickable.height);
anchors.centerIn: parent
particleSize: 4 particleSize: 4
particleDuration: 1000 particleDuration: flipDuration
particlesPerSecond: 2048 particlesPerSecond: 2048
emitting: false emitting: false
} }
CustomParticle{
id: blowOut
system: imageSystem
property real maxWidth: effectBox.width
property real maxHeight: effectBox.height
vertexShader:"
attribute highp vec2 vPos;
attribute highp vec2 vTex;
attribute highp vec4 vData; // x = time, y = lifeSpan, z = size, w = endSize
attribute highp vec4 vVec; // x,y = constant speed, z,w = acceleration
attribute highp float r;
uniform highp float maxWidth;
uniform highp float maxHeight;
uniform highp mat4 qt_ModelViewProjectionMatrix;
uniform highp float timestamp;
uniform lowp float qt_Opacity;
varying highp vec2 fTex2;
varying lowp float fFade;
void main() {
fTex2 = vec2(vPos.x / maxWidth, vPos.y / maxHeight);
highp float size = vData.z;
highp float endSize = vData.w;
highp float t = (timestamp - vData.x) / vData.y;
highp float currentSize = mix(size, endSize, t * t);
if (t < 0. || t > 1.)
currentSize = 0.;
highp vec2 pos = vPos
- currentSize / 2. + currentSize * vTex // adjust size
+ vVec.xy * t * vData.y // apply speed vector..
+ 0.5 * vVec.zw * pow(t * vData.y, 2.);
gl_Position = qt_ModelViewProjectionMatrix * vec4(pos.x, pos.y, 0, 1);
highp float fadeIn = min(t * 10., 1.);
highp float fadeOut = 1. - max(0., min((t - 0.75) * 4., 1.));
fFade = 1.0;//fadeIn * fadeOut * qt_Opacity;
}
"
property variant pictureTexture: pictureSource
fragmentShader: "
uniform sampler2D pictureTexture;
varying highp vec2 fTex2;
varying highp float fFade;
void main() {
gl_FragColor = texture2D(pictureTexture, fTex2) * fFade;
}"
}
} }
} }
@ -268,7 +348,7 @@ Flipable {
transitions: Transition { transitions: Transition {
SequentialAnimation { SequentialAnimation {
PropertyAction { target: bigImage; property: "smooth"; value: false } PropertyAction { target: bigImage; property: "smooth"; value: false }
NumberAnimation { easing.type: Easing.InOutQuad; properties: "angle"; duration: 1000 } NumberAnimation { easing.type: Easing.InOutQuad; properties: "angle"; duration: flipDuration }
PropertyAction { target: bigImage; property: "smooth"; value: !flickable.movingVertically } PropertyAction { target: bigImage; property: "smooth"; value: !flickable.movingVertically }
} }
} }

View File

@ -40,7 +40,7 @@
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.0
import Qt.labs.particles 2.0 import QtQuick.Particles 2.0
Item{ Item{
id: container id: container
@ -59,17 +59,17 @@ Item{
running: container.visible running: container.visible
id: barSys id: barSys
} }
ColoredParticle{ ImageParticle{
color: "lightsteelblue" color: "lightsteelblue"
alpha: 0.1 alpha: 0.1
colorVariation: 0.05 colorVariation: 0.05
image: "images/particle.png" image: "images/particle.png"
system: barSys system: barSys
} }
TrailEmitter{ Emitter{
y: 2; height: parent.height-4; y: 2; height: parent.height-4;
x: 2; width: Math.max(parent.width * progress - 4, 0); x: 2; width: Math.max(parent.width * progress - 4, 0);
speed: AngleVector{ angleVariation: 180; magnitudeVariation: 12 } speed: AngledDirection{ angleVariation: 180; magnitudeVariation: 12 }
system: barSys system: barSys
particlesPerSecond: width; particlesPerSecond: width;
particleDuration: 1000 particleDuration: 1000

View File

@ -40,7 +40,7 @@
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.0
import Qt.labs.particles 2.0 import QtQuick.Particles 2.0
Item{ Item{
id: container id: container
@ -52,7 +52,7 @@ Item{
anchors.fill:parent anchors.fill:parent
overwrite: false overwrite: false
} }
DataParticle{ ModelParticle{
id: mp id: mp
fade: false fade: false
system: sys system: sys
@ -66,35 +66,35 @@ Item{
} }
} }
property real emitterSpacing: parent.width/3 property real emitterSpacing: parent.width/3
TrailEmitter{ Emitter{
system: sys system: sys
width: emitterSpacing - 64 width: emitterSpacing - 64
x: emitterSpacing*0 + 32 x: emitterSpacing*0 + 32
y: -128 y: -128
height: 32 height: 32
speed: PointVector{ y: (container.height + 128)/12 } speed: PointDirection{ y: (container.height + 128)/12 }
particlesPerSecond: 0.4 particlesPerSecond: 0.4
particleDuration: 1000000//eventually -1 should mean a million seconds for neatness particleDuration: 1000000//eventually -1 should mean a million seconds for neatness
maxParticles: 15 maxParticles: 15
} }
TrailEmitter{ Emitter{
system: sys system: sys
width: emitterSpacing - 64 width: emitterSpacing - 64
x: emitterSpacing*1 + 32 x: emitterSpacing*1 + 32
y: -128 y: -128
height: 32 height: 32
speed: PointVector{ y: (container.height + 128)/12 } speed: PointDirection{ y: (container.height + 128)/12 }
particlesPerSecond: 0.4 particlesPerSecond: 0.4
particleDuration: 1000000//eventually -1 should mean a million seconds for neatness particleDuration: 1000000//eventually -1 should mean a million seconds for neatness
maxParticles: 15 maxParticles: 15
} }
TrailEmitter{ Emitter{
system: sys system: sys
width: emitterSpacing - 64 width: emitterSpacing - 64
x: emitterSpacing*2 + 32 x: emitterSpacing*2 + 32
y: -128 y: -128
height: 32 height: 32
speed: PointVector{ y: (container.height + 128)/12 } speed: PointDirection{ y: (container.height + 128)/12 }
particlesPerSecond: 0.4 particlesPerSecond: 0.4
particleDuration: 1000000//eventually -1 should mean a million seconds for neatness particleDuration: 1000000//eventually -1 should mean a million seconds for neatness
maxParticles: 15 maxParticles: 15

View File

@ -40,7 +40,7 @@
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.0
import Qt.labs.particles 2.0 import QtQuick.Particles 2.0
Package { Package {
function photoClicked() { function photoClicked() {

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

View File

@ -40,7 +40,7 @@
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.0
import Qt.labs.particles 2.0 import QtQuick.Particles 2.0
import "content" import "content"
Item { Item {
@ -56,7 +56,7 @@ Item {
id: bgParticles id: bgParticles
startTime: 16000 startTime: 16000
} }
ColoredParticle { ImageParticle {
particles: ["trail"] particles: ["trail"]
image: "content/images/particle.png" image: "content/images/particle.png"
color: "#1A1A6F" color: "#1A1A6F"
@ -65,12 +65,12 @@ Item {
blueVariation: 0.8 blueVariation: 0.8
system: bgParticles system: bgParticles
} }
TrailEmitter { Emitter {
particle: "drops" particle: "drops"
width: parent.width width: parent.width
particlesPerSecond: 0.5 particlesPerSecond: 0.5
particleDuration: 20000 particleDuration: 20000
speed: PointVector{ speed: PointDirection{
y: {screen.height/18} y: {screen.height/18}
} }
system: bgParticles system: bgParticles
@ -87,7 +87,7 @@ Item {
anchors.fill: parent anchors.fill: parent
emissionWidth: 16 emissionWidth: 16
emissionHeight: 16 emissionHeight: 16
emissionShape: Ellipse{} emissionShape: EllipseShape{}
} }
VisualDataModel{ VisualDataModel{

View File

@ -40,7 +40,7 @@
****************************************************************************/ ****************************************************************************/
import QtQuick 1.0 import QtQuick 1.0
import Qt.labs.particles 1.0 import QtQuick.Particles 1.0
Item { Item {
property bool explode : false property bool explode : false

View File

@ -85,7 +85,7 @@ Component {
anchors.centerIn: parent; anchors.verticalCenterOffset: -30 anchors.centerIn: parent; anchors.verticalCenterOffset: -30
path: Path { path: Path {
PathAttribute { name: 'z'; value: 9999.0 } PathAttribute { name: 'z'; value: 9999.0 }
PathLine { x: 1; y: 1 } PathLineShape { x: 1; y: 1 }
PathAttribute { name: 'z'; value: 0.0 } PathAttribute { name: 'z'; value: 0.0 }
} }
} }

View File

@ -39,7 +39,7 @@
** **
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.0
import Qt.labs.particles 2.0 import QtQuick.Particles 2.0
Item { Item {
id: container id: container
@ -53,14 +53,14 @@ Item {
width: 24 width: 24
height: 24 height: 24
TrailEmitter{ Emitter{
id: visualization id: visualization
particle: "blaster" particle: "blaster"
system: container.system system: container.system
emitting: show emitting: show
anchors.fill: parent anchors.fill: parent
shape: Ellipse{} shape: EllipseShape{}
speed: DirectedVector{ targetX: width/2; targetY: width/2; magnitude: -1; proportionalMagnitude: true} speed: TargetedDirection{ targetX: width/2; targetY: width/2; magnitude: -1; proportionalMagnitude: true}
particleDuration: 1000 particleDuration: 1000
particlesPerSecond: 64 particlesPerSecond: 64
@ -112,7 +112,7 @@ Item {
rofTimer.repeat = false; rofTimer.repeat = false;
} }
} }
TrailEmitter{ Emitter{
id: emitter id: emitter
particle: "blaster" particle: "blaster"
emitting: false emitting: false
@ -125,7 +125,7 @@ Item {
particleSize: 24 particleSize: 24
particleEndSize:16 particleEndSize:16
particleSizeVariation: 8 particleSizeVariation: 8
speed: DirectedVector{ speed: TargetedDirection{
id: blastVector id: blastVector
targetX: target.x; targetY: target.y; magnitude: 1.1; proportionalMagnitude: true targetX: target.x; targetY: target.y; magnitude: 1.1; proportionalMagnitude: true
} }

View File

@ -39,7 +39,7 @@
** **
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.0
import Qt.labs.particles 2.0 import QtQuick.Particles 2.0
Item { Item {
id: container id: container
@ -49,7 +49,7 @@ Item {
width: 24 width: 24
height: 24 height: 24
TrailEmitter{ Emitter{
id: visualization id: visualization
particle: "cannon" particle: "cannon"
emitting: container.show emitting: container.show
@ -78,7 +78,7 @@ Item {
} }
emitter.burst(1); emitter.burst(1);
} }
TrailEmitter{ Emitter{
id: emitter id: emitter
particle: "cannon" particle: "cannon"
emitting: false emitting: false
@ -89,7 +89,7 @@ Item {
particlesPerSecond: 1 particlesPerSecond: 1
particleSize: 8 particleSize: 8
particleEndSize: 4 particleEndSize: 4
speed: DirectedVector{ speed: TargetedDirection{
id: blastVector id: blastVector
targetX: target.x; targetY: target.y; magnitude: 1.1; proportionalMagnitude: true targetX: target.x; targetY: target.y; magnitude: 1.1; proportionalMagnitude: true
} }

View File

@ -39,7 +39,7 @@
** **
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.0
import Qt.labs.particles 2.0 import QtQuick.Particles 2.0
Item{ Item{
id: container id: container

View File

@ -39,7 +39,7 @@
** **
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.0
import Qt.labs.particles 2.0 import QtQuick.Particles 2.0
Item { Item {
id: container id: container
@ -54,7 +54,7 @@ Item {
property int gunType: 0 property int gunType: 0
width: 128 width: 128
height: 128 height: 128
TrailEmitter{ Emitter{
//TODO: Cooler would be an 'orbiting' affector //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 //TODO: On the subject, opacity and size should be grouped type 'overLife' if we can cram that in the particles
system: container.system system: container.system
@ -62,7 +62,7 @@ Item {
anchors.centerIn: parent anchors.centerIn: parent
width: 64 width: 64
height: 64 height: 64
shape: Ellipse{} shape: EllipseShape{}
particlesPerSecond: hp > 0 ? hp * 1 + 20 : 0 particlesPerSecond: hp > 0 ? hp * 1 + 20 : 0
particleDuration: 2400 particleDuration: 2400
@ -72,13 +72,13 @@ Item {
particleSizeVariation: 16 particleSizeVariation: 16
particleEndSize: 16 particleEndSize: 16
speed: AngleVector{angleVariation:360; magnitudeVariation: 32} speed: AngledDirection{angleVariation:360; magnitudeVariation: 32}
} }
TrailEmitter{ Emitter{
system: container.system system: container.system
particle: "cruiserArmor" particle: "cruiserArmor"
anchors.fill: parent anchors.fill: parent
shape: Ellipse{ fill: false } shape: EllipseShape{ fill: false }
emitting: hp>0 emitting: hp>0
particlesPerSecond: 16 particlesPerSecond: 16

View File

@ -39,7 +39,7 @@
** **
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.0
import Qt.labs.particles 2.0 import QtQuick.Particles 2.0
Item { Item {
id: container id: container
@ -54,7 +54,7 @@ Item {
property int gunType: 0 property int gunType: 0
width: 128 width: 128
height: 128 height: 128
TrailEmitter{ Emitter{
system: container.system system: container.system
particle: "frigateShield" particle: "frigateShield"
anchors.centerIn: parent anchors.centerIn: parent
@ -63,13 +63,13 @@ Item {
particleDuration: 4800 particleDuration: 4800
emitting: hp > 0 emitting: hp > 0
} }
TrailEmitter{ Emitter{
system: container.system system: container.system
particle: container.shipParticle particle: container.shipParticle
anchors.centerIn: parent anchors.centerIn: parent
width: 64 width: 64
height: 16 height: 16
shape: Ellipse{} shape: EllipseShape{}
particleSize: 16 particleSize: 16
particleSizeVariation: 8 particleSizeVariation: 8

View File

@ -39,7 +39,7 @@
** **
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.0
import Qt.labs.particles 2.0 import QtQuick.Particles 2.0
Item { Item {
id: container id: container

View File

@ -39,7 +39,7 @@
** **
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.0
import Qt.labs.particles 2.0 import QtQuick.Particles 2.0
SequentialLoader { SequentialLoader {
id: hLdr id: hLdr

View File

@ -39,7 +39,7 @@
** **
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.0
import Qt.labs.particles 2.0 import QtQuick.Particles 2.0
Item { Item {
id: container id: container
@ -49,14 +49,14 @@ Item {
width: 24 width: 24
height: 24 height: 24
TrailEmitter{ Emitter{
id: visualization id: visualization
particle: "laser" particle: "laser"
system: container.system system: container.system
anchors.fill: parent anchors.fill: parent
emitting: container.show emitting: container.show
shape: Ellipse{} shape: EllipseShape{}
speed: DirectedVector{ targetX: width/2; targetY: width/2; magnitude: -1; proportionalMagnitude: true } speed: TargetedDirection{ targetX: width/2; targetY: width/2; magnitude: -1; proportionalMagnitude: true }
particleDuration: 1000 particleDuration: 1000
particlesPerSecond: 64 particlesPerSecond: 64
@ -84,7 +84,7 @@ Item {
emitter.pulse(0.10); 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))); // 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{ Emitter{
id: emitter id: emitter
particle: "laser" particle: "laser"
emitting: false emitting: false
@ -93,7 +93,7 @@ Item {
width: Math.max(container.width/2, target.x) - x; width: Math.max(container.width/2, target.x) - x;
y: Math.min(container.height/2, target.y); y: Math.min(container.height/2, target.y);
height: Math.max(container.height/2, target.y) - y; height: Math.max(container.height/2, target.y) - y;
shape: Line{ shape: LineShape{
mirrored: (emitter.y < 0 || emitter.x < 0) && !(emitter.y < 0 && emitter.x < 0 )//I just want XOR mirrored: (emitter.y < 0 || emitter.x < 0) && !(emitter.y < 0 && emitter.x < 0 )//I just want XOR
} }
@ -103,6 +103,6 @@ Item {
particleSize: 16 particleSize: 16
particleEndSize: 0 particleEndSize: 0
speed: PointVector{xVariation: 4; yVariation: 4} speed: PointDirection{xVariation: 4; yVariation: 4}
} }
} }

View File

@ -39,11 +39,11 @@
** **
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.0
import Qt.labs.particles 2.0 import QtQuick.Particles 2.0
Item{ Item{
property ParticleSystem sys property ParticleSystem sys
ColoredParticle{ ImageParticle{
system: sys system: sys
particles: ["default"] particles: ["default"]
image: "pics/blur-circle3.png" image: "pics/blur-circle3.png"
@ -51,7 +51,7 @@ Item{
colorVariation: 0.1 colorVariation: 0.1
z: 0 z: 0
} }
ColoredParticle{ ImageParticle{
system: sys system: sys
particles: ["redTeam"] particles: ["redTeam"]
image: "pics/blur-circle3.png" image: "pics/blur-circle3.png"
@ -59,7 +59,7 @@ Item{
colorVariation: 0.1 colorVariation: 0.1
z: 0 z: 0
} }
ColoredParticle{ ImageParticle{
system: sys system: sys
particles: ["greenTeam"] particles: ["greenTeam"]
image: "pics/blur-circle3.png" image: "pics/blur-circle3.png"
@ -67,7 +67,7 @@ Item{
colorVariation: 0.1 colorVariation: 0.1
z: 0 z: 0
} }
ColoredParticle{ ImageParticle{
system: sys system: sys
particles: ["blaster"] particles: ["blaster"]
image: "pics/star2.png" image: "pics/star2.png"
@ -76,7 +76,7 @@ Item{
colorVariation: 0.2 colorVariation: 0.2
z: 2 z: 2
} }
ColoredParticle{ ImageParticle{
system: sys system: sys
particles: ["laser"] particles: ["laser"]
image: "pics/star3.png" image: "pics/star3.png"
@ -85,7 +85,7 @@ Item{
colorVariation: 0.2 colorVariation: 0.2
z: 2 z: 2
} }
ColoredParticle{ ImageParticle{
system: sys system: sys
particles: ["cannon"] particles: ["cannon"]
image: "pics/particle.png" image: "pics/particle.png"
@ -93,7 +93,7 @@ Item{
colorVariation: 0.1 colorVariation: 0.1
z: 2 z: 2
} }
ColoredParticle{ ImageParticle{
system: sys system: sys
particles: ["cannonCore"] particles: ["cannonCore"]
image: "pics/particle.png" image: "pics/particle.png"
@ -101,7 +101,7 @@ Item{
colorVariation: 0.8 colorVariation: 0.8
z: 1 z: 1
} }
ColoredParticle{ ImageParticle{
system: sys system: sys
particles: ["cannonWake"] particles: ["cannonWake"]
image: "pics/star.png" image: "pics/star.png"
@ -109,7 +109,7 @@ Item{
colorVariation: 0.2 colorVariation: 0.2
z: 1 z: 1
} }
ColoredParticle{ ImageParticle{
system: sys system: sys
particles: ["frigateShield"] particles: ["frigateShield"]
image: "pics/blur-circle2.png" image: "pics/blur-circle2.png"
@ -119,7 +119,7 @@ Item{
greenVariation: 0.1 greenVariation: 0.1
z: 3 z: 3
} }
SpriteParticle{ ImageParticle{
system: sys system: sys
particles: ["cruiserArmor"] particles: ["cruiserArmor"]
z: 1 z: 1
@ -150,7 +150,7 @@ Item{
follow: "cannon" follow: "cannon"
particlesPerParticlePerSecond: 64 particlesPerParticlePerSecond: 64
particleDuration: 600 particleDuration: 600
speed: AngleVector{ angleVariation: 360; magnitude: 48} speed: AngledDirection{ angleVariation: 360; magnitude: 48}
particleSize: 16 particleSize: 16
particleEndSize: 8 particleEndSize: 8
particleSizeVariation: 2 particleSizeVariation: 2

View File

@ -39,7 +39,7 @@
** **
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.0
import Qt.labs.particles 2.0 import QtQuick.Particles 2.0
Item { Item {
id: me id: me

View File

@ -39,7 +39,7 @@
** **
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.0
import Qt.labs.particles 2.0 import QtQuick.Particles 2.0
Item { Item {
id: container id: container
@ -55,19 +55,19 @@ Item {
property int gunType: 0 property int gunType: 0
width: 128 width: 128
height: 128 height: 128
TrailEmitter{ Emitter{
id: emitter id: emitter
//TODO: Cooler would be an 'orbiting' affector //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 //TODO: On the subject, opacity and size should be grouped type 'overLife' if we can cram that in the particles
system: container.system system: container.system
particle: container.shipParticle particle: container.shipParticle
shape: Ellipse{} shape: EllipseShape{}
particlesPerSecond: hp > 0 ? hp + 20 : 0 particlesPerSecond: hp > 0 ? hp + 20 : 0
particleDuration: blinkInterval particleDuration: blinkInterval
maxParticles: (maxHP + 20) maxParticles: (maxHP + 20)
acceleration: AngleVector{angleVariation: 360; magnitude: 8} acceleration: AngledDirection{angleVariation: 360; magnitude: 8}
particleSize: 24 particleSize: 24
particleEndSize: 4 particleEndSize: 4

View File

@ -39,7 +39,7 @@
** **
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.0
import Qt.labs.particles 2.0 import QtQuick.Particles 2.0
import "content" import "content"
Rectangle { Rectangle {
@ -93,18 +93,18 @@ Rectangle {
id: title id: title
width: root.width width: root.width
height: 240 height: 240
TrailEmitter{ Emitter{
anchors.fill: parent anchors.fill: parent
system: particles system: particles
emitting: true emitting: true
particle: "default" particle: "default"
particlesPerSecond: 1200 particlesPerSecond: 1200
particleDuration: 1200 particleDuration: 1200
shape: Mask{source:"content/pics/TitleText.png"} shape: MaskShape{source:"content/pics/TitleText.png"}
particleSize: 16 particleSize: 16
particleEndSize: 0 particleEndSize: 0
particleSizeVariation: 8 particleSizeVariation: 8
speed: AngleVector{angleVariation:360; magnitudeVariation: 6} speed: AngledDirection{angleVariation:360; magnitudeVariation: 6}
} }
} }
Button{ Button{

View File

@ -40,7 +40,7 @@
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.0
import Qt.labs.particles 2.0 import QtQuick.Particles 2.0
Item { Item {
id: block id: block
@ -71,7 +71,7 @@ Item {
Behavior on opacity { NumberAnimation { duration: 200 } } Behavior on opacity { NumberAnimation { duration: 200 } }
anchors.fill: parent anchors.fill: parent
} }
TrailEmitter { Emitter {
id: particles id: particles
system: particleSystem system: particleSystem
particle: { particle: {
@ -85,12 +85,12 @@ Item {
} }
anchors.fill: parent anchors.fill: parent
speed: DirectedVector{targetX: block.width/2; targetY: block.height/2; magnitude: -60; magnitudeVariation: 60} speed: TargetedDirection{targetX: block.width/2; targetY: block.height/2; magnitude: -60; magnitudeVariation: 60}
shape: Ellipse{fill:true} shape: EllipseShape{fill:true}
emitting: false; emitting: false;
particleDuration: 700; particleDurationVariation: 100 particleDuration: 700; particleDurationVariation: 100
particlesPerSecond: 1000 particlesPerSecond: 1000
maxParticles: 100 //only fires 0.1s bursts (still 2x old number, ColoredParticle wants less than 16000 max though) maxParticles: 100 //only fires 0.1s bursts (still 2x old number, ImageParticle wants less than 16000 max though)
particleSize: 28 particleSize: 28
particleEndSize: 14 particleEndSize: 14
} }

View File

@ -40,7 +40,7 @@
****************************************************************************/ ****************************************************************************/
import QtQuick 2.0 import QtQuick 2.0
import Qt.labs.particles 2.0 import QtQuick.Particles 2.0
import "SamegameCore" import "SamegameCore"
import "SamegameCore/samegame.js" as Logic import "SamegameCore/samegame.js" as Logic
@ -77,7 +77,7 @@ Rectangle {
} }
Item{ Item{
ParticleSystem{ id: particleSystem; } ParticleSystem{ id: particleSystem; }
ColoredParticle { ImageParticle {
system: particleSystem system: particleSystem
particles: ["red"] particles: ["red"]
color: Qt.darker("red");//Actually want desaturated... color: Qt.darker("red");//Actually want desaturated...
@ -85,7 +85,7 @@ Rectangle {
colorVariation: 0.4 colorVariation: 0.4
alpha: 0.1 alpha: 0.1
} }
ColoredParticle { ImageParticle {
system: particleSystem system: particleSystem
particles: ["green"] particles: ["green"]
color: Qt.darker("green");//Actually want desaturated... color: Qt.darker("green");//Actually want desaturated...
@ -93,7 +93,7 @@ Rectangle {
colorVariation: 0.4 colorVariation: 0.4
alpha: 0.1 alpha: 0.1
} }
ColoredParticle { ImageParticle {
system: particleSystem system: particleSystem
particles: ["blue"] particles: ["blue"]
color: Qt.darker("blue");//Actually want desaturated... color: Qt.darker("blue");//Actually want desaturated...

View File

@ -40,7 +40,7 @@
****************************************************************************/ ****************************************************************************/
import QtQuick 1.0 import QtQuick 1.0
import Qt.labs.particles 1.0 import QtQuick.Particles 1.0
Item { Item {
id: root id: root

View File

@ -40,7 +40,7 @@
****************************************************************************/ ****************************************************************************/
import QtQuick 1.0 import QtQuick 1.0
import Qt.labs.particles 1.0 import QtQuick.Particles 1.0
Item { id:link Item { id:link
property bool dying: false property bool dying: false

View File

@ -98,6 +98,7 @@ Rectangle{
image: "content/star.png" image: "content/star.png"
color: "white" color: "white"
colorVariation: 0.1 colorVariation: 0.1
alpha: 0
} }
ImageParticle{ ImageParticle{
id: roids id: roids
@ -144,9 +145,11 @@ Rectangle{
colorVariation: 0.2 colorVariation: 0.2
} }
GravitationalSingularity{ PointAttractor{
id: gs; x: root.width/2; y: root.height/2; strength: 4000000; id: gs; x: root.width/2; y: root.height/2; strength: 4000000;
system: particles system: particles
physics: PointAttractor.Acceleration
proportionalToDistance: PointAttractor.Quadratic
} }
Kill{ Kill{
system: particles system: particles

View File

@ -0,0 +1,182 @@
/****************************************************************************
**
** 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 examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
** the names of its contributors may be used to endorse or promote
** products derived from this software without specific prior written
** permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.0
import QtQuick.Particles 2.0
import "launcherContent/launcher.js" as Util
import "launcherContent"
Rectangle{
color: "black"
width: 360
height: 600
Shell{
z: 1
id: shell
anchors.fill: parent
}
property string emissionMode: "Falling"
onEmissionModeChanged: workaround.active = true
VisualDataModel{//TODO: Transitions between modes
id: vdm
model: [
"../spaceexplorer/spaceexplorer.qml",
"../snow/snow.qml",
"../asteroid/asteroid.qml",
"../asteroid/blackhole.qml",
"../custom/blurparticles.qml",
"../modelparticles/bubbles.qml",
"../modelparticles/gridsplosion.qml",
"../modelparticles/package.qml",
"../modelparticles/stream.qml",
"../allsmiles/plain.qml",
"../allsmiles/smile.qml",
"../allsmiles/smilefactory.qml",
"../allsmiles/ultraparticles.qml",
"../allsmiles/spriteparticles.qml",
"../allsmiles/spritestateparticles.qml",
"../allsmiles/spritevariedparticles.qml",
"../trails/velocityfrommotion.qml",
"../trails/fireballs.qml",
"../trails/list.qml",
"../trails/portal.qml",
"../trails/rainbow.qml",
"../trails/dynamicemitters.qml",
"../trails/overburst.qml",
"../trails/layered.qml",
"../trails/shimmer.qml",
"../trails/turbulence.qml",
"../../../../demos/declarative/samegame/samegame.qml",
"../../../../demos/declarative/plasmapatrol/plasmapatrol.qml",
"../../../../demos/declarative/flickr/flickr.qml"
]
delegate: Rectangle{
color: "white"
width: 96
height: 96
Image{
width: 72
height: 72
anchors.centerIn: parent
source: Util.iconFromPath(modelData)
}
Text{
text: Util.nameFromPath(modelData)
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
font.pixelSize: 8
}
MouseArea{
anchors.fill: parent
onClicked: shell.setDemo(modelData)
}
}
}
GridView{
anchors.fill: parent
anchors.bottomMargin: 128
model: vdm
visible: emissionMode == "Grid"
opacity: visible?1:0
Behavior on opacity{NumberAnimation{}}
}
ParticleSystem{ id: sys }
ModelParticle{
system: sys
model: vdm
}
Kill{
//TODO: File bug?
id: workaround
system: sys
active: false
onActiveChanged: timer.start()
Timer{
id: timer
interval: 32
running: false
repeat: false
onTriggered: workaround.active = false
}
}
Emitter{
system: sys
emitting: emissionMode == "Falling"
width: parent.width
particlesPerSecond: 2
particleDuration: 6000
speed: PointDirection{y:100;}
}
Emitter{
system: sys
emitting: emissionMode == "Bursting"
anchors.centerIn: parent
particlesPerSecond: 2
particleDuration: 6000
speed: AngledDirection{magnitude: 60; angleVariation: 360}
}
Emitter{
system: sys
emitting: emissionMode == "Shimmering"
anchors.fill: parent
particlesPerSecond: 4
particleDuration: 4000
}
Row{
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
Button{
text:"Grid"
onClicked: emissionMode = "Grid";
}
Button{
text:"Fall"
onClicked: emissionMode = "Falling";
}
Button{
text:"Burst"
onClicked: emissionMode = "Bursting";
}
Button{
text:"Shimmer"
onClicked: emissionMode = "Shimmering";
}
}
}

View File

@ -0,0 +1,78 @@
/****************************************************************************
**
** 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 examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
** the names of its contributors may be used to endorse or promote
** products derived from this software without specific prior written
** permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.0
Loader{
id: ldr
visible: false
focus: visible
onVisibleChanged: source = ""
opacity: visible?1:0
Behavior on opacity{NumberAnimation{}}
function setDemo(str){
visible = true;
source = str;
}
Image{//TODO: Augment with PARTICLES
z: 1
source: "icons/close.png"
MouseArea{
anchors.fill: parent
onClicked: ldr.visible = false;
}
}
Rectangle{
z: -1
anchors.fill: parent
color:"black"
Text{
color: "white"
anchors.centerIn: parent
text: ldr.Status == Loader.Error ? "Error :(" : "Loading..."
}
MouseArea{
id: graball
anchors.fill: parent
onClicked:;
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1019 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@ -0,0 +1,8 @@
function nameFromPath(path){
var ret = path.split('/');
return ret[ret.length-1].split('.')[0];
}
function iconFromPath(path){
var ret = path.split('/');
return "launcherContent/icons/" + ret[ret.length-1].split('.')[0] + ".png";
}

View File

@ -41,6 +41,7 @@
import QtQuick 2.0 import QtQuick 2.0
import QtQuick.Particles 2.0 import QtQuick.Particles 2.0
import "content" import "content"
import "../launcherContent" as UI
Rectangle{ Rectangle{
width: 360 width: 360
@ -77,15 +78,15 @@ Rectangle{
Row{ Row{
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
Button{ UI.Button{
text:"dx/dt" text:"dx/dt"
onClicked: wanderer.physics = Wander.Position; onClicked: wanderer.physics = Wander.Position;
} }
Button{ UI.Button{
text:"dv/dt" text:"dv/dt"
onClicked: wanderer.physics = Wander.Velocity; onClicked: wanderer.physics = Wander.Velocity;
} }
Button{ UI.Button{
text:"da/dt" text:"da/dt"
onClicked: wanderer.physics = Wander.Acceleration; onClicked: wanderer.physics = Wander.Acceleration;
} }