fixed edit mode and allow to scroll off tablet

This commit is contained in:
Dante Ruiz 2017-11-01 15:16:02 -07:00
parent 66f07cb21b
commit 0580e23686
5 changed files with 40 additions and 99 deletions

View file

@ -11,7 +11,7 @@
controllerDispatcherPlugins:true, controllerDispatcherPluginsNeedSort:true,
LEFT_HAND, RIGHT_HAND, NEAR_GRAB_PICK_RADIUS, DEFAULT_SEARCH_SPHERE_DISTANCE, DISPATCHER_PROPERTIES,
getGrabPointSphereOffset, HMD, MyAvatar, Messages, findHandChildEntities, Pointers, PickType, COLORS_GRAB_SEARCHING_HALF_SQUEEZE
COLORS_GRAB_SEARCHING_FULL_SQUEEZE, COLORS_GRAB_DISTANCE_HOLD, Picks
COLORS_GRAB_SEARCHING_FULL_SQUEEZE, COLORS_GRAB_DISTANCE_HOLD, Picks, TRIGGER_ON_VALUE
*/
controllerDispatcherPlugins = {};
@ -262,41 +262,40 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js");
var laserLocked;
if (_this.laserVisibleStatus[LEFT_HAND]) {
laserLocked = _this.laserLockStatus[LEFT_HAND];
_this.updateLaserRenderState(_this.leftControllerPointer,_this.leftTriggerClicked, laserLocked);
_this.updateLaserRenderState(_this.leftControllerPointer,_this.leftTriggerClicked, _this.leftTriggerValue, laserLocked);
} else {
Pointers.setRenderState(_this.leftControllerPointer, "");
}
if (_this.laserVisibleStatus[RIGHT_HAND]) {
laserLocked = _this.laserLockStatus[RIGHT_HAND];
_this.updateLaserRenderState(_this.rightControllerPointer, _this.rightTriggerClicked, laserLocked);
_this.updateLaserRenderState(_this.rightControllerPointer, _this.rightTriggerClicked, _this.rightTriggerValue, laserLocked);
} else {
Pointers.setRenderState(_this.rightControllerPointer, "");
}
if (_this.laserVisibleStatus[LEFT_HAND + HUD_LASER_OFFSET]) {
_this.updateLaserRenderState(_this.leftControllerHudRayPick, _this.leftTriggerClicked, false);
_this.updateLaserRenderState(_this.leftControllerHudRayPick, _this.leftTriggerClicked, _this.leftTriggerValue, false);
} else {
Pointers.setRenderState(_this.leftControllerHudRayPick, "");
}
if (_this.laserVisibleStatus[RIGHT_HAND + HUD_LASER_OFFSET]) {
_this.updateLaserRenderState(_this.rightControllerHudRayPick, _this.rightTriggerClicked, false);
_this.updateLaserRenderState(_this.rightControllerHudRayPick, _this.rightTriggerClicked, _this.rightTriggerValue, false);
} else {
Pointers.setRenderState(_this.rightControllerHudRayPick, "");
}
};
this.updateLaserRenderState = function(laser, triggerClicked, laserLocked) {
var mode = "hold";
if (!laserLocked) {
if (triggerClicked) {
mode = "full";
} else {
mode = "half";
}
this.updateLaserRenderState = function(laser, triggerClicked, triggerValue, laserLocked) {
var mode = "";
if (laserLocked) {
mode = "hold";
} else if (triggerClicked) {
mode = "full";
} else if (triggerValue > TRIGGER_ON_VALUE) {
mode = "half";
}
Pointers.setRenderState(laser, mode);
};

View file

@ -26,7 +26,8 @@ Script.include("/~/system/libraries/utils.js");
160,
this.hand === RIGHT_HAND ? ["rightHand", "rightHandEquip", "rightHandTrigger"] : ["leftHand", "leftHandEquip", "leftHandTrigger"],
[],
100);
100,
this.hand);
this.nearTablet = function(overlays) {
for (var i = 0; i < overlays.length; i++) {
@ -69,6 +70,10 @@ Script.include("/~/system/libraries/utils.js");
}
};
this.exitModule = function() {
return makeRunningValues(false, [], []);
};
this.isReady = function(controllerData) {
if (isInEditMode()) {
this.triggerClicked = false;

View file

@ -26,13 +26,6 @@ Script.include("/~/system/libraries/controllers.js");
100,
this.hand);
this.processLaser = function(controllerData) {
if (this.shouldExit(controllerData)) {
return false;
}
return true;
};
this.grabModuleWantsNearbyOverlay = function(controllerData) {
if (controllerData.triggerValues[this.hand] > TRIGGER_ON_VALUE) {
var nearGrabName = this.hand === RIGHT_HAND ? "RightNearParentingGrabOverlay" : "LeftNearParentingGrabOverlay";
@ -51,15 +44,19 @@ Script.include("/~/system/libraries/controllers.js");
return false;
};
this.shouldExit = function(controllerData) {
this.isPointingAtWebEntity = function(controllerData) {
var intersection = controllerData.rayPicks[this.hand];
var offOverlay = (intersection.type !== Picks.INTERSECTED_OVERLAY);
var triggerOff = (controllerData.triggerValues[this.hand] < TRIGGER_OFF_VALUE);
if (triggerOff) {
this.deleteContextOverlay();
var entityProperty = Entities.getEntityProperties(intersection.objectID);
var entityType = entityProperty.type;
if ((intersection.type === Picks.INTERSECTED_ENTITY && entityType === "Web")) {
return true;
}
var grabbingOverlay = this.grabModuleWantsNearbyOverlay(controllerData);
return offOverlay || grabbingOverlay || triggerOff;
return false;
};
this.isPointingAtOverlay = function(controllerData) {
var intersection = controllerData.rayPicks[this.hand];
return intersection.type === Picks.INTERSECTED_OVERLAY;
};
this.deleteContextOverlay = function() {
@ -75,14 +72,21 @@ Script.include("/~/system/libraries/controllers.js");
};
this.isReady = function (controllerData) {
if (this.processLaser(controllerData)) {
return makeRunningValues(true, [], []);
if (this.isPointingAtOverlay(controllerData) || this.isPointingAtWebEntity(controllerData)) {
if (controllerData.triggerValues[this.hand] > TRIGGER_OFF_VALUE) {
return makeRunningValues(true, [], []);
}
}
return makeRunningValues(false, [], []);
};
this.run = function (controllerData, deltaTime) {
return this.isReady(controllerData);
var grabModuleNeedsToRun = this.grabModuleWantsNearbyOverlay(controllerData);
if (controllerData.triggerValues[this.hand] > TRIGGER_OFF_VALUE && !grabModuleNeedsToRun) {
return makeRunningValues(true, [], []);
}
this.deleteContextOverlay();
return makeRunningValues(false, [], []);
};
}

View file

@ -1,66 +0,0 @@
"use strict";
// webEntityLaserInput.js
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
/* jslint bitwise: true */
/* global Script, Controller, LaserPointers, RayPick, RIGHT_HAND, LEFT_HAND, Vec3, Quat, getGrabPointSphereOffset,
makeRunningValues, Entities, enableDispatcherModule, disableDispatcherModule, makeDispatcherModuleParameters,
PICK_MAX_DISTANCE, COLORS_GRAB_SEARCHING_HALF_SQUEEZE, COLORS_GRAB_SEARCHING_FULL_SQUEEZE, COLORS_GRAB_DISTANCE_HOLD,
DEFAULT_SEARCH_SPHERE_DISTANCE, TRIGGER_ON_VALUE, ZERO_VEC, Overlays, Picks
*/
Script.include("/~/system/libraries/controllerDispatcherUtils.js");
Script.include("/~/system/libraries/controllers.js");
(function() {
function WebEntityLaserInput(hand) {
this.hand = hand;
this.parameters = makeDispatcherModuleParameters(
550,
this.hand === RIGHT_HAND ? ["rightHand"] : ["leftHand"],
[],
100);
this.isPointingAtWebEntity = function(controllerData) {
var intersection = controllerData.rayPicks[this.hand];
var entityProperty = Entities.getEntityProperties(intersection.objectID);
var entityType = entityProperty.type;
if ((intersection.type === Picks.INTERSECTED_ENTITY && entityType === "Web")) {
return true;
}
return false;
};
this.isReady = function(controllerData) {
if (this.isPointingAtWebEntity(controllerData)) {
return makeRunningValues(true, [], []);
}
return makeRunningValues(false, [], []);
};
this.run = function(controllerData, deltaTime) {
if (!this.isPointingAtWebEntity(controllerData)) {
return makeRunningValues(false, [], []);
}
return makeRunningValues(true, [], []);
};
}
var leftWebEntityLaserInput = new WebEntityLaserInput(LEFT_HAND);
var rightWebEntityLaserInput = new WebEntityLaserInput(RIGHT_HAND);
enableDispatcherModule("LeftWebEntityLaserInput", leftWebEntityLaserInput);
enableDispatcherModule("RightWebEntityLaserInput", rightWebEntityLaserInput);
function cleanup() {
disableDispatcherModule("LeftWebEntityLaserInput");
disableDispatcherModule("RightWebEntityLaserInput");
}
Script.scriptEnding.connect(cleanup);
}());

View file

@ -23,7 +23,6 @@ var CONTOLLER_SCRIPTS = [
"controllerModules/equipEntity.js",
"controllerModules/nearTrigger.js",
"controllerModules/overlayLaserInput.js",
"controllerModules/webEntityLaserInput.js",
"controllerModules/inEditMode.js",
"controllerModules/inVREditMode.js",
"controllerModules/disableOtherModule.js",