Add controller part hiding/showing depending on step

This commit is contained in:
Ryan Huffman 2016-09-08 16:13:18 -07:00
parent 7d57c06313
commit 324365deca
2 changed files with 260 additions and 20 deletions

View file

@ -29,7 +29,8 @@ Script.include("entityData.js");
var BASKET_URL = "http://hifi-content.s3.amazonaws.com/alan/dev/Trach-Can-3.fbx"; var BASKET_URL = "http://hifi-content.s3.amazonaws.com/alan/dev/Trach-Can-3.fbx";
var BASKET_COLLIDER_URL = "http://hifi-content.s3.amazonaws.com/alan/dev/Trash-Can-4.obj"; var BASKET_COLLIDER_URL = "http://hifi-content.s3.amazonaws.com/alan/dev/Trash-Can-4.obj";
var successSound = SoundCache.getSound(Script.resolvePath("success48.wav")); //var successSound = SoundCache.getSound(Script.resolvePath("success48.wav"));
var successSound = SoundCache.getSound("http://hifi-content.s3.amazonaws.com/DomainContent/Tutorial/Sounds/good_one.L.wav");
function beginsWithFilter(value, key) { function beginsWithFilter(value, key) {
return value.indexOf(properties[key]) == 0; return value.indexOf(properties[key]) == 0;
@ -200,6 +201,11 @@ stepDisableControllers.prototype = {
holdEnabled: false, holdEnabled: false,
farGrabEnabled: false, farGrabEnabled: false,
})); }));
setControllerPartsVisible({
touchpad: true,
touchpad_teleport: false,
touchpad_arrows: false
});
onFinish(); onFinish();
}, },
cleanup: function() { cleanup: function() {
@ -217,10 +223,11 @@ var stepWelcome = function(name) {
} }
stepWelcome.prototype = { stepWelcome.prototype = {
start: function(onFinish) { start: function(onFinish) {
Script.setTimeout(onFinish, 8000); this.timerID = Script.setTimeout(onFinish, 8000);
showEntitiesWithTag(this.tag); showEntitiesWithTag(this.tag);
}, },
cleanup: function() { cleanup: function() {
Script.clearTimeout(this.timerID);
hideEntitiesWithTag(this.tag); hideEntitiesWithTag(this.tag);
} }
}; };
@ -291,6 +298,10 @@ function setControllerVisible(name, visible) {
})); }));
} }
function setControllerPartsVisible(parts) {
Messages.sendLocalMessage('Controller-Display-Parts', JSON.stringify(parts));
}
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -341,8 +352,9 @@ stepNearGrab.prototype = {
// When block collides with basket start step 2 // When block collides with basket start step 2
function checkCollides() { function checkCollides() {
print(this.tag, "CHECKING..."); var dist = Vec3.distance(basketPosition, Entities.getEntityProperties(this.boxID, 'position').position);
if (Vec3.distance(basketPosition, Entities.getEntityProperties(this.boxID, 'position').position) < 0.1) { print(this.tag, "CHECKING...", dist);
if (dist < 0.1) {
Script.clearInterval(this.checkCollidesTimer); Script.clearInterval(this.checkCollidesTimer);
this.checkCollidesTimer = null; this.checkCollidesTimer = null;
this.soundInjector = Audio.playSound(successSound, { this.soundInjector = Audio.playSound(successSound, {
@ -423,7 +435,7 @@ stepFarGrab.prototype = {
var checkCollidesTimer = null; var checkCollidesTimer = null;
function checkCollides() { function checkCollides() {
print("CHECKING..."); print("CHECKING...");
if (Vec3.distance(basketPosition, Entities.getEntityProperties(this.boxID, 'position').position) < 0.1) { if (Vec3.distance(basketPosition, Entities.getEntityProperties(this.boxID, 'position').position) < 0.2) {
Script.clearInterval(checkCollidesTimer); Script.clearInterval(checkCollidesTimer);
this.soundInjector = Audio.playSound(successSound, { this.soundInjector = Audio.playSound(successSound, {
position: basketPosition, position: basketPosition,
@ -598,6 +610,12 @@ stepTurnAround.prototype = {
setControllerVisible("left", true); setControllerVisible("left", true);
setControllerVisible("right", true); setControllerVisible("right", true);
setControllerPartsVisible({
touchpad: false,
touchpad_teleport: false,
touchpad_arrows: true
});
showEntitiesWithTag(this.tag); showEntitiesWithTag(this.tag);
var hasTurnedAround = false; var hasTurnedAround = false;
this.interval = Script.setInterval(function() { this.interval = Script.setInterval(function() {
@ -625,6 +643,12 @@ stepTurnAround.prototype = {
setControllerVisible("left", false); setControllerVisible("left", false);
setControllerVisible("right", false); setControllerVisible("right", false);
setControllerPartsVisible({
touchpad: true,
touchpad_teleport: false,
touchpad_arrows: false
});
if (this.interval) { if (this.interval) {
Script.clearInterval(this.interval); Script.clearInterval(this.interval);
} }
@ -648,7 +672,14 @@ var stepTeleport = function(name) {
} }
stepTeleport.prototype = { stepTeleport.prototype = {
start: function(onFinish) { start: function(onFinish) {
setControllerVisible("teleport", true); //setControllerVisible("teleport", true);
setControllerPartsVisible({
touchpad: false,
touchpad_teleport: true,
touchpad_arrows: false
});
Messages.sendLocalMessage('Hifi-Teleport-Disabler', 'none'); Messages.sendLocalMessage('Hifi-Teleport-Disabler', 'none');
// Wait until touching teleport pad... // Wait until touching teleport pad...
@ -678,7 +709,14 @@ stepTeleport.prototype = {
showEntitiesWithTag(this.tag); showEntitiesWithTag(this.tag);
}, },
cleanup: function() { cleanup: function() {
setControllerVisible("teleport", false); //setControllerVisible("teleport", false);
setControllerPartsVisible({
touchpad: true,
touchpad_teleport: false,
touchpad_arrows: false
});
if (this.checkCollidesTimer) { if (this.checkCollidesTimer) {
Script.clearInterval(this.checkCollidesTimer); Script.clearInterval(this.checkCollidesTimer);
} }

View file

@ -213,6 +213,123 @@ var VIVE_CONTROLLER_CONFIGURATION = {
dimensions: viveNaturalDimensions, dimensions: viveNaturalDimensions,
parts: {
//{
// type: "linear",
// modelURL: "",
// input: "Controller.Hardware.Vive.RT",
// minValue: 0.0,
// maxValue: 1.0,
// textOffset: { x: -0.035, y: 0.004, z: -0.005 },
// minPosition: { x: -0.035, y: 0.004, z: -0.005 },
// maxPosition: { x: -0.035, y: 0.004, z: -0.005 },
//},
// The touchpad type draws a dot indicating the current touch/thumb position
// and swaps in textures based on the thumb position.
touchpad: {
type: "touchpad",
//modelURL: "file:///C:\\Users\\Ryan\\Assets\\controller\\vive_trackpad.fbx",
modelURL: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vive_trackpad.fbx",
visibleInput: "Vive.RSTouch",
xInput: "Vive.RX",
yInput: "Vive.RY",
naturalPosition: {"x":0,"y":0.000979491975158453,"z":0.04872849956154823},
minValue: 0.0,
maxValue: 1.0,
minPosition: { x: -0.035, y: 0.004, z: -0.005 },
maxPosition: { x: -0.035, y: 0.004, z: -0.005 },
textureName: "Tex.touchpad-blank",
},
touchpad_teleport: {
type: "touchpad",
//modelURL: "file:///C:\\Users\\Ryan\\Assets\\controller\\vive_trackpad.fbx",
modelURL: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vive_trackpad.fbx",
visibleInput: "Vive.RSTouch",
xInput: "Vive.RX",
yInput: "Vive.RY",
naturalPosition: {"x":0,"y":0.000979491975158453,"z":0.04872849956154823},
minValue: 0.0,
maxValue: 1.0,
minPosition: { x: -0.035, y: 0.004, z: -0.005 },
maxPosition: { x: -0.035, y: 0.004, z: -0.005 },
textureName: "Tex.touchpad-blank",
defaultTextureURL: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vive_trackpad.fbx/Touchpad.fbm/touchpad-teleport.jpg",
},
touchpad_arrows: {
type: "touchpad",
//modelURL: "file:///C:\\Users\\Ryan\\Assets\\controller\\vive_trackpad.fbx",
modelURL: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vive_trackpad.fbx",
visibleInput: "Vive.RSTouch",
xInput: "Vive.RX",
yInput: "Vive.RY",
naturalPosition: {"x":0,"y":0.000979491975158453,"z":0.04872849956154823},
minValue: 0.0,
maxValue: 1.0,
minPosition: { x: -0.035, y: 0.004, z: -0.005 },
maxPosition: { x: -0.035, y: 0.004, z: -0.005 },
textureName: "Tex.touchpad-blank",
defaultTextureURL: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vive_trackpad.fbx/Touchpad.fbm/touchpad-look-arrows.jpg",
areas: [
{
textureURL: "c:%5CUsers%5CRyan%5CAssets%5Ccontroller%5Cvive_trackpad.fbx/Touchpad.fbm/touchpad-look-arrows.jpg",
minX: 0,
maxX: 50,
minY: 0,
maxY: 50
},
{
textureURL: "...",
minX: 0,
maxX: 50,
minY: 0,
maxY: 50
}
]
},
trigger: {
type: "rotational",
modelURL: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vive_trigger.fbx",
input: Controller.Standard.RT,
naturalPosition: {"x":0.000004500150680541992,"y":-0.027690507471561432,"z":0.04830199480056763},
minValue: 0.0,
maxValue: 1.0,
axis: { x: -1, y: 0, z: 0 },
maxAngle: 90,
},
l_grip: {
type: "ignore",
modelURL: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vive_l_grip.fbx",
naturalPosition: {"x":-0.01720449887216091,"y":-0.014324013143777847,"z":0.08714400231838226},
},
r_grip: {
type: "ignore",
modelURL: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vive_r_grip.fbx",
naturalPosition: {"x":0.01720449887216091,"y":-0.014324013143777847,"z":0.08714400231838226},
},
sys_button: {
type: "ignore",
modelURL: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vive_sys_button.fbx",
naturalPosition: {"x":0,"y":0.0020399854984134436,"z":0.08825899660587311},
},
button: {
type: "ignore",
modelURL: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vive_button.fbx",
naturalPosition: {"x":0,"y":0.005480996798723936,"z":0.019918499514460564}
},
button2: {
type: "ignore",
modelURL: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vive_button.fbx",
naturalPosition: {"x":0,"y":0.005480996798723936,"z":0.019918499514460564}
},
},
annotationTextRotation: Quat.fromPitchYawRollDegrees(45, -90, 0), annotationTextRotation: Quat.fromPitchYawRollDegrees(45, -90, 0),
annotations: { annotations: {
// red: { // red: {
@ -363,7 +480,8 @@ var VIVE_CONTROLLER_CONFIGURATION = {
// and swaps in textures based on the thumb position. // and swaps in textures based on the thumb position.
touchpad: { touchpad: {
type: "touchpad", type: "touchpad",
modelURL: "file:///C:\\Users\\Ryan\\Assets\\controller\\vive_trackpad.fbx", //modelURL: "file:///C:\\Users\\Ryan\\Assets\\controller\\vive_trackpad.fbx",
modelURL: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vive_trackpad.fbx",
visibleInput: "Vive.RSTouch", visibleInput: "Vive.RSTouch",
xInput: "Vive.RX", xInput: "Vive.RX",
yInput: "Vive.RY", yInput: "Vive.RY",
@ -373,6 +491,38 @@ var VIVE_CONTROLLER_CONFIGURATION = {
minPosition: { x: -0.035, y: 0.004, z: -0.005 }, minPosition: { x: -0.035, y: 0.004, z: -0.005 },
maxPosition: { x: -0.035, y: 0.004, z: -0.005 }, maxPosition: { x: -0.035, y: 0.004, z: -0.005 },
textureName: "Tex.touchpad-blank", textureName: "Tex.touchpad-blank",
},
touchpad_teleport: {
type: "touchpad",
//modelURL: "file:///C:\\Users\\Ryan\\Assets\\controller\\vive_trackpad.fbx",
modelURL: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vive_trackpad.fbx",
visibleInput: "Vive.RSTouch",
xInput: "Vive.RX",
yInput: "Vive.RY",
naturalPosition: {"x":0,"y":0.000979491975158453,"z":0.04872849956154823},
minValue: 0.0,
maxValue: 1.0,
minPosition: { x: -0.035, y: 0.004, z: -0.005 },
maxPosition: { x: -0.035, y: 0.004, z: -0.005 },
textureName: "Tex.touchpad-blank",
defaultTextureURL: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vive_trackpad.fbx/Touchpad.fbm/touchpad-teleport.jpg",
},
touchpad_arrows: {
type: "touchpad",
//modelURL: "file:///C:\\Users\\Ryan\\Assets\\controller\\vive_trackpad.fbx",
modelURL: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vive_trackpad.fbx",
visibleInput: "Vive.RSTouch",
xInput: "Vive.RX",
yInput: "Vive.RY",
naturalPosition: {"x":0,"y":0.000979491975158453,"z":0.04872849956154823},
minValue: 0.0,
maxValue: 1.0,
minPosition: { x: -0.035, y: 0.004, z: -0.005 },
maxPosition: { x: -0.035, y: 0.004, z: -0.005 },
textureName: "Tex.touchpad-blank",
defaultTextureURL: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vive_trackpad.fbx/Touchpad.fbm/touchpad-look-arrows.jpg",
areas: [ areas: [
{ {
textureURL: "c:%5CUsers%5CRyan%5CAssets%5Ccontroller%5Cvive_trackpad.fbx/Touchpad.fbm/touchpad-look-arrows.jpg", textureURL: "c:%5CUsers%5CRyan%5CAssets%5Ccontroller%5Cvive_trackpad.fbx/Touchpad.fbm/touchpad-look-arrows.jpg",
@ -393,14 +543,43 @@ var VIVE_CONTROLLER_CONFIGURATION = {
trigger: { trigger: {
type: "rotational", type: "rotational",
modelURL: "file:///C:\\Users\\Ryan\\Assets\\controller\\vive_trigger.fbx", modelURL: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vive_trigger.fbx",
input: Controller.Standard.RT, input: Controller.Standard.RT,
naturalPosition: {"x":0.000004500150680541992,"y":-0.027690507471561432,"z":0.04830199480056763}, naturalPosition: {"x":0.000004500150680541992,"y":-0.027690507471561432,"z":0.04830199480056763},
minValue: 0.0, minValue: 0.0,
maxValue: 1.0, maxValue: 1.0,
axis: { x: -1, y: 0, z: 0 }, axis: { x: -1, y: 0, z: 0 },
maxAngle: 90, maxAngle: 90,
} },
l_grip: {
type: "ignore",
modelURL: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vive_l_grip.fbx",
naturalPosition: {"x":-0.01720449887216091,"y":-0.014324013143777847,"z":0.08714400231838226},
},
r_grip: {
type: "ignore",
modelURL: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vive_r_grip.fbx",
naturalPosition: {"x":0.01720449887216091,"y":-0.014324013143777847,"z":0.08714400231838226},
},
sys_button: {
type: "ignore",
modelURL: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vive_sys_button.fbx",
naturalPosition: {"x":0,"y":0.0020399854984134436,"z":0.08825899660587311},
},
button: {
type: "ignore",
modelURL: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vive_button.fbx",
naturalPosition: {"x":0,"y":0.005480996798723936,"z":0.019918499514460564}
},
button2: {
type: "ignore",
modelURL: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vive_button.fbx",
naturalPosition: {"x":0,"y":0.005480996798723936,"z":0.019918499514460564}
},
}, },
annotationTextRotation: Quat.fromPitchYawRollDegrees(180 + 45, 90, 180), annotationTextRotation: Quat.fromPitchYawRollDegrees(180 + 45, 90, 180),
@ -490,15 +669,16 @@ function setupController(config) {
}, },
mappingName: "mapping-display", mappingName: "mapping-display",
hidePart: function(partName) { setPartVisible: function(partName, visible) {
Overlays.editOverlay(this.partOverlays[partName], { print("Setting part visible", partName, visible);
visible: false if (partName in this.partOverlays) {
}); print("FOUND");
}, for (var i = 0; i < this.partOverlays[partName].length; ++i) {
showPart: function(partName) { Overlays.editOverlay(this.partOverlays[partName][i], {
Overlays.editOverlay(this.partOverlays[partName], { visible: visible
visible: true });
}); }
}
}, },
}; };
var mapping = Controller.newMapping(controllerDisplay.mappingName); var mapping = Controller.newMapping(controllerDisplay.mappingName);
@ -619,6 +799,7 @@ function setupController(config) {
parentID: PARENT_ID, parentID: PARENT_ID,
parentJointIndex: controller.jointIndex, parentJointIndex: controller.jointIndex,
ignoreRayIntersection: true, ignoreRayIntersection: true,
//visible: false
}); });
if (part.type == "rotational") { if (part.type == "rotational") {
@ -665,12 +846,22 @@ function setupController(config) {
mapping.from([yinput]).peek().invert().to(function(value) { mapping.from([yinput]).peek().invert().to(function(value) {
print("Y", value); print("Y", value);
}); });
if (part.defaultTextureURL) {
var textures = {};
textures[part.textureName] = part.defaultTextureURL;
Overlays.editOverlay(overlayID, {
textures: textures
});
}
} else { } else {
print("TYPE NOT SUPPORTED: ", part.type); print("TYPE NOT SUPPORTED: ", part.type);
} }
controllerDisplay.overlays.push(overlayID); controllerDisplay.overlays.push(overlayID);
controllerDisplay.partOverlays[partName] = overlayID; if (!(partName in controllerDisplay.partOverlays)) {
controllerDisplay.partOverlays[partName] = [];
}
controllerDisplay.partOverlays[partName].push(overlayID);
} }
} }
} }
@ -709,10 +900,18 @@ var handleMessages = function(channel, message, sender) {
Overlays.editOverlay(c.annotations[name][i], { visible: visible }); Overlays.editOverlay(c.annotations[name][i], { visible: visible });
} }
} }
} else if (channel === 'Controller-Display-Parts') {
print('here part');
var data = JSON.parse(message);
for (var name in data) {
var visible = data[name];
c.setPartVisible(name, visible);
}
} }
} }
} }
Messages.messageReceived.connect(handleMessages); Messages.messageReceived.connect(handleMessages);
var MAPPING_NAME = "com.highfidelity.handControllerGrab.disable"; var MAPPING_NAME = "com.highfidelity.handControllerGrab.disable";
@ -733,6 +932,9 @@ Controller.enableMapping(MAPPING_NAME);
//var c = setupController(TOUCH_CONTROLLER_CONFIGURATION); //var c = setupController(TOUCH_CONTROLLER_CONFIGURATION);
var c = setupController(VIVE_CONTROLLER_CONFIGURATION); var c = setupController(VIVE_CONTROLLER_CONFIGURATION);
//c.setPartVisible("touchpad", false);
//c.setPartVisible("touchpad_teleport", false);
//MyAvatar.shouldRenderLocally = false; //MyAvatar.shouldRenderLocally = false;
Script.scriptEnding.connect(function() { Script.scriptEnding.connect(function() {
deleteControllerDisplay(c); deleteControllerDisplay(c);