qtdoc/examples/demos/xr_physicsbase_teleportation/TargetIndicator.qml

78 lines
2.0 KiB
QML

// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick3D
Node {
id: targetIndicator
function show(){
hideAnimation.stop()
showAnimation.start()
}
function hide(){
showAnimation.stop()
hideAnimation.start()
}
function moveTo(pos : vector3d) {
targetIndicator.position = pos
}
visible: opacity > 0.01
ParallelAnimation {
id: showAnimation
NumberAnimation {
target: targetIndicator
properties: "opacity"
to: 0.99
duration: 50
}
NumberAnimation {
target: targetIndicator
properties: "scaleValue"
to: 0.5
easing.type: Easing.OutBack
}
}
ParallelAnimation {
id: hideAnimation
NumberAnimation {
target: targetIndicator
properties: "opacity"
to: 0.0
duration: 200
}
NumberAnimation {
target: targetIndicator
properties: "scaleValue"
to: 0.0
easing.type: Easing.OutBack
}
}
property real scaleValue: 0.0
scale: Qt.vector3d(scaleValue, 3.0, scaleValue)
opacity: 0.0
Model {
y: 50
source: "#Cylinder"
materials: CustomMaterial {
id: material
property real time: 0
NumberAnimation {
target: material
property: "time"
running: targetIndicator.visible
loops: -1
from: 0
to: Math.PI
duration: 500
}
property vector3d indicatorColor: Qt.vector3d(0, 1, 0)
depthDrawMode: Material.AlwaysDepthDraw
shadingMode: CustomMaterial.Unshaded
cullMode: Material.BackFaceCulling
vertexShader: "media/shaders/target_indicator.vert"
fragmentShader: "media/shaders/target_indicator.frag"
}
}
}