update teleport.js to teleport HMD before avatar

(in theory, not tested)
This commit is contained in:
Andrew Meadows 2016-09-09 16:33:13 -07:00
parent 97623f489c
commit 6b9cdb440b

View file

@ -44,6 +44,7 @@ var COLORS_TELEPORT_TOO_CLOSE = {
var TELEPORT_CANCEL_RANGE = 1; var TELEPORT_CANCEL_RANGE = 1;
var USE_COOL_IN = true; var USE_COOL_IN = true;
var COOL_IN_DURATION = 500; var COOL_IN_DURATION = 500;
var MAX_HMD_AVATAR_SEPARATION = 10.0f;
function ThumbPad(hand) { function ThumbPad(hand) {
this.hand = hand; this.hand = hand;
@ -88,6 +89,8 @@ function Teleporter() {
this.updateConnected = null; this.updateConnected = null;
this.smoothArrivalInterval = null; this.smoothArrivalInterval = null;
this.teleportHand = null; this.teleportHand = null;
this.distance = 0.0;
this.teleportMode = "HMDAndAvatarTogether";
this.tooClose = false; this.tooClose = false;
this.inCoolIn = false; this.inCoolIn = false;
@ -459,7 +462,8 @@ function Teleporter() {
z: intersection.intersection.z z: intersection.intersection.z
}; };
this.tooClose = isTooCloseToTeleport(position); this.distance = Vec3.distance(MyAvatar.position, position);
this.tooClose = this.distance <= TELEPORT_CANCEL_RANGE;
var towardUs = Quat.fromPitchYawRollDegrees(0, euler.y, 0); var towardUs = Quat.fromPitchYawRollDegrees(0, euler.y, 0);
Overlays.editOverlay(this.targetOverlay, { Overlays.editOverlay(this.targetOverlay, {
@ -480,7 +484,8 @@ function Teleporter() {
z: intersection.intersection.z z: intersection.intersection.z
}; };
this.tooClose = isTooCloseToTeleport(position); this.distance = Vec3.distance(MyAvatar.position, position);
this.tooClose = this.distance <= TELEPORT_CANCEL_RANGE;
var towardUs = Quat.fromPitchYawRollDegrees(0, euler.y, 0); var towardUs = Quat.fromPitchYawRollDegrees(0, euler.y, 0);
Overlays.editOverlay(this.cancelOverlay, { Overlays.editOverlay(this.cancelOverlay, {
@ -509,6 +514,15 @@ function Teleporter() {
var offset = getAvatarFootOffset(); var offset = getAvatarFootOffset();
this.intersection.intersection.y += offset; this.intersection.intersection.y += offset;
this.exitTeleportMode(); this.exitTeleportMode();
if (MyAvatar.hmdLeanRecenterEnabled) {
if (this.distance > MAX_HMD_AVATAR_SEPARATION) {
this.teleportMode = "HMDAndAvatarTogether";
} else {
this.teleportMode = "HMDFirstAvatarWillFollow";
}
} else {
this.teleportMode = "AvatarOnly";
}
this.smoothArrival(); this.smoothArrival();
} }
}; };
@ -538,6 +552,22 @@ function Teleporter() {
return arrivalPoints; return arrivalPoints;
}; };
this.teleportTo = function(landingPoint) {
if (this.teleportMode === "AvatarOnly") {
MyAvatar.position = landingPoint;
} else if (this.teleportMode === "HMDAndAvatarTogether") {
var leanEnabled = MyAvatar.hmdLeanRecenterEnabled;
MyAvatar.setHMDLeanRecenterEnabled(false);
MyAvatar.position = landingPoint;
HMD.snapToAvatar();
MyAvatar.hmdLeanRecenterEnabled = leanEnabled;
} else if (this.teleportMode === "HMDFirstAvatarWillFollow") {
var eyeOffset = Vec3.subtract(MyAvatar.getEyePosition(), MyAvatar.position);
landingPoint = Vec3.sum(landingPoint, eyeOffset);
HMD.setPosition(landingPoint);
}
}
this.smoothArrival = function() { this.smoothArrival = function() {
_this.arrivalPoints = _this.getArrivalPoints(MyAvatar.position, _this.intersection.intersection); _this.arrivalPoints = _this.getArrivalPoints(MyAvatar.position, _this.intersection.intersection);
@ -548,7 +578,7 @@ function Teleporter() {
return; return;
} }
var landingPoint = _this.arrivalPoints.shift(); var landingPoint = _this.arrivalPoints.shift();
MyAvatar.position = landingPoint; _this.teleportTo(landingPoint);
if (_this.arrivalPoints.length === 1 || _this.arrivalPoints.length === 0) { if (_this.arrivalPoints.length === 1 || _this.arrivalPoints.length === 0) {
_this.deleteTargetOverlay(); _this.deleteTargetOverlay();
@ -627,10 +657,6 @@ function isMoving() {
} }
}; };
function isTooCloseToTeleport(position) {
return Vec3.distance(MyAvatar.position, position) <= TELEPORT_CANCEL_RANGE;
};
function registerMappings() { function registerMappings() {
mappingName = 'Hifi-Teleporter-Dev-' + Math.random(); mappingName = 'Hifi-Teleporter-Dev-' + Math.random();
teleportMapping = Controller.newMapping(mappingName); teleportMapping = Controller.newMapping(mappingName);