mirror of
https://github.com/overte-org/overte.git
synced 2025-04-26 17:56:15 +02:00
73 lines
No EOL
2.5 KiB
JavaScript
73 lines
No EOL
2.5 KiB
JavaScript
//
|
|
// handControlledHead.js
|
|
// examples
|
|
//
|
|
// Created by Alessandro Signa on 10/11/15.
|
|
// Copyright 2015 High Fidelity, Inc.
|
|
//
|
|
// This script allows you to look around, driving the rotation of the avatar's head by the right hand orientation.
|
|
//
|
|
// Distributed under the Apache License, Version 2.0.
|
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
|
|
|
const YAW_MULTIPLIER = 20000;
|
|
const PITCH_MULTIPLIER = 15000;
|
|
const EPSILON = 0.001;
|
|
var firstPress = true;
|
|
var handPreviousVerticalRotation = 0.0;
|
|
var handCurrentVerticalRotation = 0.0;
|
|
var handPreviousHorizontalRotation = 0.0;
|
|
var handCurrentHorizontalRotation = 0.0;
|
|
var rotatedHandPosition;
|
|
var rotatedTipPosition;
|
|
|
|
function update(deltaTime) {
|
|
if(Controller.getValue(Controller.Standard.RightPrimaryThumb)){
|
|
pitchManager(deltaTime);
|
|
}else if(!firstPress){
|
|
firstPress = true;
|
|
}
|
|
if(firstPress && MyAvatar.headYaw){
|
|
MyAvatar.headYaw -= MyAvatar.headYaw/10;
|
|
}
|
|
|
|
}
|
|
|
|
function pitchManager(deltaTime){
|
|
|
|
rotatedHandPosition = Vec3.multiplyQbyV(Quat.fromPitchYawRollDegrees(0, -MyAvatar.bodyYaw, 0), MyAvatar.getRightHandPosition());
|
|
rotatedTipPosition = Vec3.multiplyQbyV(Quat.fromPitchYawRollDegrees(0, -MyAvatar.bodyYaw, 0), MyAvatar.getRightHandTipPosition());
|
|
|
|
handCurrentVerticalRotation = Vec3.subtract(rotatedTipPosition, rotatedHandPosition).y;
|
|
handCurrentHorizontalRotation = Vec3.subtract(rotatedTipPosition, rotatedHandPosition).x;
|
|
|
|
var handCurrentHorizontalRotationFiltered = handCurrentHorizontalRotation;
|
|
|
|
//to avoid yaw drift
|
|
if((handCurrentHorizontalRotation - handPreviousHorizontalRotation) < EPSILON && (handCurrentHorizontalRotation - handPreviousHorizontalRotation) > -EPSILON){
|
|
handCurrentHorizontalRotationFiltered = handPreviousHorizontalRotation;
|
|
}
|
|
|
|
if(firstPress){
|
|
handPreviousVerticalRotation = handCurrentVerticalRotation;
|
|
handPreviousHorizontalRotation = handCurrentHorizontalRotation;
|
|
firstPress = false;
|
|
}
|
|
|
|
MyAvatar.headPitch += (handCurrentVerticalRotation - handPreviousVerticalRotation)*PITCH_MULTIPLIER*deltaTime;
|
|
MyAvatar.headYaw -= (handCurrentHorizontalRotationFiltered - handPreviousHorizontalRotation)*YAW_MULTIPLIER*deltaTime;
|
|
|
|
|
|
handPreviousVerticalRotation = handCurrentVerticalRotation;
|
|
handPreviousHorizontalRotation = handCurrentHorizontalRotationFiltered;
|
|
|
|
|
|
}
|
|
|
|
function clean(){
|
|
MyAvatar.headYaw = 0.0;
|
|
}
|
|
|
|
|
|
Script.update.connect(update);
|
|
Script.scriptEnding.connect(clean); |