u
This commit is contained in:
@@ -22,6 +22,8 @@
|
|||||||
<p>🤏 Pinch to zoom: Zoom in/out</p>
|
<p>🤏 Pinch to zoom: Zoom in/out</p>
|
||||||
<p>✌️ Two finger drag: Pan around scene</p>
|
<p>✌️ Two finger drag: Pan around scene</p>
|
||||||
<hr style="margin: 10px 0; border: 1px solid #555;">
|
<hr style="margin: 10px 0; border: 1px solid #555;">
|
||||||
|
<p>🚶 <button id="fpv-btn" style="background: #2196F3; color: white; border: none; padding: 8px 12px; border-radius: 4px; cursor: pointer; font-size: 12px; margin-right: 10px;">Enter FPV Mode</button> <span style="font-size: 11px; color: #aaa;">(or press F key to toggle)</span></p>
|
||||||
|
<p style="font-size: 11px; color: #aaa; margin: 5px 0;">In FPV: WASD to move, mouse to look, F or ESC to exit</p>
|
||||||
<button id="print-btn" style="background: #4CAF50; color: white; border: none; padding: 8px 12px; border-radius: 4px; cursor: pointer; font-size: 12px;">🖨️ Print</button>
|
<button id="print-btn" style="background: #4CAF50; color: white; border: none; padding: 8px 12px; border-radius: 4px; cursor: pointer; font-size: 12px;">🖨️ Print</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
83
src/index.js
83
src/index.js
@@ -137,6 +137,9 @@ async function init() {
|
|||||||
// Setup manual print button
|
// Setup manual print button
|
||||||
setupPrintButton();
|
setupPrintButton();
|
||||||
|
|
||||||
|
// Setup FPV button
|
||||||
|
setupFPVButton();
|
||||||
|
|
||||||
// Setup FPV controls
|
// Setup FPV controls
|
||||||
setupFPVControls();
|
setupFPVControls();
|
||||||
|
|
||||||
@@ -396,6 +399,24 @@ function setupPrintButton() {
|
|||||||
console.log('🖨️ Manual print button set up');
|
console.log('🖨️ Manual print button set up');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setupFPVButton() {
|
||||||
|
const fpvBtn = document.getElementById('fpv-btn');
|
||||||
|
if (!fpvBtn) {
|
||||||
|
console.warn('FPV button not found');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fpvBtn.addEventListener('click', () => {
|
||||||
|
if (!fpvMode) {
|
||||||
|
enterFPVMode();
|
||||||
|
} else {
|
||||||
|
exitFPVMode();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log('🚶 FPV button set up');
|
||||||
|
}
|
||||||
|
|
||||||
function setupLighting() {
|
function setupLighting() {
|
||||||
// Ambient light for overall illumination - increased intensity
|
// Ambient light for overall illumination - increased intensity
|
||||||
const ambientLight = new THREE.AmbientLight(0x404040, 1.2);
|
const ambientLight = new THREE.AmbientLight(0x404040, 1.2);
|
||||||
@@ -822,10 +843,14 @@ function setupFPVControls() {
|
|||||||
function onKeyDown(event) {
|
function onKeyDown(event) {
|
||||||
switch (event.code) {
|
switch (event.code) {
|
||||||
case 'KeyF':
|
case 'KeyF':
|
||||||
|
event.preventDefault();
|
||||||
|
event.stopPropagation();
|
||||||
if (!fpvMode) {
|
if (!fpvMode) {
|
||||||
enterFPVMode();
|
enterFPVMode();
|
||||||
|
} else {
|
||||||
|
exitFPVMode();
|
||||||
}
|
}
|
||||||
break;
|
return false;
|
||||||
case 'Escape':
|
case 'Escape':
|
||||||
if (fpvMode) {
|
if (fpvMode) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
@@ -835,16 +860,16 @@ function onKeyDown(event) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'KeyW':
|
case 'KeyW':
|
||||||
fpvControls.moveForward = true;
|
if (fpvMode) fpvControls.moveForward = true;
|
||||||
break;
|
break;
|
||||||
case 'KeyA':
|
case 'KeyA':
|
||||||
fpvControls.moveLeft = true;
|
if (fpvMode) fpvControls.moveLeft = true;
|
||||||
break;
|
break;
|
||||||
case 'KeyS':
|
case 'KeyS':
|
||||||
fpvControls.moveBackward = true;
|
if (fpvMode) fpvControls.moveBackward = true;
|
||||||
break;
|
break;
|
||||||
case 'KeyD':
|
case 'KeyD':
|
||||||
fpvControls.moveRight = true;
|
if (fpvMode) fpvControls.moveRight = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -852,16 +877,16 @@ function onKeyDown(event) {
|
|||||||
function onKeyUp(event) {
|
function onKeyUp(event) {
|
||||||
switch (event.code) {
|
switch (event.code) {
|
||||||
case 'KeyW':
|
case 'KeyW':
|
||||||
fpvControls.moveForward = false;
|
if (fpvMode) fpvControls.moveForward = false;
|
||||||
break;
|
break;
|
||||||
case 'KeyA':
|
case 'KeyA':
|
||||||
fpvControls.moveLeft = false;
|
if (fpvMode) fpvControls.moveLeft = false;
|
||||||
break;
|
break;
|
||||||
case 'KeyS':
|
case 'KeyS':
|
||||||
fpvControls.moveBackward = false;
|
if (fpvMode) fpvControls.moveBackward = false;
|
||||||
break;
|
break;
|
||||||
case 'KeyD':
|
case 'KeyD':
|
||||||
fpvControls.moveRight = false;
|
if (fpvMode) fpvControls.moveRight = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -908,6 +933,13 @@ function enterFPVMode() {
|
|||||||
fpvControls.rotation.y = 0;
|
fpvControls.rotation.y = 0;
|
||||||
fpvControls.velocity.set(0, 0, 0);
|
fpvControls.velocity.set(0, 0, 0);
|
||||||
|
|
||||||
|
// Update button text
|
||||||
|
const fpvBtn = document.getElementById('fpv-btn');
|
||||||
|
if (fpvBtn) {
|
||||||
|
fpvBtn.textContent = 'Exit FPV Mode';
|
||||||
|
fpvBtn.style.background = '#FF5722';
|
||||||
|
}
|
||||||
|
|
||||||
// Request pointer lock
|
// Request pointer lock
|
||||||
renderer.domElement.requestPointerLock();
|
renderer.domElement.requestPointerLock();
|
||||||
|
|
||||||
@@ -916,15 +948,34 @@ function enterFPVMode() {
|
|||||||
|
|
||||||
function exitFPVMode() {
|
function exitFPVMode() {
|
||||||
console.log('🔄 Exiting FPV mode');
|
console.log('🔄 Exiting FPV mode');
|
||||||
fpvMode = false;
|
|
||||||
|
|
||||||
// Re-enable orbit controls
|
// Exit pointer lock first, before changing fpvMode
|
||||||
controls.enabled = true;
|
if (document.pointerLockElement) {
|
||||||
|
document.exitPointerLock();
|
||||||
|
}
|
||||||
|
|
||||||
// Exit pointer lock
|
// Small delay to ensure pointer lock has been released
|
||||||
document.exitPointerLock();
|
setTimeout(() => {
|
||||||
|
fpvMode = false;
|
||||||
console.log('Orbit controls restored');
|
|
||||||
|
// Re-enable orbit controls
|
||||||
|
controls.enabled = true;
|
||||||
|
|
||||||
|
// Update button text
|
||||||
|
const fpvBtn = document.getElementById('fpv-btn');
|
||||||
|
if (fpvBtn) {
|
||||||
|
fpvBtn.textContent = 'Enter FPV Mode';
|
||||||
|
fpvBtn.style.background = '#2196F3';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reset movement controls
|
||||||
|
fpvControls.moveForward = false;
|
||||||
|
fpvControls.moveBackward = false;
|
||||||
|
fpvControls.moveLeft = false;
|
||||||
|
fpvControls.moveRight = false;
|
||||||
|
|
||||||
|
console.log('Orbit controls restored');
|
||||||
|
}, 50);
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateFPVMovement() {
|
function updateFPVMovement() {
|
||||||
|
|||||||
Reference in New Issue
Block a user