qtdoc/examples/demos/xr_physicsbase_teleportation/TorchGripper.qml

54 lines
1.6 KiB
QML

// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick3D
import QtQuick3D.Physics
import QtQuick3D.Xr
Node {
id: gripper
property alias hand: action.hand
property Node torchBody: null
XrInputAction {
id: action
actionId: [XrInputAction.SqueezeValue]
onValueChanged: {
if (gripper.torchBody) {
if (value > 0.5) {
gripper.torchBody.attachedTo = gripper
}else if (gripper.torchBody.attachedTo) {
gripper.torchBody.attachedTo = null
gripper.torchBody = null
}
}
}
}
TriggerBody {
scale: Qt.vector3d(0.03, 0.03, 0.03)
collisionShapes: [SphereShape{}]
onBodyEntered: (body)=>{
if (body.objectName === "Torch" &&
!gripper.torchBody) {
gripper.torchBody = body
}
}
onBodyExited: (body)=>{
if (body.objectName === "Torch" &&
gripper.torchBody &&
!gripper.torchBody.attachedTo) {
gripper.torchBody = null
}
}
Model {
source: "#Sphere"
materials: PrincipledMaterial {
baseColor: gripper.torchBody ? "green" : "white"
}
}
}
}