mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-23 19:38:48 +03:00
137 lines
3.6 KiB
QML
137 lines
3.6 KiB
QML
// SPDX-FileCopyrightText: Nheko Contributors
|
|
//
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
import QtQuick 2.15
|
|
import QtQuick.Particles 2.15
|
|
|
|
Item {
|
|
id: effectRoot
|
|
readonly property int maxLifespan: Math.max(confettiEmitter.lifeSpan, rainfallEmitter.lifeSpan)
|
|
required property bool shouldEffectsRun
|
|
visible: effectRoot.shouldEffectsRun
|
|
|
|
function pulseConfetti()
|
|
{
|
|
confettiEmitter.pulse(effectRoot.height * 2)
|
|
}
|
|
|
|
function pulseRainfall()
|
|
{
|
|
rainfallEmitter.pulse(effectRoot.height * 3.3)
|
|
}
|
|
|
|
ParticleSystem {
|
|
id: particleSystem
|
|
|
|
Component.onCompleted: stop();
|
|
paused: !effectRoot.shouldEffectsRun
|
|
running: effectRoot.shouldEffectsRun
|
|
}
|
|
|
|
Emitter {
|
|
id: confettiEmitter
|
|
|
|
group: "confetti"
|
|
width: effectRoot.width * 3/4
|
|
enabled: false
|
|
anchors.horizontalCenter: effectRoot.horizontalCenter
|
|
y: effectRoot.height
|
|
emitRate: Math.min(400 * Math.sqrt(effectRoot.width * effectRoot.height) / 870, 1000)
|
|
lifeSpan: 15000
|
|
system: particleSystem
|
|
maximumEmitted: 500
|
|
velocityFromMovement: 8
|
|
size: 16
|
|
sizeVariation: 4
|
|
velocity: PointDirection {
|
|
x: 0
|
|
y: -Math.min(450 * effectRoot.height / 700, 1000)
|
|
xVariation: Math.min(4 * effectRoot.width / 7, 450)
|
|
yVariation: 250
|
|
}
|
|
}
|
|
|
|
ImageParticle {
|
|
system: particleSystem
|
|
groups: ["confetti"]
|
|
source: "qrc:/confettiparticle.svg"
|
|
rotationVelocity: 0
|
|
rotationVelocityVariation: 360
|
|
colorVariation: 1
|
|
color: "white"
|
|
entryEffect: ImageParticle.None
|
|
xVector: PointDirection {
|
|
x: 1
|
|
y: 0
|
|
xVariation: 0.2
|
|
yVariation: 0.2
|
|
}
|
|
yVector: PointDirection {
|
|
x: 0
|
|
y: 0.5
|
|
xVariation: 0.2
|
|
yVariation: 0.2
|
|
}
|
|
}
|
|
|
|
Gravity {
|
|
system: particleSystem
|
|
groups: ["confetti"]
|
|
anchors.fill: effectRoot
|
|
magnitude: 350
|
|
angle: 90
|
|
}
|
|
|
|
Emitter {
|
|
id: rainfallEmitter
|
|
|
|
group: "rain"
|
|
width: effectRoot.width
|
|
enabled: false
|
|
anchors.horizontalCenter: effectRoot.horizontalCenter
|
|
y: -60
|
|
emitRate: effectRoot.width / 30
|
|
lifeSpan: 10000
|
|
system: particleSystem
|
|
velocity: PointDirection {
|
|
x: 0
|
|
y: 400
|
|
xVariation: 0
|
|
yVariation: 75
|
|
}
|
|
|
|
// causes high CPU load, see: https://bugreports.qt.io/browse/QTBUG-117923
|
|
//ItemParticle {
|
|
// system: particleSystem
|
|
// groups: ["rain"]
|
|
// fade: false
|
|
// visible: effectRoot.shouldEffectsRun
|
|
// delegate: Rectangle {
|
|
// width: 2
|
|
// height: 30 + 30 * Math.random()
|
|
// radius: 2
|
|
// color: "#0099ff"
|
|
// }
|
|
//}
|
|
|
|
ImageParticle {
|
|
system: particleSystem
|
|
groups: ["rain"]
|
|
source: "qrc:/confettiparticle.svg"
|
|
rotationVelocity: 0
|
|
rotationVelocityVariation: 0
|
|
colorVariation: 0
|
|
color: "#0099ff"
|
|
entryEffect: ImageParticle.None
|
|
xVector: PointDirection {
|
|
x: 0.01
|
|
y: 0
|
|
}
|
|
yVector: PointDirection {
|
|
x: 0
|
|
y: 5
|
|
}
|
|
}
|
|
}
|
|
}
|