@reearth/core 0.0.7-alpha.1 → 0.0.7-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -411,7 +411,16 @@ export const useClippingBox = ({
411
411
  eventHandler.setInputAction(handleMouseUp, ScreenSpaceEventType.LEFT_UP);
412
412
  }, [eventHandler, handleMouseDown, handleRawMouseMove, handleMouseUp]);
413
413
 
414
- useEffect(() => () => eventHandler.destroy(), [eventHandler]);
414
+ useEffect(
415
+ () => () => {
416
+ requestAnimationFrame(() => {
417
+ if (!eventHandler.isDestroyed()) {
418
+ eventHandler.destroy();
419
+ }
420
+ });
421
+ },
422
+ [eventHandler],
423
+ );
415
424
 
416
425
  const boxProperty = useMemo(
417
426
  () => ({ ...boxState, ...dimensions, allowEnterGround }),
@@ -30,9 +30,9 @@ export default function Globe({ property, cesiumIonAccessToken }: Props): JSX.El
30
30
  terrain: terrainProperty?.enabled,
31
31
  terrainType: terrainProperty?.type,
32
32
  normal: terrainProperty?.normal,
33
- ionAccessToken: property?.assets?.cesium?.terrian?.ionAccessToken || cesiumIonAccessToken,
34
- ionAsset: property?.assets?.cesium?.terrian?.ionAsset,
35
- ionUrl: property?.assets?.cesium?.terrian?.ionUrl,
33
+ ionAccessToken: property?.assets?.cesium?.terrain?.ionAccessToken || cesiumIonAccessToken,
34
+ ionAsset: property?.assets?.cesium?.terrain?.ionAsset,
35
+ ionUrl: property?.assets?.cesium?.terrain?.ionUrl,
36
36
  };
37
37
  const provider = opts.terrain ? terrainProviders[opts.terrainType || "cesium"] : undefined;
38
38
  return (typeof provider === "function" ? provider(opts) : provider) ?? defaultTerrainProvider;
@@ -40,9 +40,9 @@ export default function Globe({ property, cesiumIonAccessToken }: Props): JSX.El
40
40
  terrainProperty?.enabled,
41
41
  terrainProperty?.type,
42
42
  terrainProperty?.normal,
43
- property?.assets?.cesium?.terrian?.ionAccessToken,
44
- property?.assets?.cesium?.terrian?.ionAsset,
45
- property?.assets?.cesium?.terrian?.ionUrl,
43
+ property?.assets?.cesium?.terrain?.ionAccessToken,
44
+ property?.assets?.cesium?.terrain?.ionAsset,
45
+ property?.assets?.cesium?.terrain?.ionUrl,
46
46
  cesiumIonAccessToken,
47
47
  ]);
48
48
 
@@ -72,7 +72,7 @@ const terrainProviders: {
72
72
  [k in NonNullable<TerrainProperty["type"]>]:
73
73
  | TerrainProvider
74
74
  | ((
75
- opts: Pick<TerrainProperty, "normal"> & AssetsCesiumProperty["terrian"],
75
+ opts: Pick<TerrainProperty, "normal"> & AssetsCesiumProperty["terrain"],
76
76
  ) => Promise<TerrainProvider> | TerrainProvider | null);
77
77
  } = {
78
78
  cesium: ({ ionAccessToken, normal }) =>
@@ -84,21 +84,12 @@ export default ({
84
84
  initialCameraFlight.current = true;
85
85
  if (property?.camera?.limiter?.enabled && property?.camera?.limiter?.targetArea) {
86
86
  engineAPI.flyTo(property?.camera?.limiter?.targetArea, { duration: 0 });
87
- } else if (property?.camera?.camera) {
88
- const camera = property?.camera?.camera;
89
- engineAPI.flyTo(camera as Camera, { duration: 0 });
90
- }
91
- const camera = getCamera(cesium?.current?.cesiumElement);
92
- if (camera) {
93
- onCameraChange?.(camera);
87
+ } else if (camera) {
88
+ engineAPI.flyTo(camera, { duration: 0 });
94
89
  }
95
90
  },
96
- [engineAPI, property?.camera?.camera, property?.camera?.limiter?.enabled, onCameraChange],
97
- (prevDeps, nextDeps) =>
98
- prevDeps[0] === nextDeps[0] &&
99
- isEqual(prevDeps[1], nextDeps[1]) &&
100
- prevDeps[2] === nextDeps[2] &&
101
- prevDeps[3] === nextDeps[3],
91
+ [engineAPI, property?.camera?.limiter?.enabled],
92
+ (prevDeps, nextDeps) => prevDeps[0] === nextDeps[0] && prevDeps[1] === nextDeps[1],
102
93
  );
103
94
 
104
95
  const unmountCamera = useCallback(() => {
@@ -57,86 +57,86 @@ test("bind mouse events", () => {
57
57
  expect(mockMouseEventCallback).toHaveBeenCalledWith(props);
58
58
 
59
59
  result.current.current?.onDoubleClick(mockMouseEventCallback);
60
- expect(result.current.current?.mouseEventCallbacks.doubleclick[0]).toBe(mockMouseEventCallback);
60
+ expect(result.current.current?.mouseEventCallbacks.doubleClick[0]).toBe(mockMouseEventCallback);
61
61
 
62
- result.current.current?.mouseEventCallbacks.doubleclick[0]?.(props);
62
+ result.current.current?.mouseEventCallbacks.doubleClick[0]?.(props);
63
63
  expect(mockMouseEventCallback).toHaveBeenCalledTimes(2);
64
64
  expect(mockMouseEventCallback).toHaveBeenCalledWith(props);
65
65
 
66
66
  result.current.current?.onMouseDown(mockMouseEventCallback);
67
- expect(result.current.current?.mouseEventCallbacks.mousedown[0]).toBe(mockMouseEventCallback);
67
+ expect(result.current.current?.mouseEventCallbacks.mouseDown[0]).toBe(mockMouseEventCallback);
68
68
 
69
- result.current.current?.mouseEventCallbacks.mousedown[0]?.(props);
69
+ result.current.current?.mouseEventCallbacks.mouseDown[0]?.(props);
70
70
  expect(mockMouseEventCallback).toHaveBeenCalledTimes(3);
71
71
  expect(mockMouseEventCallback).toHaveBeenCalledWith(props);
72
72
 
73
73
  result.current.current?.onMouseUp(mockMouseEventCallback);
74
- expect(result.current.current?.mouseEventCallbacks.mouseup[0]).toBe(mockMouseEventCallback);
74
+ expect(result.current.current?.mouseEventCallbacks.mouseUp[0]).toBe(mockMouseEventCallback);
75
75
 
76
- result.current.current?.mouseEventCallbacks.mouseup[0]?.(props);
76
+ result.current.current?.mouseEventCallbacks.mouseUp[0]?.(props);
77
77
  expect(mockMouseEventCallback).toHaveBeenCalledTimes(4);
78
78
  expect(mockMouseEventCallback).toHaveBeenCalledWith(props);
79
79
 
80
80
  result.current.current?.onRightClick(mockMouseEventCallback);
81
- expect(result.current.current?.mouseEventCallbacks.rightclick[0]).toBe(mockMouseEventCallback);
81
+ expect(result.current.current?.mouseEventCallbacks.rightClick[0]).toBe(mockMouseEventCallback);
82
82
 
83
- result.current.current?.mouseEventCallbacks.rightclick[0]?.(props);
83
+ result.current.current?.mouseEventCallbacks.rightClick[0]?.(props);
84
84
  expect(mockMouseEventCallback).toHaveBeenCalledTimes(5);
85
85
  expect(mockMouseEventCallback).toHaveBeenCalledWith(props);
86
86
 
87
87
  result.current.current?.onRightDown(mockMouseEventCallback);
88
- expect(result.current.current?.mouseEventCallbacks.rightdown[0]).toBe(mockMouseEventCallback);
88
+ expect(result.current.current?.mouseEventCallbacks.rightDown[0]).toBe(mockMouseEventCallback);
89
89
 
90
- result.current.current?.mouseEventCallbacks.rightdown[0]?.(props);
90
+ result.current.current?.mouseEventCallbacks.rightDown[0]?.(props);
91
91
  expect(mockMouseEventCallback).toHaveBeenCalledTimes(6);
92
92
  expect(mockMouseEventCallback).toHaveBeenCalledWith(props);
93
93
 
94
94
  result.current.current?.onRightUp(mockMouseEventCallback);
95
- expect(result.current.current?.mouseEventCallbacks.rightup[0]).toBe(mockMouseEventCallback);
95
+ expect(result.current.current?.mouseEventCallbacks.rightUp[0]).toBe(mockMouseEventCallback);
96
96
 
97
- result.current.current?.mouseEventCallbacks.rightup[0]?.(props);
97
+ result.current.current?.mouseEventCallbacks.rightUp[0]?.(props);
98
98
  expect(mockMouseEventCallback).toHaveBeenCalledTimes(7);
99
99
  expect(mockMouseEventCallback).toHaveBeenCalledWith(props);
100
100
 
101
101
  result.current.current?.onMiddleClick(mockMouseEventCallback);
102
- expect(result.current.current?.mouseEventCallbacks.middleclick[0]).toBe(mockMouseEventCallback);
102
+ expect(result.current.current?.mouseEventCallbacks.middleClick[0]).toBe(mockMouseEventCallback);
103
103
 
104
- result.current.current?.mouseEventCallbacks.middleclick[0]?.(props);
104
+ result.current.current?.mouseEventCallbacks.middleClick[0]?.(props);
105
105
  expect(mockMouseEventCallback).toHaveBeenCalledTimes(8);
106
106
  expect(mockMouseEventCallback).toHaveBeenCalledWith(props);
107
107
 
108
108
  result.current.current?.onMiddleDown(mockMouseEventCallback);
109
- expect(result.current.current?.mouseEventCallbacks.middledown[0]).toBe(mockMouseEventCallback);
109
+ expect(result.current.current?.mouseEventCallbacks.middleDown[0]).toBe(mockMouseEventCallback);
110
110
 
111
- result.current.current?.mouseEventCallbacks.middledown[0]?.(props);
111
+ result.current.current?.mouseEventCallbacks.middleDown[0]?.(props);
112
112
  expect(mockMouseEventCallback).toHaveBeenCalledTimes(9);
113
113
  expect(mockMouseEventCallback).toHaveBeenCalledWith(props);
114
114
 
115
115
  result.current.current?.onMiddleUp(mockMouseEventCallback);
116
- expect(result.current.current?.mouseEventCallbacks.middleup[0]).toBe(mockMouseEventCallback);
116
+ expect(result.current.current?.mouseEventCallbacks.middleUp[0]).toBe(mockMouseEventCallback);
117
117
 
118
- result.current.current?.mouseEventCallbacks.middleup[0]?.(props);
118
+ result.current.current?.mouseEventCallbacks.middleUp[0]?.(props);
119
119
  expect(mockMouseEventCallback).toHaveBeenCalledTimes(10);
120
120
  expect(mockMouseEventCallback).toHaveBeenCalledWith(props);
121
121
 
122
122
  result.current.current?.onMouseMove(mockMouseEventCallback);
123
- expect(result.current.current?.mouseEventCallbacks.mousemove[0]).toBe(mockMouseEventCallback);
123
+ expect(result.current.current?.mouseEventCallbacks.mouseMove[0]).toBe(mockMouseEventCallback);
124
124
 
125
- result.current.current?.mouseEventCallbacks.mousemove[0]?.(props);
125
+ result.current.current?.mouseEventCallbacks.mouseMove[0]?.(props);
126
126
  expect(mockMouseEventCallback).toHaveBeenCalledTimes(11);
127
127
  expect(mockMouseEventCallback).toHaveBeenCalledWith(props);
128
128
 
129
129
  result.current.current?.onMouseEnter(mockMouseEventCallback);
130
- expect(result.current.current?.mouseEventCallbacks.mouseenter[0]).toBe(mockMouseEventCallback);
130
+ expect(result.current.current?.mouseEventCallbacks.mouseEnter[0]).toBe(mockMouseEventCallback);
131
131
 
132
- result.current.current?.mouseEventCallbacks.mouseenter[0]?.(props);
132
+ result.current.current?.mouseEventCallbacks.mouseEnter[0]?.(props);
133
133
  expect(mockMouseEventCallback).toHaveBeenCalledTimes(12);
134
134
  expect(mockMouseEventCallback).toHaveBeenCalledWith(props);
135
135
 
136
136
  result.current.current?.onMouseLeave(mockMouseEventCallback);
137
- expect(result.current.current?.mouseEventCallbacks.mouseleave[0]).toBe(mockMouseEventCallback);
137
+ expect(result.current.current?.mouseEventCallbacks.mouseLeave[0]).toBe(mockMouseEventCallback);
138
138
 
139
- result.current.current?.mouseEventCallbacks.mouseleave[0]?.(props);
139
+ result.current.current?.mouseEventCallbacks.mouseLeave[0]?.(props);
140
140
  expect(mockMouseEventCallback).toHaveBeenCalledTimes(13);
141
141
  expect(mockMouseEventCallback).toHaveBeenCalledWith(props);
142
142
 
@@ -53,18 +53,18 @@ export default function useEngineRef(
53
53
  const cancelCameraFlight = useRef<() => void>();
54
54
  const mouseEventCallbacks = useRef<MouseEventCallbacks>({
55
55
  click: [],
56
- doubleclick: [],
57
- mousedown: [],
58
- mouseup: [],
59
- rightclick: [],
60
- rightdown: [],
61
- rightup: [],
62
- middleclick: [],
63
- middledown: [],
64
- middleup: [],
65
- mousemove: [],
66
- mouseenter: [],
67
- mouseleave: [],
56
+ doubleClick: [],
57
+ mouseDown: [],
58
+ mouseUp: [],
59
+ rightClick: [],
60
+ rightDown: [],
61
+ rightUp: [],
62
+ middleClick: [],
63
+ middleDown: [],
64
+ middleUp: [],
65
+ mouseMove: [],
66
+ mouseEnter: [],
67
+ mouseLeave: [],
68
68
  wheel: [],
69
69
  });
70
70
  const tickEventCallback = useRef<TickEventCallback[]>([]);
@@ -237,6 +237,8 @@ export default function useEngineRef(
237
237
  setView: camera => {
238
238
  const viewer = cesium.current?.cesiumElement;
239
239
  if (!viewer || viewer.isDestroyed()) return false;
240
+ if (camera.lat === undefined || camera.lng === undefined || camera.height === undefined)
241
+ return false;
240
242
  const scene = viewer.scene;
241
243
  if (camera.lng || camera.lat || camera.height) {
242
244
  const xyz = Cesium.Cartesian3.fromDegrees(camera.lng, camera.lat, camera.height);
@@ -675,40 +677,40 @@ export default function useEngineRef(
675
677
  mouseEventCallbacks.current.click.push(cb);
676
678
  },
677
679
  onDoubleClick: (cb: (props: MouseEventProps) => void) => {
678
- mouseEventCallbacks.current.doubleclick.push(cb);
680
+ mouseEventCallbacks.current.doubleClick.push(cb);
679
681
  },
680
682
  onMouseDown: (cb: (props: MouseEventProps) => void) => {
681
- mouseEventCallbacks.current.mousedown.push(cb);
683
+ mouseEventCallbacks.current.mouseDown.push(cb);
682
684
  },
683
685
  onMouseUp: (cb: (props: MouseEventProps) => void) => {
684
- mouseEventCallbacks.current.mouseup.push(cb);
686
+ mouseEventCallbacks.current.mouseUp.push(cb);
685
687
  },
686
688
  onRightClick: (cb: (props: MouseEventProps) => void) => {
687
- mouseEventCallbacks.current.rightclick.push(cb);
689
+ mouseEventCallbacks.current.rightClick.push(cb);
688
690
  },
689
691
  onRightDown: (cb: (props: MouseEventProps) => void) => {
690
- mouseEventCallbacks.current.rightdown.push(cb);
692
+ mouseEventCallbacks.current.rightDown.push(cb);
691
693
  },
692
694
  onRightUp: (cb: (props: MouseEventProps) => void) => {
693
- mouseEventCallbacks.current.rightup.push(cb);
695
+ mouseEventCallbacks.current.rightUp.push(cb);
694
696
  },
695
697
  onMiddleClick: (cb: (props: MouseEventProps) => void) => {
696
- mouseEventCallbacks.current.middleclick.push(cb);
698
+ mouseEventCallbacks.current.middleClick.push(cb);
697
699
  },
698
700
  onMiddleDown: (cb: (props: MouseEventProps) => void) => {
699
- mouseEventCallbacks.current.middledown.push(cb);
701
+ mouseEventCallbacks.current.middleDown.push(cb);
700
702
  },
701
703
  onMiddleUp: (cb: (props: MouseEventProps) => void) => {
702
- mouseEventCallbacks.current.middleup.push(cb);
704
+ mouseEventCallbacks.current.middleUp.push(cb);
703
705
  },
704
706
  onMouseMove: (cb: (props: MouseEventProps) => void) => {
705
- mouseEventCallbacks.current.mousemove.push(cb);
707
+ mouseEventCallbacks.current.mouseMove.push(cb);
706
708
  },
707
709
  onMouseEnter: (cb: (props: MouseEventProps) => void) => {
708
- mouseEventCallbacks.current.mouseenter.push(cb);
710
+ mouseEventCallbacks.current.mouseEnter.push(cb);
709
711
  },
710
712
  onMouseLeave: (cb: (props: MouseEventProps) => void) => {
711
- mouseEventCallbacks.current.mouseleave.push(cb);
713
+ mouseEventCallbacks.current.mouseLeave.push(cb);
712
714
  },
713
715
  onWheel: (cb: (props: MouseEventProps) => void) => {
714
716
  mouseEventCallbacks.current.wheel.push(cb);
@@ -133,7 +133,7 @@ const useTerrainHeatmap = ({
133
133
  minHeight: heatmapMinHeight,
134
134
  logarithmic: heatmapLogarithmic,
135
135
  colorLUT: heatmapColorLUT,
136
- } = terrain?.heightMap ?? {};
136
+ } = terrain?.elevationHeatMap ?? {};
137
137
 
138
138
  const isCustomHeatmapEnabled = useMemo(() => heatmapType === "custom", [heatmapType]);
139
139
 
@@ -412,18 +412,18 @@ export default ({
412
412
  wheel: CesiumMouseWheelEvent | undefined;
413
413
  } = {
414
414
  click: undefined,
415
- doubleclick: undefined,
416
- mousedown: undefined,
417
- mouseup: undefined,
418
- rightclick: undefined,
419
- rightdown: undefined,
420
- rightup: undefined,
421
- middleclick: undefined,
422
- middledown: undefined,
423
- middleup: undefined,
424
- mousemove: undefined,
425
- mouseenter: undefined,
426
- mouseleave: undefined,
415
+ doubleClick: undefined,
416
+ mouseDown: undefined,
417
+ mouseUp: undefined,
418
+ rightClick: undefined,
419
+ rightDown: undefined,
420
+ rightUp: undefined,
421
+ middleClick: undefined,
422
+ middleDown: undefined,
423
+ middleUp: undefined,
424
+ mouseMove: undefined,
425
+ mouseEnter: undefined,
426
+ mouseLeave: undefined,
427
427
  wheel: (delta: number) => {
428
428
  handleMouseWheel(delta);
429
429
  },
@@ -666,16 +666,15 @@ export default ({
666
666
  [selectionReason, engineAPI, onLayerEdit, onLayerVisibility, onLayerLoad, timelineManagerRef],
667
667
  );
668
668
 
669
- const globe = cesium.current?.cesiumElement?.scene.globe;
670
-
671
669
  useEffect(() => {
670
+ const globe = cesium.current?.cesiumElement?.scene.globe;
672
671
  if (globe) {
673
672
  const surface = (globe as any)._surface as CustomGlobeSurface;
674
673
  if (surface) {
675
674
  surface.tileProvider._debug.wireframe = property?.debug?.showGlobeWireframe ?? false;
676
675
  }
677
676
  }
678
- }, [globe, property?.debug?.showGlobeWireframe]);
677
+ }, [property?.debug?.showGlobeWireframe]);
679
678
 
680
679
  useEffect(() => {
681
680
  if (!time) return;
@@ -143,18 +143,18 @@ const Cesium: React.ForwardRefRenderFunction<EngineRef, EngineProps> = (
143
143
  }}
144
144
  shadows={!!property?.scene?.shadow?.enabled}
145
145
  onClick={handleClick}
146
- onDoubleClick={mouseEventHandles.doubleclick}
147
- onMouseDown={mouseEventHandles.mousedown}
148
- onMouseUp={mouseEventHandles.mouseup}
149
- onRightClick={mouseEventHandles.rightclick}
150
- onRightDown={mouseEventHandles.rightdown}
151
- onRightUp={mouseEventHandles.rightup}
152
- onMiddleClick={mouseEventHandles.middleclick}
153
- onMiddleDown={mouseEventHandles.middledown}
154
- onMiddleUp={mouseEventHandles.middleup}
155
- onMouseMove={mouseEventHandles.mousemove}
156
- onMouseEnter={mouseEventHandles.mouseenter}
157
- onMouseLeave={mouseEventHandles.mouseleave}
146
+ onDoubleClick={mouseEventHandles.doubleClick}
147
+ onMouseDown={mouseEventHandles.mouseDown}
148
+ onMouseUp={mouseEventHandles.mouseUp}
149
+ onRightClick={mouseEventHandles.rightClick}
150
+ onRightDown={mouseEventHandles.rightDown}
151
+ onRightUp={mouseEventHandles.rightUp}
152
+ onMiddleClick={mouseEventHandles.middleClick}
153
+ onMiddleDown={mouseEventHandles.middleDown}
154
+ onMiddleUp={mouseEventHandles.middleUp}
155
+ onMouseMove={mouseEventHandles.mouseMove}
156
+ onMouseEnter={mouseEventHandles.mouseEnter}
157
+ onMouseLeave={mouseEventHandles.mouseLeave}
158
158
  onWheel={mouseEventHandles.wheel}>
159
159
  <Event onMount={handleMount} onUnmount={handleUnmount} />
160
160
  <Clock timelineManagerRef={timelineManagerRef} />
@@ -31,19 +31,19 @@ export type Rect = {
31
31
  /** Represents the camera position and state */
32
32
  export type CameraPosition = {
33
33
  /** degrees */
34
- lat: number;
34
+ lat?: number;
35
35
  /** degrees */
36
- lng: number;
36
+ lng?: number;
37
37
  /** meters */
38
- height: number;
38
+ height?: number;
39
39
  /** radians */
40
- heading: number;
40
+ heading?: number;
41
41
  /** radians */
42
- pitch: number;
42
+ pitch?: number;
43
43
  /** radians */
44
- roll: number;
44
+ roll?: number;
45
45
  /** Field of view expressed in radians */
46
- fov: number;
46
+ fov?: number;
47
47
  /** Aspect ratio of frustum */
48
48
  aspectRatio?: number;
49
49
  };