-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathARPositionProvider.js
More file actions
73 lines (73 loc) · 2.15 KB
/
ARPositionProvider.js
File metadata and controls
73 lines (73 loc) · 2.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import React, { Component, createContext } from "react";
import {
subscribeToARPositionChange,
setPOVSensitivity,
setPOVOrientationSensitivity
} from "./RNSwiftBridge";
import PropTypes from "prop-types";
const { Provider, Consumer: ARPositionConsumer } = createContext({
position: { x: 0, y: 0, z: 0 },
orientation: {}
});
class ARPositionProvider extends Component {
state = {
providerValue: {
position: { x: 0, y: 0, z: 0 },
orientation: { x: 0 }
},
positionSensitivity: -1,
orientationSensitivity: -1
};
positionChange = null;
componentDidMount() {
this.positionChange = subscribeToARPositionChange(
this.onPositionChange.bind(this)
);
}
componentWillUnmount() {
if (this.positionChange) this.positionChange.remove();
}
onPositionChange(data) {
this.setState({ providerValue: data });
if (typeof this.props.onPositionChange == "function")
this.props.onPositionChange(data);
}
render() {
return (
<Provider value={this.state.providerValue}>
{typeof this.props.children == "function" ? (
<ARPositionConsumer>
{value => {
return this.props.children(value);
}}
</ARPositionConsumer>
) : (
this.props.children
)}
</Provider>
);
}
static getDerivedStateFromProps(nextProps, prevState) {
var ret = prevState;
if (prevState.positionSensitivity != nextProps.positionSensitivity) {
setPOVSensitivity(nextProps.positionSensitivity);
ret.positionSensitivity = nextProps.positionSensitivity;
}
if (prevState.orientationSensitivity != nextProps.orientationSensitivity) {
setPOVOrientationSensitivity(nextProps.orientationSensitivity);
ret.orientationSensitivity = nextProps.orientationSensitivity;
}
return ret;
}
}
ARPositionProvider.defaultProps = {
positionSensitivity: 0.01,
orientationSensitivity: 0.05
};
ARPositionProvider.propTypes = {
onPositionChange: PropTypes.func,
positionSensitivity: PropTypes.number,
orientationSensitivity: PropTypes.number
};
export { ARPositionProvider, ARPositionConsumer };
export default ARPositionProvider;