This commit is contained in:
@@ -543,6 +543,8 @@ const poiAmbientLabelServiceSpacingPx = 72
|
||||
const modelLoadRetryDelaysMs = [300, 900]
|
||||
const adjacentPreloadDelayMs = 900
|
||||
const manualAutoSwitchPauseMs = 1500
|
||||
const autoSwitchExitDistanceRatio = 0.2
|
||||
const autoSwitchExitDistanceMarginRatio = 0.08
|
||||
const poiMarkerVisualLiftFactor = 0.92
|
||||
const poiAmbientLabelLiftFactor = 2.1
|
||||
const poiFocusLabelLiftFactor = 2.72
|
||||
@@ -3275,6 +3277,18 @@ const resetAutoSwitchDistanceTracking = () => {
|
||||
autoSwitchStateMachine.reset(activeView.value)
|
||||
}
|
||||
|
||||
const ensureFloorAutoExitZoomRange = () => {
|
||||
if (!controls) return
|
||||
|
||||
const distance = controls.getDistance()
|
||||
if (!Number.isFinite(distance) || distance <= 0) return
|
||||
|
||||
// 楼层退出以当前距离的 120% 为阈值;参考外观相机正好处于原 600 上限时,
|
||||
// 必须预留额外缩小空间,否则切层后无法满足自动返回外观的条件。
|
||||
const requiredMaxDistance = distance * (1 + autoSwitchExitDistanceRatio + autoSwitchExitDistanceMarginRatio)
|
||||
controls.maxDistance = Math.max(controls.maxDistance, requiredMaxDistance)
|
||||
}
|
||||
|
||||
const handleWheelIntent = (event: WheelEvent) => {
|
||||
if (!controls || activeView.value !== 'overview' || event.deltaY === 0) return
|
||||
|
||||
@@ -3368,6 +3382,7 @@ const autoSwitchStateMachine = new GuideAutoSwitchStateMachine({
|
||||
exitHoldMs: 400,
|
||||
intentTimeoutMs: 2000,
|
||||
reverseToleranceRatio: 0.008,
|
||||
exitRatio: autoSwitchExitDistanceRatio,
|
||||
cooldownMs: props.autoSwitchCooldown,
|
||||
canSwitch: canRunAutoSwitch,
|
||||
onSwitchRequested: requestAutoSwitch
|
||||
@@ -3752,6 +3767,7 @@ const applyIndoorInitialModelTransform = (model: THREE.Object3D) => {
|
||||
const resetCamera = () => {
|
||||
applyReferenceOverviewCameraState()
|
||||
if (activeView.value === 'floor' && controls) {
|
||||
ensureFloorAutoExitZoomRange()
|
||||
autoSwitchStateMachine.setFloorInitialDistance(controls.getDistance())
|
||||
}
|
||||
refreshPoiVisibilityByDistance()
|
||||
@@ -4060,6 +4076,7 @@ const commitPreparedFloorScene = (
|
||||
}
|
||||
recordCameraSnapshotRestoration(cameraSnapshot, `floor:${expectedFloorId}`)
|
||||
if (controls) {
|
||||
ensureFloorAutoExitZoomRange()
|
||||
autoSwitchStateMachine.setFloorInitialDistance(controls.getDistance())
|
||||
}
|
||||
options.onCameraStable?.()
|
||||
|
||||
Reference in New Issue
Block a user