Skip to content

Commit 49a81c9

Browse files
committed
feat: auto stop AR on dismount
1 parent 1b29ba1 commit 49a81c9

5 files changed

Lines changed: 45 additions & 7 deletions

File tree

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "mind-ar-react",
3-
"version": "0.1.0-beta2",
3+
"version": "0.1.0-beta3",
44
"main": "dist/index.js",
55
"scripts": {
66
"dev": "vite",
@@ -17,7 +17,7 @@
1717
"dependencies": {
1818
"aframe-react-component": "^0.1.0-beta2a",
1919
"lodash": "^4.17.21",
20-
"mind-ar-ts": "^0.5.2-beta2a"
20+
"mind-ar-ts": "^0.5.2-beta2b"
2121
},
2222
"devDependencies": {
2323
"@commitlint/cli": "^17.0.3",

src/components/Scene.tsx

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1-
import React, { useRef } from 'react';
2-
import { Scene as AScene } from 'aframe';
1+
import React, { useEffect, useRef } from 'react';
2+
import { Scene as AScene, SystemDefinition } from 'aframe';
33
import { Scene as SceneComponent } from 'aframe-react-component';
44
import { getAframeProps } from 'aframe-react-component/dist/utils/common';
5+
import { IMindARFaceSystem } from 'mind-ar-ts/types/face-target/aframe';
6+
import { IMindARImageSystem } from 'mind-ar-ts/types/image-target/aframe';
57
import { generateFaceProps, generateImageProps } from '../utils/defaultprops';
68
import { mergeRefs } from '../utils/common';
79
import { Scene as _Scene } from '../utils/interfaces';
10+
import { AR_COMPONENT_NAME } from '../utils/constant';
811

912
const Scene = React.forwardRef<AScene, _Scene>(({ children, ...props }, ref) => {
1013
const sceneRef = useRef<AScene>(null);
@@ -16,6 +19,22 @@ const Scene = React.forwardRef<AScene, _Scene>(({ children, ...props }, ref) =>
1619
...rest
1720
} = props;
1821

22+
useEffect(() => {
23+
if (!sceneRef.current) return;
24+
25+
if (!mindARImage || !mindARFace) return;
26+
27+
const arSystem = sceneRef.current.systems[
28+
mindARImage ? AR_COMPONENT_NAME.IMAGE.IMAGE_SYSTEM : AR_COMPONENT_NAME.FACE.FACE_SYSTEM
29+
] as SystemDefinition<IMindARImageSystem | IMindARFaceSystem>;
30+
31+
return () => {
32+
if (!arSystem) return;
33+
34+
arSystem.stop();
35+
};
36+
}, [sceneRef.current]);
37+
1938
return (
2039
<SceneComponent
2140
{...rest}

src/utils/constant.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
1+
export const AR_COMPONENT_NAME = {
2+
FACE: {
3+
FACE: 'mindar-face',
4+
FACE_TARGET: 'mindar-face-target',
5+
FACE_SYSTEM: 'mindar-face-system',
6+
DEFAULT_OCCLUDER: 'mindar-face-default-face-occluder',
7+
OCCULDER: 'mindar-face-occluder',
8+
},
9+
IMAGE: {
10+
IMAGE: 'mindar-image',
11+
IMAGE_TARGET: 'mindar-image-target',
12+
IMAGE_SYSTEM: 'mindar-image-system',
13+
},
14+
};
15+
116
export const COMPILER_STATE = {
217
IDLE: 'IDLE',
318
COMPILING: 'COMPILING',

src/utils/defaultprops.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import { DefaultARProps, MindARFace, MindARImage } from './interfaces';
22

3-
const generateDefaultProps = (mindARDefault: DefaultARProps) => {
3+
const generateDefaultProps = (mindARDefault: DefaultARProps, isFace = false) => {
44
if (mindARDefault?.autoStart === undefined) mindARDefault.autoStart = true;
55
if (mindARDefault?.uiLoading === undefined) mindARDefault.uiLoading = 'yes';
66
if (mindARDefault?.uiScanning === undefined) mindARDefault.uiScanning = 'yes';
77
if (mindARDefault?.uiError === undefined) mindARDefault.uiError = 'yes';
88
if (mindARDefault?.filterMinCF === undefined) mindARDefault.filterMinCF = -1;
99
if (mindARDefault?.filterBeta === undefined) mindARDefault.filterBeta = -1;
10-
if (mindARDefault?.shouldFaceUser === undefined) mindARDefault.shouldFaceUser = false;
10+
if (mindARDefault?.shouldFaceUser === undefined) mindARDefault.shouldFaceUser = isFace;
11+
if (mindARDefault?._positionSettings === undefined) mindARDefault._positionSettings = 'absolute';
12+
if (mindARDefault?._positionZIndex === undefined) mindARDefault._positionZIndex = -2;
1113

1214
return mindARDefault;
1315
};
@@ -25,7 +27,7 @@ export const generateImageProps = (mindARImage: MindARImage) => {
2527
};
2628

2729
export const generateFaceProps = (mindARFace: MindARFace) => {
28-
generateDefaultProps(mindARFace);
30+
generateDefaultProps(mindARFace, true);
2931

3032
if (mindARFace?.faceOccluder === undefined) mindARFace.faceOccluder = true;
3133

src/utils/interfaces.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ export type DefaultARProps = {
1010
filterMinCF?: number;
1111
filterBeta?: number;
1212
shouldFaceUser?: boolean;
13+
_positionSettings?: string;
14+
_positionZIndex?: number;
1315
};
1416

1517
export type MindARImage = DefaultARProps & {

0 commit comments

Comments
 (0)