UNPKG

@osobh/reactar

Version:

AR Library for React Native and Expo

71 lines (65 loc) 2.32 kB
// src/sensors/EnvironmentalDetection.ts export interface Plane { id: string; center: { x: number; y: number; z: number }; extent: { width: number; length: number }; } export interface Anchor { id: string; position: { x: number; y: number; z: number }; rotation: { x: number; y: number; z: number }; timestamp: number; planeId: string; } export class EnvironmentalDetection { // Simulate plane detection by returning a dummy plane after a short delay detectPlanes(): Promise<Plane[]> { return new Promise(resolve => { setTimeout(() => { resolve([ { id: 'plane-1', center: { x: 0, y: 0, z: -1 }, extent: { width: 1, length: 1 } } ]); }, 500); }); } // Simulate hit testing by returning the first detected plane hitTest(x: number, y: number): Promise<Plane | null> { return this.detectPlanes().then(planes => { return planes.length > 0 ? planes[0] : null; }); } // Simulate light estimation by returning dummy ambient intensity and color temperature values getLightEstimation(): Promise<{ ambientIntensity: number; ambientColorTemperature: number }> { return new Promise(resolve => { setTimeout(() => { resolve({ ambientIntensity: 1000, // e.g., lumens ambientColorTemperature: 6500 // in Kelvin }); }, 300); }); } // Implement anchoring logic: attach a virtual object to a detected plane with an optional offset createAnchor(plane: Plane, offset?: { x?: number; y?: number; z?: number }, rotation?: { x?: number; y?: number; z?: number }): Anchor { const defaultOffset = { x: 0, y: 0, z: 0 }; const defaultRotation = { x: 0, y: 0, z: 0 }; const finalOffset = { ...defaultOffset, ...offset }; const finalRotation = { ...defaultRotation, ...rotation }; const position = { x: plane.center.x + finalOffset.x, y: plane.center.y + finalOffset.y, z: plane.center.z + finalOffset.z, }; return { id: `anchor-${plane.id}`, position, rotation: finalRotation, timestamp: Date.now(), planeId: plane.id }; } }