mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-22 11:00:48 +03:00
Move effects into a separate file
This commit is contained in:
parent
c751c487da
commit
5f3ecc213f
3 changed files with 117 additions and 90 deletions
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
111
resources/qml/ui/TimelineEffects.qml
Normal file
111
resources/qml/ui/TimelineEffects.qml
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in a new issue