diff options
author | Andy Nichols <andy.nichols@qt.io> | 2023-06-08 16:25:47 +0200 |
---|---|---|
committer | Andy Nichols <nezticle@gmail.com> | 2023-06-12 16:05:36 +0200 |
commit | f7cc7656e2bd01851c5fb04747b0c8439ffa9dbe (patch) | |
tree | 3999f4a6efc61e1841e21941fd6bf8a51025d121 /examples/quick3d/particles3d/SystemPlayPause.qml | |
parent | 16c734c0a26b5fed0542f3ef2fee07be74a45da8 (diff) |
Fix qmllint errors in particles3d example
Pick-to: 6.6
Change-Id: I10126755f2a42fb365219f09b9c54e45ed8e4316
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
Diffstat (limited to 'examples/quick3d/particles3d/SystemPlayPause.qml')
-rw-r--r-- | examples/quick3d/particles3d/SystemPlayPause.qml | 359 |
1 files changed, 359 insertions, 0 deletions
diff --git a/examples/quick3d/particles3d/SystemPlayPause.qml b/examples/quick3d/particles3d/SystemPlayPause.qml new file mode 100644 index 00000000..a928ad6a --- /dev/null +++ b/examples/quick3d/particles3d/SystemPlayPause.qml @@ -0,0 +1,359 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +pragma ComponentBehavior: Bound + +import QtQuick +import QtQuick3D +import QtQuick3D.Particles3D +import QtQuick.Controls + +Item { + id: mainWindow + + readonly property int burstCount: 300 + readonly property int maxEmitterCount: 10 + readonly property int trailEmitRate: 10 + + property var modelEmitters: [] + property int modelEmittersAmount: 0 + property var spriteEmitters: [] + property int spriteEmittersAmount: 0 + + function createModelEmitter() { + var newObject = modelEmitterComponent.createObject(psystem); + modelEmitters.push(newObject); + modelEmittersAmount = modelEmitters.length; + } + + function createSpriteEmitter() { + var newObject = spriteEmitterComponent.createObject(psystem); + spriteEmitters.push(newObject); + spriteEmittersAmount = spriteEmitters.length; + } + + anchors.fill: parent + Component.onCompleted: { + createModelEmitter(); + createSpriteEmitter(); + } + + View3D { + id: view3D + anchors.fill: parent + camera: camera + + environment: SceneEnvironment { + clearColor: "#202020" + backgroundMode: SceneEnvironment.Color + antialiasingMode: AppSettings.antialiasingMode + antialiasingQuality: AppSettings.antialiasingQuality + } + + PerspectiveCamera { + id: camera + position: Qt.vector3d(0, 100, 600) + } + + PointLight { + position: Qt.vector3d(0, 400, 100) + brightness: 10 + ambientColor: Qt.rgba(0.3, 0.3, 0.3, 1.0) + } + + // Model shared between particles + Component { + id: particleComponent + Model { + source: "#Cube" + scale: Qt.vector3d(0.2, 0.2, 0.2) + materials: DefaultMaterial { + } + } + } + + Component { + id: modelEmitterComponent + Model { + source: "#Cylinder" + materials: DefaultMaterial {} + position: Qt.vector3d(Math.random() * 250 - 300, -150, 0) + scale: Qt.vector3d(0.5, 0.1, 0.5) + ParticleEmitter3D { + system: psystem + particle: particleWhite + particleScaleVariation: 0.4 + particleRotationVariation: Qt.vector3d(180, 180, 180) + particleRotationVelocityVariation: Qt.vector3d(200, 200, 200); + velocity: VectorDirection3D { + direction: Qt.vector3d(0, 400, 0) + directionVariation: Qt.vector3d(40, 40, 0) + } + emitRate: 2 + lifeSpan: 4000 + } + } + } + + Component { + id: spriteEmitterComponent + Model { + source: "#Cylinder" + materials: DefaultMaterial { diffuseColor: "#ffff00" } + position: Qt.vector3d(Math.random() * 250 + 50, -150, 0) + scale: Qt.vector3d(0.5, 0.1, 0.5) + ParticleEmitter3D { + system: psystem + particle: particleSprite + particleScaleVariation: 0.4 + particleRotationVariation: Qt.vector3d(180, 180, 180) + particleRotationVelocityVariation: Qt.vector3d(200, 200, 200); + velocity: VectorDirection3D { + direction: Qt.vector3d(0, 400, 0) + directionVariation: Qt.vector3d(40, 40, 0) + } + emitRate: 2 + lifeSpan: 4000 + } + } + } + + ParticleSystem3D { + id: psystem + + useRandomSeed: checkBoxRandomize.checked + + onTimeChanged: { + if (time > 9500) + psystem.paused = true; + } + + // Particles + ModelParticle3D { + id: particleTrailModel + delegate: particleComponent + maxAmount: mainWindow.maxEmitterCount * 8 * mainWindow.trailEmitRate + fadeInDuration: 200 + fadeOutDuration: 500 + color: "#808080" + colorVariation: Qt.vector4d(0.2, 0.2, 0.2, 0.5) + unifiedColorVariation: true + } + ModelParticle3D { + id: particleWhite + delegate: particleComponent + maxAmount: mainWindow.maxEmitterCount * 8 + color: "#ffffff" + } + ModelParticle3D { + id: particleRed + delegate: particleComponent + maxAmount: mainWindow.burstCount * 3 + color: "#ff0000" + } + SpriteParticle3D { + id: particleSprite + sprite: Texture { + source: "images/star2.png" + } + maxAmount: mainWindow.maxEmitterCount * 8 + color: "#ffff00" + particleScale: 30.0 + } + SpriteParticle3D { + id: particleTrailSprite + sprite: Texture { + source: "images/star2.png" + } + maxAmount: mainWindow.maxEmitterCount * 8 * mainWindow.trailEmitRate + fadeInDuration: 200 + fadeOutDuration: 500 + color: "#999900" + particleScale: 15.0 + } + + // Emitters, one per particle + TrailEmitter3D { + id: modelTrailEmitter + particle: particleTrailModel + follow: particleWhite + particleScale: 0.5 + particleScaleVariation: 0.2 + particleRotationVariation: Qt.vector3d(180, 180, 180) + particleRotationVelocityVariation: Qt.vector3d(100, 100, 100); + velocity: VectorDirection3D { + directionVariation: Qt.vector3d(20, 20, 20) + } + emitRate: mainWindow.trailEmitRate + lifeSpan: 1000 + } + TrailEmitter3D { + id: spriteTrailEmitter + particle: particleTrailSprite + follow: particleSprite + particleScaleVariation: 0.2 + particleRotationVariation: Qt.vector3d(180, 180, 180) + particleRotationVelocityVariation: Qt.vector3d(100, 100, 100); + velocity: VectorDirection3D { + directionVariation: Qt.vector3d(20, 20, 20) + } + emitRate: mainWindow.trailEmitRate + lifeSpan: 1000 + } + + ParticleEmitter3D { + id: burstEmitter + particle: particleRed + scale: Qt.vector3d(0.5, 0.5, 0.5) + particleScale: 0.2 + particleEndScale: 0.4 + particleRotationVariation: Qt.vector3d(180, 180, 180) + particleRotationVelocityVariation: Qt.vector3d(200, 200, 200); + shape: ParticleShape3D { + type: ParticleShape3D.Sphere + fill: false + } + velocity: TargetDirection3D { + position: burstEmitter.position + magnitude: -4.0 + } + lifeSpan: 1000 + lifeSpanVariation: 500 + } + + Gravity3D { + direction: Qt.vector3d(0, 1, 0) + magnitude: -200 + } + } + } + + MouseArea { + anchors.fill: parent + onClicked: { + var pos = view3D.mapTo3DScene(Qt.vector3d(mouseX, mouseY, camera.z)); + burstEmitter.setPosition(pos); + burstEmitter.burst(mainWindow.burstCount); + } + } + + SettingsView { + Row { + spacing: 10 + anchors.horizontalCenter: parent.horizontalCenter + Button { + text: psystem.running ? qsTr("Stop") : qsTr("Start") + font.pointSize: AppSettings.fontSizeSmall + onClicked: { + psystem.running = !psystem.running; + } + } + Button { + text: psystem.paused ? qsTr("Continue") : qsTr("Pause") + font.pointSize: AppSettings.fontSizeSmall + enabled: psystem.running + onClicked: { + psystem.paused = !psystem.paused; + } + } + } + Item { + width: 1 + height: 10 + } + CustomLabel { + text: "ParticleSystem time" + opacity: timeSlider.sliderEnabled ? 1.0 : 0.4 + } + CustomSlider { + id: timeSlider + sliderValue: psystem.time + sliderEnabled: psystem.paused + fromValue: 0 + toValue: 10000 + onSliderValueChanged: psystem.setTime(sliderValue); + } + Item { + width: 1 + height: 10 + } + CustomLabel { + text: "ParticleSystem seed: " + psystem.seed + } + CustomCheckBox { + id: checkBoxRandomize + text: "Use random seed" + checked: true + } + CustomLabel { + text: "Custom seed" + opacity: psystem.useRandomSeed ? 0.4 : 1.0 + } + CustomSlider { + sliderValue: 0 + sliderEnabled: !psystem.useRandomSeed + fromValue: 0 + toValue: 99 + sliderStepSize: 1 + onSliderValueChanged: psystem.setSeed(sliderValue); + } + Item { width: 1; height: 20 } + CustomLabel { + anchors.horizontalCenter: parent.horizontalCenter + text: "Model Emitters: " + mainWindow.modelEmittersAmount + } + Item { width: 1; height: 5 } + Row { + spacing: 10 + anchors.horizontalCenter: parent.horizontalCenter + Button { + text: qsTr("Add") + font.pointSize: AppSettings.fontSizeSmall + enabled: mainWindow.modelEmittersAmount < 10 + onClicked: mainWindow.createModelEmitter(); + } + Button { + text: qsTr("Remove") + font.pointSize: AppSettings.fontSizeSmall + enabled: mainWindow.modelEmittersAmount > 0 + onClicked: { + let instance = mainWindow.modelEmitters.pop(); + instance.destroy(); + modelEmittersAmount = mainWindow.modelEmitters.length; + } + } + } + Item { width: 1; height: 20 } + CustomLabel { + anchors.horizontalCenter: parent.horizontalCenter + text: "Sprite Emitters: " + mainWindow.spriteEmittersAmount + } + Item { width: 1; height: 5 } + Row { + spacing: 10 + anchors.horizontalCenter: parent.horizontalCenter + Button { + text: qsTr("Add") + font.pointSize: AppSettings.fontSizeSmall + enabled: mainWindow.spriteEmittersAmount < 10 + onClicked: mainWindow.createSpriteEmitter(); + } + Button { + text: qsTr("Remove") + font.pointSize: AppSettings.fontSizeSmall + enabled: mainWindow.spriteEmittersAmount > 0 + onClicked: { + let instance = mainWindow.spriteEmitters.pop(); + instance.destroy(); + spriteEmittersAmount = mainWindow.spriteEmitters.length; + } + } + } + + } + + LoggingView { + anchors.bottom: parent.bottom + particleSystems: [psystem] + } +} |