qtdoc/examples/demos/dice/PhysicalDie.qml

46 lines
1.2 KiB
QML

// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick3D.Physics
import QtMultimedia
import QtQml
DynamicRigidBody {
id: root
property real diceWidth: 1.9 // cm
property alias atRest: motionTimeout.running
property bool isClose: position.length() < 100
receiveContactReports: true
sendContactReports: true
onBodyContact: (body, positions, impulses, normals) => {
motionTimeout.restart()
const volume = impulses.reduce((acc, vector) => acc + vector.length(), 0)
diceSound.audioOutput.volume = volume / 2000
if (!diceSound.playing)
diceSound.play()
}
Timer {
id: motionTimeout
interval: 500
running: false
repeat: false
}
massMode: DynamicRigidBody.CustomDensity
density: 1.13
collisionShapes: BoxShape {
id: box
extents: Qt.vector3d(1, 1, 1).times(root.diceWidth)
}
Dice_low {
receivesShadows: root.isClose
scale: Qt.vector3d(2.65, 2.65, 2.65).times(root.diceWidth)
}
MediaPlayer {
id: diceSound
source: "sounds/onedice.wav"
loops: 0
audioOutput: AudioOutput {}
}
}