diff --git a/scripts/system/html/tabletRezzer.html b/scripts/system/html/tabletRezzer.html
new file mode 100644
index 0000000000..6a0e0d0448
--- /dev/null
+++ b/scripts/system/html/tabletRezzer.html
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+ Hello world!
+
+
diff --git a/scripts/system/tabletRezzer.js b/scripts/system/tabletRezzer.js
index 8fe206e9e0..fe4bc6477b 100644
--- a/scripts/system/tabletRezzer.js
+++ b/scripts/system/tabletRezzer.js
@@ -16,28 +16,39 @@
Script.include("./libraries/utils.js");
- var // Overlay
+ var // Base overlay
proxyOverlay = null,
- TABLET_PROXY_MODEL = Script.resolvePath("./assets/models/tinyTablet.fbx"),
- TABLET_PROXY_DIMENSIONS = { x: 0.0637, y: 0.0965, z: 0.0046 }, // Proportional to tablet proper.
- TABLET_PROXY_POSITION_LEFT_HAND = {
+ PROXY_MODEL = Script.resolvePath("./assets/models/tinyTablet.fbx"),
+ PROXY_DIMENSIONS = { x: 0.0637, y: 0.0965, z: 0.0046 }, // Proportional to tablet proper.
+ PROXY_POSITION_LEFT_HAND = {
x: 0,
y: 0.07, // Distance from joint.
z: 0.07 // Distance above palm.
},
- TABLET_PROXY_POSITION_RIGHT_HAND = {
+ PROXY_POSITION_RIGHT_HAND = {
x: 0,
y: 0.07, // Distance from joint.
z: 0.07 // Distance above palm.
},
/*
// Aligned cross-palm.
- TABLET_PROXY_ROTATION_LEFT_HAND = Quat.fromVec3Degrees({ x: 0, y: 180, z: 90 }),
- TABLET_PROXY_ROTATION_RIGHT_HAND = Quat.fromVec3Degrees({ x: 0, y: 180, z: -90 }),
+ PROXY_ROTATION_LEFT_HAND = Quat.fromVec3Degrees({ x: 0, y: 180, z: 90 }),
+ PROXY_ROTATION_RIGHT_HAND = Quat.fromVec3Degrees({ x: 0, y: 180, z: -90 }),
*/
// Aligned with palm.
- TABLET_PROXY_ROTATION_LEFT_HAND = Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }),
- TABLET_PROXY_ROTATION_RIGHT_HAND = Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }),
+ PROXY_ROTATION_LEFT_HAND = Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }),
+ PROXY_ROTATION_RIGHT_HAND = Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }),
+
+ // UI overlay.
+ proxyUIOverlay = null,
+ PROXY_UI_HTML = Script.resolvePath("./html/tabletRezzer.html"),
+ PROXY_UI_DIMENSIONS = { x: 0.0577, y: 0.0905 },
+ PROXY_UI_WIDTH_PIXELS = 150,
+ METERS_TO_INCHES = 39.3701,
+ PROXY_UI_DPI = PROXY_UI_WIDTH_PIXELS / (PROXY_UI_DIMENSIONS.x * METERS_TO_INCHES),
+ PROXY_UI_OFFSET = 0.001, // Above model surface.
+ PROXY_UI_LOCAL_POSITION = { x: 0, y: 0, z: -(PROXY_DIMENSIONS.z / 2 + PROXY_UI_OFFSET) },
+ PROXY_UI_LOCAL_ROTATION = Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }),
// State machine
PROXY_HIDDEN = 0,
@@ -149,7 +160,9 @@
function enterProxyHidden() {
if (proxyOverlay) {
+ Overlays.deleteOverlay(proxyUIOverlay);
Overlays.deleteOverlay(proxyOverlay);
+ proxyUIOverlay = null;
proxyOverlay = null;
}
}
@@ -170,18 +183,30 @@
function enterProxyVisible(hand) {
proxyHand = hand;
proxyOverlay = Overlays.addOverlay("model", {
- url: TABLET_PROXY_MODEL,
+ url: PROXY_MODEL,
parentID: MyAvatar.SELF_ID,
parentJointIndex: handJointIndex(proxyHand),
localPosition: Vec3.multiply(avatarScale,
- proxyHand === LEFT_HAND ? TABLET_PROXY_POSITION_LEFT_HAND : TABLET_PROXY_POSITION_RIGHT_HAND),
- localRotation: proxyHand === LEFT_HAND ? TABLET_PROXY_ROTATION_LEFT_HAND : TABLET_PROXY_ROTATION_RIGHT_HAND,
- dimensions: Vec3.multiply(avatarScale, TABLET_PROXY_DIMENSIONS),
+ proxyHand === LEFT_HAND ? PROXY_POSITION_LEFT_HAND : PROXY_POSITION_RIGHT_HAND),
+ localRotation: proxyHand === LEFT_HAND ? PROXY_ROTATION_LEFT_HAND : PROXY_ROTATION_RIGHT_HAND,
+ dimensions: Vec3.multiply(avatarScale, PROXY_DIMENSIONS),
solid: true,
grabbable: true,
displayInFront: true,
visible: true
});
+ proxyUIOverlay = Overlays.addOverlay("web3d", {
+ url: PROXY_UI_HTML,
+ parentID: proxyOverlay,
+ localPosition: PROXY_UI_LOCAL_POSITION,
+ localRotation: PROXY_UI_LOCAL_ROTATION,
+ dimensions: PROXY_UI_DIMENSIONS,
+ dpi: PROXY_UI_DPI,
+ alpha: 1.0,
+ grabbable: false,
+ displayInFront: true,
+ visible: true
+ });
}
function updateProxyVisible() {
@@ -201,14 +226,19 @@
var tabletScaleFactor = avatarScale * (1 + scaleFactor * (proxyTargetWidth - proxyInitialWidth) / proxyInitialWidth);
if (scaleFactor < 1) {
Overlays.editOverlay(proxyOverlay, {
- dimensions: Vec3.multiply(tabletScaleFactor, TABLET_PROXY_DIMENSIONS),
+ dimensions: Vec3.multiply(tabletScaleFactor, PROXY_DIMENSIONS),
localPosition:
Vec3.sum(proxyGrabHandleLocalPosition,
Vec3.multiplyQbyV(proxyGrabLocalRotation,
Vec3.multiply(-tabletScaleFactor,
- Vec3.multiplyVbyV(PROXY_GRAB_HANDLES[proxyGrabHand], TABLET_PROXY_DIMENSIONS)))
+ Vec3.multiplyVbyV(PROXY_GRAB_HANDLES[proxyGrabHand], PROXY_DIMENSIONS)))
)
});
+ Overlays.editOverlay(proxyUIOverlay, {
+ dimensions: Vec3.multiply(tabletScaleFactor, PROXY_UI_DIMENSIONS),
+ localPosition: Vec3.multiply(tabletScaleFactor, PROXY_UI_LOCAL_POSITION),
+ dpi: PROXY_UI_DPI / tabletScaleFactor
+ });
proxyExpandTimer = Script.setTimeout(expandProxy, PROXY_EXPAND_TIMEOUT);
return;
}
@@ -223,10 +253,10 @@
proxyGrabLocalRotation = properties.localRotation;
proxyGrabHandleLocalPosition = Vec3.sum(properties.localPosition,
Vec3.multiplyQbyV(proxyGrabLocalRotation,
- Vec3.multiplyVbyV(PROXY_GRAB_HANDLES[proxyGrabHand], TABLET_PROXY_DIMENSIONS)));
+ Vec3.multiplyVbyV(PROXY_GRAB_HANDLES[proxyGrabHand], PROXY_DIMENSIONS)));
// Start expanding.
- proxyInitialWidth = TABLET_PROXY_DIMENSIONS.x;
+ proxyInitialWidth = PROXY_DIMENSIONS.x;
proxyTargetWidth = getTabletWidthFromSettings();
proxyExpandStart = Date.now();
proxyExpandTimer = Script.setTimeout(expandProxy, PROXY_EXPAND_TIMEOUT);
@@ -249,6 +279,8 @@
function enterTabletOpen() {
var proxyOverlayProperties = Overlays.getProperties(proxyOverlay, ["position", "orientation"]);
+ Overlays.deleteOverlay(proxyUIOverlay);
+ proxyUIOverlay = null;
Overlays.deleteOverlay(proxyOverlay);
proxyOverlay = null;