Co-authored-by: Reifonas <211114984+Reifonas@users.noreply.github.com>
This commit is contained in:
gpt-engineer-app[bot]
2026-05-18 21:23:13 +00:00
parent 75c28ebbf9
commit 86fef6848f
+48
View File
@@ -1,5 +1,53 @@
import { create } from 'zustand'; import { create } from 'zustand';
// ── Persistência de placement (fineTuning + escala) e flags WebXR ─────
const PLACEMENT_KEY = 'tsxr_placements_v1';
const XRFEAT_KEY = 'xrFeatures';
export interface XRFeatureFlags {
handTracking: boolean;
planeDetection: boolean;
hitTest: boolean;
domOverlay: boolean;
anchors: boolean;
meshDetection: boolean;
depthSensing: boolean;
layers: boolean;
bodyTracking: boolean;
}
const DEFAULT_XR_FEATURES: XRFeatureFlags = {
handTracking: true, planeDetection: true, hitTest: true, domOverlay: true,
anchors: true, meshDetection: true, depthSensing: true, layers: true,
bodyTracking: true,
};
function loadXRFeatures(): XRFeatureFlags {
try {
const raw = localStorage.getItem(XRFEAT_KEY);
if (raw) return { ...DEFAULT_XR_FEATURES, ...JSON.parse(raw) };
} catch {}
return { ...DEFAULT_XR_FEATURES };
}
function saveXRFeatures(f: XRFeatureFlags) {
try { localStorage.setItem(XRFEAT_KEY, JSON.stringify(f)); } catch {}
}
interface StoredPlacement { fineTuning: FineTuning; }
function loadPlacements(): Record<string, StoredPlacement> {
try {
const raw = localStorage.getItem(PLACEMENT_KEY);
if (raw) return JSON.parse(raw);
} catch {}
return {};
}
function savePlacement(fileName: string, fineTuning: FineTuning) {
try {
const all = loadPlacements();
all[fileName] = { fineTuning };
localStorage.setItem(PLACEMENT_KEY, JSON.stringify(all));
} catch {}
}
export interface ScaleRatio { export interface ScaleRatio {
label: string; // e.g. "1:50", "2:1", "1:1" label: string; // e.g. "1:50", "2:1", "1:1"
factor: number; // render multiplier: 1:50 => 0.02, 2:1 => 2, 1:1 => 1 factor: number; // render multiplier: 1:50 => 0.02, 2:1 => 2, 1:1 => 1