← back to Quadrille Showroom
showroom: boot = first-person user standing in the doorway at the entrance end, stopped (no auto-walk); uniform same-size control pills + small pills on the bottom bar
90fe8f02d9c42bad0e13ca4cacab430a57089a6e · 2026-07-01 07:14:23 -0700 · Steve Abrams
Files touched
M public/js/showroom.jsM public/js/viewmodes.jsM public/showroom.html
Diff
commit 90fe8f02d9c42bad0e13ca4cacab430a57089a6e
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed Jul 1 07:14:23 2026 -0700
showroom: boot = first-person user standing in the doorway at the entrance end, stopped (no auto-walk); uniform same-size control pills + small pills on the bottom bar
---
public/js/showroom.js | 39 +++++++++++++++++++--------------------
public/js/viewmodes.js | 13 ++++++++++---
public/showroom.html | 23 +++++++++++++++++++++++
3 files changed, 52 insertions(+), 23 deletions(-)
diff --git a/public/js/showroom.js b/public/js/showroom.js
index ab23ebc..6bfd632 100644
--- a/public/js/showroom.js
+++ b/public/js/showroom.js
@@ -4078,27 +4078,26 @@ function smoothCameraTo(pos, target, onComplete, fov) {
};
}
-// Automated "walk through the CENTER" of the showroom on boot (Steve 2026-06-30).
-// A slow forward dolly down the middle of the room, on the shared cameraAnim tween
-// (eases inside the main render loop). walk.enter() parked us at the front looking
-// at the board wall; this glides us up the centre to just in front of the arc, then
-// hands back to free Explore (WASD). Cheap + interruptible (cameraAnim auto-clears
-// on complete; a click stops any tour).
-function _qhStartCenterWalk() {
- if (cameraAnim) return;
- const backZ = -CONFIG.room.depth / 2;
- cameraAnim = {
- startPos: camera.position.clone(),
- endPos: new THREE.Vector3(0, 1.62, backZ + 2.4), // centre of room, eye-level, near the boards
- startTarget: controls.target.clone(),
- endTarget: new THREE.Vector3(0, 1.4, backZ + 0.2), // looking straight down the centre at the board wall
- startFov: camera.fov, endFov: camera.fov,
- progress: 0,
- duration: 7.0, // slow, cinematic centre walk
- onComplete: null // leaves the user in Explore among the boards
- };
+// Boot pose: STAND IN THE DOORWAY at the back (entrance) end of the room and STOP
+// (Steve 2026-07-01). Re-asserted after the BOOK_MODE boot chain settles (which would
+// otherwise re-centre the camera on the book), so the first-person user starts in the
+// doorway looking in toward the boards. No dolly — stationary until WASD.
+function _qhStandInDoorway() {
+ cameraAnim = null; // cancel any tween that would move us
+ // Explore must be ON, else the per-frame spin-pose re-pins the camera to lockedSpinEye
+ // (~centre-book z=0.7) every frame and the doorway pose never sticks.
+ if (!exploreMode && window._toggleExploreFromViewmode) window._toggleExploreFromViewmode(true);
+ if (controlsLocked) unlockControls();
+ const z = CONFIG.room.depth / 2 - 0.25; // in the doorway threshold, centred
+ camera.position.set(0, 1.6, z);
+ controls.target.set(0, 1.4, -CONFIG.room.depth / 2 + 0.2); // look toward the board wall
+ if (lockedSpinEye) lockedSpinEye.copy(camera.position); // keep any spin-pose in sync with the doorway
+ camera.lookAt(controls.target);
+ camera.updateProjectionMatrix();
+ if (controls.update) controls.update();
}
-window._qhStartCenterWalk = _qhStartCenterWalk;
+window._qhStandInDoorway = _qhStandInDoorway;
+window._qhStartCenterWalk = _qhStandInDoorway; // legacy alias (auto-walk retired)
function updateSampleTray() {
const tray = document.getElementById('sample-tray'), items = document.getElementById('tray-items');
diff --git a/public/js/viewmodes.js b/public/js/viewmodes.js
index 0795811..d67b466 100644
--- a/public/js/viewmodes.js
+++ b/public/js/viewmodes.js
@@ -140,7 +140,9 @@ function boot() {
ctl.enableRotate = true; ctl.enableZoom = true; ctl.enablePan = false;
// Hand off to the showroom's native Explore so WASD + proximity book-match work.
if (!QH.exploreMode && window._toggleExploreFromViewmode) window._toggleExploreFromViewmode(true);
- const pos = new THREE.Vector3(0, 1.6, ROOM.depth / 2 - 1.2);
+ // Stand IN THE DOORWAY at the back (entrance) end of the room, centred, eye-level,
+ // looking straight in toward the board wall (Steve 2026-07-01).
+ const pos = new THREE.Vector3(0, 1.6, ROOM.depth / 2 - 0.25);
QH.camera.position.copy(pos);
ctl.target.set(0, 1.4, backZ);
QH.setTargetFov(55); QH.camera.fov = 55; QH.camera.updateProjectionMatrix();
@@ -862,9 +864,14 @@ function boot() {
const safeBootModes = { walk: 1, hero: 1, macro: 1, room: 1, table: 1 };
const bootMode = (savedMode && MODES[savedMode] && safeBootModes[savedMode]) ? savedMode : 'walk';
setMode(bootMode, true);
+ // Boot = the first-person user STANDS IN THE DOORWAY at the back (entrance) end of
+ // the room and STOPS (Steve 2026-07-01) — stationary, looking in toward the boards.
+ // The BOOK_MODE boot chain re-centres the camera on the book at +700/+1500ms, so we
+ // re-assert the doorway pose just after it settles. No dolly — stationary until WASD.
if (bootMode === 'walk') {
- // Kick the automated center walk-through a beat after the scene settles.
- setTimeout(() => { if (currentMode === 'walk' && window._qhStartCenterWalk) window._qhStartCenterWalk(); }, 1400);
+ [1700, 2100].forEach(t => setTimeout(() => {
+ if (currentMode === 'walk' && window._qhStandInDoorway) window._qhStandInDoorway();
+ }, t));
}
// Expose for the test harness + for showroom guided buttons to re-assert the view.
diff --git a/public/showroom.html b/public/showroom.html
index 907cdb0..f862747 100644
--- a/public/showroom.html
+++ b/public/showroom.html
@@ -200,6 +200,29 @@
body.book-mode #now-viewing,
body.book-mode #guided-title,
body.book-mode #guided-instruction { display:none !important; }
+
+ /* ── Uniform control PILLS (Steve 2026-07-01): every control is the same-size pill;
+ the bottom #window-bar row is SMALL pills; panels stay tucked in the hamburger. ── */
+ .vm-chip,
+ #window-bar button, #window-bar #sort-select,
+ #vm-sample-addbtn, #vm-sample-add, .sr-btn {
+ border-radius: 999px !important;
+ min-height: 30px !important;
+ padding: 5px 16px !important;
+ font-size: 12px !important;
+ line-height: 1.1 !important;
+ box-sizing: border-box !important;
+ display: inline-flex !important;
+ align-items: center !important;
+ justify-content: center !important;
+ }
+ /* small pills along the bottom bar */
+ #window-bar { border-radius: 999px !important; }
+ #window-bar button, #window-bar #sort-select {
+ min-height: 26px !important;
+ padding: 3px 13px !important;
+ font-size: 11px !important;
+ }
</style>
</head>
<body class="guided-mode">
← 8dfe072 showroom P3: At-the-Table view — seated avatar + click-patte
·
back to Quadrille Showroom
·
showroom polish (070126A): wrap consultation nook in a group 842a1dc →