diff --git a/interface/resources/html/img/controls-help-oculus.png b/interface/resources/html/img/controls-help-oculus.png
index 85e25c2a19..0bd0a656de 100644
Binary files a/interface/resources/html/img/controls-help-oculus.png and b/interface/resources/html/img/controls-help-oculus.png differ
diff --git a/interface/resources/meshes/controller/touch/Oculus-Labels-L.fbx b/interface/resources/meshes/controller/touch/Oculus-Labels-L.fbx
index 4f1f60be0b..50f415b7ca 100644
Binary files a/interface/resources/meshes/controller/touch/Oculus-Labels-L.fbx and b/interface/resources/meshes/controller/touch/Oculus-Labels-L.fbx differ
diff --git a/interface/resources/meshes/controller/touch/Oculus-Labels-R.fbx b/interface/resources/meshes/controller/touch/Oculus-Labels-R.fbx
index 49a3d6c832..9e9d92541c 100644
Binary files a/interface/resources/meshes/controller/touch/Oculus-Labels-R.fbx and b/interface/resources/meshes/controller/touch/Oculus-Labels-R.fbx differ
diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js
index 513e70d18c..2ed09232e6 100644
--- a/scripts/system/controllers/handControllerGrab.js
+++ b/scripts/system/controllers/handControllerGrab.js
@@ -195,6 +195,8 @@ var STATE_OVERLAY_TOUCHING = 8;
var holdEnabled = true;
var nearGrabEnabled = true;
var farGrabEnabled = true;
+var myAvatarScalingEnabled = true;
+var objectScalingEnabled = true;
// "collidesWith" is specified by comma-separated list of group names
// the possible group names are: static, dynamic, kinematic, myAvatar, otherAvatar
@@ -2312,6 +2314,10 @@ function MyController(hand) {
};
this.maybeScale = function(props) {
+ if (!objectScalingEnabled) {
+ return;
+ }
+
if (!this.shouldScale) {
// If both secondary triggers squeezed, and the non-holding hand is empty, start scaling
if (this.secondarySqueezed() && this.getOtherHandController().secondarySqueezed() && this.getOtherHandController().state === STATE_OFF) {
@@ -2331,6 +2337,10 @@ function MyController(hand) {
}
this.maybeScaleMyAvatar = function() {
+ if (!myAvatarScalingEnabled) {
+ return;
+ }
+
if (!this.shouldScale) {
// If both secondary triggers squeezed, start scaling
if (this.secondarySqueezed() && this.getOtherHandController().secondarySqueezed()) {
@@ -3016,6 +3026,14 @@ var handleHandMessages = function(channel, message, sender) {
print("farGrabEnabled: ", data.farGrabEnabled);
farGrabEnabled = data.farGrabEnabled;
}
+ if (data.myAvatarScalingEnabled !== undefined) {
+ print("myAvatarScalingEnabled: ", data.myAvatarScalingEnabled);
+ myAvatarScalingEnabled = data.myAvatarScalingEnabled;
+ }
+ if (data.objectScalingEnabled !== undefined) {
+ print("objectScalingEnabled: ", data.objectScalingEnabled);
+ objectScalingEnabled = data.objectScalingEnabled;
+ }
} else if (channel === 'Hifi-Hand-Grab') {
try {
data = JSON.parse(message);
diff --git a/scripts/system/controllers/touchControllerConfiguration.js b/scripts/system/controllers/touchControllerConfiguration.js
index 6241a776c4..a4622fd5e6 100644
--- a/scripts/system/controllers/touchControllerConfiguration.js
+++ b/scripts/system/controllers/touchControllerConfiguration.js
@@ -74,6 +74,9 @@ TOUCH_CONTROLLER_CONFIGURATION_LEFT = {
teleport: {
defaultTextureURL: BASE_URL + "Oculus-Labels-L.fbx/Oculus-Labels-L.fbm/Teleport.png"
},
+ both_triggers: {
+ defaultTextureURL: BASE_URL + "Oculus-Labels-L.fbx/Oculus-Labels-L.fbm/Grip-Trigger.png"
+ },
}
},
@@ -212,7 +215,7 @@ TOUCH_CONTROLLER_CONFIGURATION_RIGHT = {
modelURL: BASE_URL + "Oculus-Labels-R.fbx",
naturalPosition: { x: 0.009739525616168976, y: -0.0017818436026573181, z: 0.016794726252555847 },
- textureName: "Texture",
+ textureName: "blank",
defaultTextureLayer: "blank",
textureLayers: {
blank: {
@@ -230,6 +233,9 @@ TOUCH_CONTROLLER_CONFIGURATION_RIGHT = {
teleport: {
defaultTextureURL: BASE_URL + "Oculus-Labels-R.fbx/Oculus-Labels-R.fbm/Teleport.png"
},
+ both_triggers: {
+ defaultTextureURL: BASE_URL + "Oculus-Labels-R.fbx/Oculus-Labels-R.fbm/Grip-Trigger.png"
+ },
}
},
diff --git a/server-console/src/main.js b/server-console/src/main.js
index c99e39faf8..b387aa5dd0 100644
--- a/server-console/src/main.js
+++ b/server-console/src/main.js
@@ -42,7 +42,7 @@ const appIcon = path.join(__dirname, '../resources/console.png');
const DELETE_LOG_FILES_OLDER_THAN_X_SECONDS = 60 * 60 * 24 * 7; // 7 Days
const LOG_FILE_REGEX = /(domain-server|ac-monitor|ac)-.*-std(out|err).txt/;
-const HOME_CONTENT_URL = "http://cachefly.highfidelity.com/home-tutorial-release-5572.tar.gz";
+const HOME_CONTENT_URL = "http://cdn.highfidelity.com/content-sets/home-tutorial-28.tar.gz";
function getBuildInfo() {
var buildInfoPath = null;
diff --git a/tutorial/tutorial.js b/tutorial/tutorial.js
index b75bf74579..26fa51e896 100644
--- a/tutorial/tutorial.js
+++ b/tutorial/tutorial.js
@@ -58,6 +58,9 @@ function info() {
}
}
+const CONTROLLER_TOUCH = 'touch';
+const CONTROLLER_VIVE = 'vive';
+
var NEAR_BOX_SPAWN_NAME = "tutorial/nearGrab/box_spawn";
var FAR_BOX_SPAWN_NAME = "tutorial/farGrab/box_spawn";
var GUN_SPAWN_NAME = "tutorial/gun_spawn";
@@ -323,7 +326,7 @@ function hideEntitiesWithTag(tag) {
//});
}
-/**
+/**
* Return the entity properties for an entity with a given name if it is in our
* cached list of entities. Otherwise, return undefined.
*/
@@ -371,6 +374,8 @@ function disableEverything() {
nearGrabEnabled: true,
holdEnabled: false,
farGrabEnabled: false,
+ myAvatarScalingEnabled: false,
+ objectScalingEnabled: false,
}));
setControllerPartLayer('touchpad', 'blank');
setControllerPartLayer('trigger', 'blank');
@@ -399,6 +404,8 @@ function reenableEverything() {
nearGrabEnabled: true,
holdEnabled: true,
farGrabEnabled: true,
+ myAvatarScalingEnabled: true,
+ objectScalingEnabled: true,
}));
setControllerPartLayer('touchpad', 'blank');
setControllerPartLayer('trigger', 'blank');
@@ -516,12 +523,14 @@ stepOrient.prototype = {
// STEP: Near Grab //
// //
///////////////////////////////////////////////////////////////////////////////
-var stepNearGrab = function() {
+var stepNearGrab = function(tutorialManager) {
this.name = 'nearGrab';
- this.tag = "nearGrab";
+ this.tags = ["bothGrab", "nearGrab", "nearGrab-" + tutorialManager.controllerName];
this.tempTag = "nearGrab-temporary";
this.birdIDs = [];
+ this.controllerName = tutorialManager.controllerName;
+
Messages.subscribe("Entity-Exploded");
Messages.messageReceived.connect(this.onMessage.bind(this));
}
@@ -530,12 +539,17 @@ stepNearGrab.prototype = {
this.finished = false;
this.onFinish = onFinish;
- setControllerPartLayer('tips', 'trigger');
- setControllerPartLayer('trigger', 'highlight');
+ if (this.controllerName === CONTROLLER_TOUCH) {
+ setControllerPartLayer('tips', 'both_triggers');
+ setControllerPartLayer('trigger', 'highlight');
+ setControllerPartLayer('grip', 'highlight');
+ } else {
+ setControllerPartLayer('tips', 'trigger');
+ setControllerPartLayer('trigger', 'highlight');
+ }
- // Spawn content set
- showEntitiesWithTag(this.tag, { visible: true });
- showEntitiesWithTag('bothGrab', { visible: true });
+ // Show content set
+ showEntitiesWithTags(this.tags);
var boxSpawnPosition = getEntityWithName(NEAR_BOX_SPAWN_NAME).position;
function createBlock(fireworkNumber) {
@@ -573,8 +587,8 @@ stepNearGrab.prototype = {
this.finished = true;
setControllerPartLayer('tips', 'blank');
setControllerPartLayer('trigger', 'normal');
- hideEntitiesWithTag(this.tag, { visible: false});
- hideEntitiesWithTag('bothGrab', { visible: false});
+ setControllerPartLayer('grip', 'normal');
+ hideEntitiesWithTags(this.tags);
deleteEntitiesWithTag(this.tempTag);
if (this.positionWatcher) {
this.positionWatcher.destroy();
@@ -696,6 +710,7 @@ PositionWatcher.prototype = {
///////////////////////////////////////////////////////////////////////////////
var stepEquip = function(tutorialManager) {
const controllerName = tutorialManager.controllerName;
+ this.controllerName = controllerName;
this.name = 'equip';
@@ -714,8 +729,13 @@ var stepEquip = function(tutorialManager) {
}
stepEquip.prototype = {
start: function(onFinish) {
- setControllerPartLayer('tips', 'trigger');
- setControllerPartLayer('trigger', 'highlight');
+ if (this.controllerName === CONTROLLER_TOUCH) {
+ setControllerPartLayer('tips', 'grip');
+ setControllerPartLayer('grip', 'highlight');
+ } else {
+ setControllerPartLayer('tips', 'trigger');
+ setControllerPartLayer('trigger', 'highlight');
+ }
Messages.sendLocalMessage('Hifi-Grab-Disable', JSON.stringify({
holdEnabled: true,
diff --git a/tutorial/tutorialEntityIDs.js b/tutorial/tutorialEntityIDs.js
index 0200c2c247..f53ac1a56c 100644
--- a/tutorial/tutorialEntityIDs.js
+++ b/tutorial/tutorialEntityIDs.js
@@ -52,6 +52,16 @@ TUTORIAL_TAG_TO_ENTITY_IDS_MAP = {
"tag": "farGrab"
}
},
+ "nearGrab-vive": {
+ "{88221a22-b710-4d35-852b-5257b0aa77dc}": {
+ "tag": "nearGrab-vive"
+ }
+ },
+ "nearGrab-touch": {
+ "{7c0f2fde-6c5c-459b-bf82-421979cebf2e}": {
+ "tag": "nearGrab-touch"
+ }
+ },
"nearGrab": {
"{55c861ef-60ca-4722-a6c5-9c6967966ec5}": {
"tag": "nearGrab"
@@ -59,9 +69,6 @@ TUTORIAL_TAG_TO_ENTITY_IDS_MAP = {
"{644d655b-ae66-43b1-9bab-a44b9a8ad632}": {
"tag": "nearGrab"
},
- "{88221a22-b710-4d35-852b-5257b0aa77dc}": {
- "tag": "nearGrab"
- },
"{8bf0baa1-88d0-448a-a782-100d4413bd82}": {
"tag": "nearGrab"
},
@@ -70,13 +77,20 @@ TUTORIAL_TAG_TO_ENTITY_IDS_MAP = {
"tag": "nearGrab"
}
},
+ "equip-part1-touch": {
+ "{470f0634-8be7-4b52-a8bd-5183d489fcb6}": {
+ "tag": "equip-part1-touch"
+ }
+ },
+ "equip-part1-vive": {
+ "{97ced5e7-fc81-40f9-a9e8-f85b4b30f24c}": {
+ "tag": "equip-part1-vive"
+ }
+ },
"equip-part1": {
"{d73822ca-0a34-4cf4-a530-3258ac459a14}": {
"tag": "equip-part1"
},
- "{97ced5e7-fc81-40f9-a9e8-f85b4b30f24c}": {
- "tag": "equip-part1"
- },
"{8572d991-5777-45df-97bf-7243d7b12f81}": {
"tag": "equip-part1"
},
@@ -102,16 +116,17 @@ TUTORIAL_TAG_TO_ENTITY_IDS_MAP = {
"equip-part2-vive": {
"{b5d17eda-90ab-40cf-b973-efcecb2e992e}": {
"tag": "equip-part2-vive"
+ },
+ "{6307cd16-dd1d-4988-a339-578178436b45}": {
+ "tag": "equip-part2-vive"
}
},
"equip-part2-touch": {
"{69195139-e020-4739-bb2c-50faebc6860a}": {
"tag": "equip-part2-touch"
- }
- },
- "equip-part2": {
- "{6307cd16-dd1d-4988-a339-578178436b45}": {
- "tag": "equip-part2"
+ },
+ "{9b0a99ae-221b-4e59-ba3c-d8e64a083774}": {
+ "tag": "equip-part2-touch"
}
},
"bothGrab": {