aboutsummaryrefslogtreecommitdiffstats
path: root/examples/declarative/particles/custom/fallingleaves.qml
blob: 3572490451f9ed200a8559a5757fafc27d6215cd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import QtQuick 2.0
import QtQuick.Particles 2.0

Item {
    width: 360
    height: 600

    Image{
        source: "content/backgroundLeaves.jpg"
        anchors.fill: parent
    }
    ParticleSystem{ id: sys }
    Emitter{
        system: sys
        width: parent.width
        emitRate: 4
        lifeSpan: 14000
        size: 80
        speed: PointDirection{ y: 60 }
    }
    Wander {
        system: sys
        anchors.fill: parent
        anchors.bottomMargin: 100
        xVariance: 60
        pace: 60
    }
    Affector{
        system: sys
        property real coefficient: 0.1
        property real speed: 1.5
        width: parent.width
        height: parent.height - 100
        onAffectParticle:{
        /*  //Linear movement
            if (particle.r == 0){
                particle.r = Math.random() > 0.5 ? -1 : 1;
            }else if (particle.r == 1){
                particle.rotation += speed * dt;
                if(particle.rotation >= maxAngle)
                    particle.r = -1;
            }else if (particle.r == -1){
                particle.rotation -= speed * dt;
                if(particle.rotation <= -1 * maxAngle)
                    particle.r = 1;
            }
        */
            //Wobbly movement
            if (particle.r == 0.0){
                particle.r = Math.random() + 0.01;
            }
            particle.rotation += speed * particle.r * dt;
            particle.r -= particle.rotation * coefficient;
            if (particle.r == 0.0)
                particle.r -= particle.rotation * 0.000001;
        }
    }

    Affector{//Custom Friction, adds some 'randomness'
        system: sys
        //onceOff: true
        x: -60
        width: parent.width + 120
        height: 100
        anchors.bottom: parent.bottom
        onAffectParticle:{
            var pseudoRand = (Math.floor(particle.t*1327) % 10) + 1;
            var yslow = pseudoRand * 0.001 + 1.01;
            var xslow = pseudoRand * 0.0005 + 1.0;
            if (particle.curVY < 1)
                particle.curVY == 0;
            else
                particle.curVY = (particle.curVY / yslow);
            if (particle.curVX < 1)
                particle.curVX == 0;
            else
                particle.curVX = (particle.curVX / xslow);
        }
    }
    ImageParticle{
        anchors.fill: parent
        id: particles
        system: sys
        sprites: [Sprite{
                source: "content/realLeaf1.png"
                frames: 1
                duration: 1
                to: {"a":1, "b":1, "c":1, "d":1}
            }, Sprite{
                name: "a"
                source: "content/realLeaf1.png"
                frames: 1
                duration: 10000
            },
            Sprite{
                name: "b"
                source: "content/realLeaf2.png"
                frames: 1
                duration: 10000
            },
            Sprite{
                name: "c"
                source: "content/realLeaf3.png"
                frames: 1
                duration: 10000
            },
            Sprite{
                name: "d"
                source: "content/realLeaf4.png"
                frames: 1
                duration: 10000
            }
        ]

        width: 100
        height: 100
        x: 20
        y: 20
        z:4
    }
}