Move effects into a separate file

This commit is contained in:
Loren Burkholder 2023-03-24 09:36:42 -04:00
parent c751c487da
commit 5f3ecc213f
3 changed files with 117 additions and 90 deletions

View file

@ -364,95 +364,10 @@ Item {
onClicked: Rooms.resetCurrentRoom() onClicked: Rooms.resetCurrentRoom()
} }
ParticleSystem { TimelineEffects {
id: particleSystem id: timelineEffects
Component.onCompleted: pause();
paused: !shouldEffectsRun
}
Emitter {
id: confettiEmitter
group: "confetti"
width: parent.width * 3/4
enabled: false
anchors.horizontalCenter: parent.horizontalCenter
y: parent.height
emitRate: Math.min(400 * Math.sqrt(parent.width * parent.height) / 870, 1000)
lifeSpan: 15000
system: particleSystem
maximumEmitted: 500
velocityFromMovement: 8
size: 16
sizeVariation: 4
velocity: PointDirection {
x: 0
y: -Math.min(450 * parent.height / 700, 1000)
xVariation: Math.min(4 * parent.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
anchors.fill: parent anchors.fill: parent
magnitude: 350
angle: 90
}
Emitter {
id: rainfallEmitter
group: "rain"
width: parent.width
enabled: false
anchors.horizontalCenter: parent.horizontalCenter
y: -60
emitRate: parent.width / 50
lifeSpan: 10000
system: particleSystem
velocity: PointDirection {
x: 0
y: 300
xVariation: 0
yVariation: 75
}
ItemParticle {
system: particleSystem
groups: ["rain"]
fade: false
delegate: Rectangle {
width: 2
height: 30 + 30 * Math.random()
radius: 2
color: "#0099ff"
}
}
} }
NhekoDropArea { NhekoDropArea {
@ -463,7 +378,7 @@ Item {
Timer { Timer {
id: effectsTimer id: effectsTimer
onTriggered: shouldEffectsRun = false; onTriggered: shouldEffectsRun = false;
interval: Math.max(confettiEmitter.lifeSpan, rainfallEmitter.lifeSpan) interval: timelineEffects.maxLifespan
repeat: false repeat: false
running: false running: false
} }
@ -497,7 +412,7 @@ Item {
return return
shouldEffectsRun = true; shouldEffectsRun = true;
confettiEmitter.pulse(parent.height * 2) timelineEffects.pulseConfetti()
room.markSpecialEffectsDone() room.markSpecialEffectsDone()
} }
@ -515,7 +430,7 @@ Item {
return return
shouldEffectsRun = true; shouldEffectsRun = true;
rainfallEmitter.pulse(parent.height * 7.5) timelineEffects.pulseRainfall()
room.markSpecialEffectsDone() room.markSpecialEffectsDone()
} }

View file

@ -0,0 +1,111 @@
// SPDX-FileCopyrightText: Nheko Contributors
//
// SPDX-License-Identifier: GPL-3.0-or-later
import QtQuick 2.15
import QtQuick.Particles 2.15
Item {
readonly property int maxLifespan: Math.max(confettiEmitter.lifeSpan, rainfallEmitter.lifeSpan)
function pulseConfetti()
{
confettiEmitter.pulse(parent.height * 2)
}
function pulseRainfall()
{
rainfallEmitter.pulse(parent.height * 7.5)
}
ParticleSystem {
id: particleSystem
Component.onCompleted: pause();
paused: !shouldEffectsRun
}
Emitter {
id: confettiEmitter
group: "confetti"
width: parent.width * 3/4
enabled: false
anchors.horizontalCenter: parent.horizontalCenter
y: parent.height
emitRate: Math.min(400 * Math.sqrt(parent.width * parent.height) / 870, 1000)
lifeSpan: 15000
system: particleSystem
maximumEmitted: 500
velocityFromMovement: 8
size: 16
sizeVariation: 4
velocity: PointDirection {
x: 0
y: -Math.min(450 * parent.height / 700, 1000)
xVariation: Math.min(4 * parent.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
anchors.fill: parent
magnitude: 350
angle: 90
}
Emitter {
id: rainfallEmitter
group: "rain"
width: parent.width
enabled: false
anchors.horizontalCenter: parent.horizontalCenter
y: -60
emitRate: parent.width / 50
lifeSpan: 10000
system: particleSystem
velocity: PointDirection {
x: 0
y: 300
xVariation: 0
yVariation: 75
}
ItemParticle {
system: particleSystem
groups: ["rain"]
fade: false
delegate: Rectangle {
width: 2
height: 30 + 30 * Math.random()
radius: 2
color: "#0099ff"
}
}
}
}

View file

@ -197,6 +197,7 @@
<file>qml/voip/VideoCall.qml</file> <file>qml/voip/VideoCall.qml</file>
<file>confettiparticle.svg</file> <file>confettiparticle.svg</file>
<file>qml/delegates/EncryptionEnabled.qml</file> <file>qml/delegates/EncryptionEnabled.qml</file>
<file>qml/ui/TimelineEffects.qml</file>
</qresource> </qresource>
<qresource prefix="/media"> <qresource prefix="/media">
<file>media/ring.ogg</file> <file>media/ring.ogg</file>