mirror of
https://github.com/HenkKalkwater/harbour-sailfin.git
synced 2024-12-23 14:35:17 +00:00
117 lines
2.6 KiB
QML
117 lines
2.6 KiB
QML
import QtQuick 2.12
|
|
import QtQuick.Particles 2.12
|
|
|
|
Rectangle {
|
|
id: root
|
|
anchors.fill: parent
|
|
color: "#ccc"
|
|
|
|
readonly property real normalStrength: 0.5
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
|
onClicked: {
|
|
if (mouse.button == Qt.LeftButton) {
|
|
enter();
|
|
} else {
|
|
exit();
|
|
}
|
|
}
|
|
}
|
|
|
|
ParticleSystem {
|
|
id: particleSystem
|
|
}
|
|
|
|
Emitter {
|
|
id: emitter
|
|
anchors.centerIn: parent
|
|
width: parent.width * 0.5
|
|
height: parent.height * 0.5
|
|
system: particleSystem
|
|
emitRate: Math.sqrt(width * height) * 30 / (lifeSpan)
|
|
lifeSpan: 10000
|
|
lifeSpanVariation: 1000
|
|
size: 12
|
|
endSize: 24
|
|
sizeVariation: 6
|
|
shape: EllipseShape {}
|
|
}
|
|
|
|
Attractor {
|
|
id: affector
|
|
anchors.centerIn: parent
|
|
width: parent.width * 2
|
|
height: parent.height * 2
|
|
affectedParameter: Attractor.Position
|
|
system: particleSystem
|
|
pointX: width / 2
|
|
pointY: height / 2
|
|
proportionalToDistance: Attractor.Linear
|
|
strength: -normalStrength
|
|
}
|
|
|
|
Wander {
|
|
anchors.fill: parent
|
|
system: particleSystem
|
|
pace: 300
|
|
affectedParameter: Wander.Velocity
|
|
xVariance: 1000
|
|
yVariance: 1000
|
|
}
|
|
|
|
|
|
ImageParticle {
|
|
//source: Qt.resolvedUrl("../../assets/img/particle.png")
|
|
source: "qrc:/particleresources/fuzzydot.png"
|
|
system: particleSystem
|
|
alpha: 0.7
|
|
alphaVariation: 0.3
|
|
}
|
|
|
|
SequentialAnimation {
|
|
id: enterAnimation
|
|
NumberAnimation {
|
|
target: affector
|
|
property: "strength"
|
|
from: - 5 * normalStrength
|
|
to: -normalStrength
|
|
easing.type: Easing.OutQuad
|
|
duration: 1000
|
|
}
|
|
ScriptAction {
|
|
script: emitter.burst(10)
|
|
}
|
|
}
|
|
|
|
SequentialAnimation {
|
|
id: exitAnimation
|
|
PropertyAction {
|
|
target: affector
|
|
property: "strength"
|
|
value: 4 * normalStrength
|
|
}
|
|
PauseAnimation {
|
|
duration: 500
|
|
}
|
|
NumberAnimation {
|
|
target: affector
|
|
property: "strength"
|
|
easing.type: Easing.InOutQuad
|
|
to: -normalStrength
|
|
duration: 500
|
|
}
|
|
}
|
|
|
|
function enter() {
|
|
console.log("Enter animation")
|
|
enterAnimation.start();
|
|
}
|
|
|
|
function exit() {
|
|
console.log("Exit animation")
|
|
exitAnimation.start();
|
|
}
|
|
}
|