@xrift/world-components 0.46.0 → 0.49.0
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.
- package/dist/components/BillboardY/hooks.d.ts +1 -1
- package/dist/components/BillboardY/hooks.d.ts.map +1 -1
- package/dist/components/BillboardY/index.d.ts +1 -1
- package/dist/components/BillboardY/index.d.ts.map +1 -1
- package/dist/components/DevEnvironment/components/ControlsHelp.d.ts +1 -1
- package/dist/components/DevEnvironment/components/ControlsHelp.d.ts.map +1 -1
- package/dist/components/DevEnvironment/components/Crosshair.d.ts +1 -1
- package/dist/components/DevEnvironment/components/Crosshair.d.ts.map +1 -1
- package/dist/components/DevEnvironment/components/GrabSystem/index.d.ts +1 -1
- package/dist/components/DevEnvironment/components/GrabSystem/index.d.ts.map +1 -1
- package/dist/components/DevEnvironment/components/PhysicsPlayer.d.ts +1 -1
- package/dist/components/DevEnvironment/components/PhysicsPlayer.d.ts.map +1 -1
- package/dist/components/DevEnvironment/components/PointerLockStatus.d.ts +1 -1
- package/dist/components/DevEnvironment/components/PointerLockStatus.d.ts.map +1 -1
- package/dist/components/DevEnvironment/index.d.ts +1 -1
- package/dist/components/DevEnvironment/index.d.ts.map +1 -1
- package/dist/components/EntryLogBoard/components/AvatarIcon.d.ts +1 -1
- package/dist/components/EntryLogBoard/components/AvatarIcon.d.ts.map +1 -1
- package/dist/components/EntryLogBoard/components/LogRow.d.ts +1 -1
- package/dist/components/EntryLogBoard/components/LogRow.d.ts.map +1 -1
- package/dist/components/EntryLogBoard/index.d.ts +1 -1
- package/dist/components/EntryLogBoard/index.d.ts.map +1 -1
- package/dist/components/LiveVideoPlayer/components/ControlPanel/index.d.ts +1 -1
- package/dist/components/LiveVideoPlayer/components/ControlPanel/index.d.ts.map +1 -1
- package/dist/components/LiveVideoPlayer/components/LiveVideoTexture.d.ts +1 -1
- package/dist/components/LiveVideoPlayer/components/LiveVideoTexture.d.ts.map +1 -1
- package/dist/components/LiveVideoPlayer/index.d.ts +1 -1
- package/dist/components/LiveVideoPlayer/index.d.ts.map +1 -1
- package/dist/components/Mirror/index.d.ts +1 -1
- package/dist/components/Mirror/index.d.ts.map +1 -1
- package/dist/components/Portal/components/PortalGlow/index.d.ts +1 -1
- package/dist/components/Portal/components/PortalGlow/index.d.ts.map +1 -1
- package/dist/components/Portal/components/PortalParticles/index.d.ts +1 -1
- package/dist/components/Portal/components/PortalParticles/index.d.ts.map +1 -1
- package/dist/components/Portal/components/PortalPedestal/index.d.ts +1 -1
- package/dist/components/Portal/components/PortalPedestal/index.d.ts.map +1 -1
- package/dist/components/Portal/components/PortalThumbnail/index.d.ts +1 -1
- package/dist/components/Portal/components/PortalThumbnail/index.d.ts.map +1 -1
- package/dist/components/Portal/components/PortalVortex/index.d.ts +1 -1
- package/dist/components/Portal/components/PortalVortex/index.d.ts.map +1 -1
- package/dist/components/Portal/index.d.ts +1 -1
- package/dist/components/Portal/index.d.ts.map +1 -1
- package/dist/components/ScreenShareDisplay/index.d.ts +1 -1
- package/dist/components/ScreenShareDisplay/index.d.ts.map +1 -1
- package/dist/components/Skybox/index.d.ts +1 -1
- package/dist/components/Skybox/index.d.ts.map +1 -1
- package/dist/components/TagBoard/components/TagChip.d.ts +1 -1
- package/dist/components/TagBoard/components/TagChip.d.ts.map +1 -1
- package/dist/components/TagBoard/components/TagDisplay/index.d.ts +1 -1
- package/dist/components/TagBoard/components/TagDisplay/index.d.ts.map +1 -1
- package/dist/components/TagBoard/components/TagSelector/components/ActionButton.d.ts +1 -1
- package/dist/components/TagBoard/components/TagSelector/components/ActionButton.d.ts.map +1 -1
- package/dist/components/TagBoard/components/TagSelector/components/TagButton.d.ts +1 -1
- package/dist/components/TagBoard/components/TagSelector/components/TagButton.d.ts.map +1 -1
- package/dist/components/TagBoard/components/TagSelector/index.d.ts +1 -1
- package/dist/components/TagBoard/components/TagSelector/index.d.ts.map +1 -1
- package/dist/components/TagBoard/index.d.ts +1 -1
- package/dist/components/TagBoard/index.d.ts.map +1 -1
- package/dist/components/Video180Sphere/EyeView.d.ts +1 -1
- package/dist/components/Video180Sphere/EyeView.d.ts.map +1 -1
- package/dist/components/Video180Sphere/index.d.ts +1 -1
- package/dist/components/Video180Sphere/index.d.ts.map +1 -1
- package/dist/components/VideoPlayer/components/ControlPanel.d.ts +1 -1
- package/dist/components/VideoPlayer/components/ControlPanel.d.ts.map +1 -1
- package/dist/components/VideoPlayer/index.d.ts +1 -1
- package/dist/components/VideoPlayer/index.d.ts.map +1 -1
- package/dist/components/VideoScreen/constants.d.ts +27 -0
- package/dist/components/VideoScreen/constants.d.ts.map +1 -0
- package/dist/components/VideoScreen/constants.js +27 -0
- package/dist/components/VideoScreen/constants.js.map +1 -0
- package/dist/components/VideoScreen/hooks.d.ts +19 -0
- package/dist/components/VideoScreen/hooks.d.ts.map +1 -0
- package/dist/components/VideoScreen/hooks.js +69 -0
- package/dist/components/VideoScreen/hooks.js.map +1 -0
- package/dist/components/VideoScreen/index.d.ts +1 -1
- package/dist/components/VideoScreen/index.d.ts.map +1 -1
- package/dist/components/VideoScreen/index.js +22 -17
- package/dist/components/VideoScreen/index.js.map +1 -1
- package/dist/components/VideoScreen/types.d.ts +14 -4
- package/dist/components/VideoScreen/types.d.ts.map +1 -1
- package/dist/components/VideoScreen/utils.d.ts +73 -0
- package/dist/components/VideoScreen/utils.d.ts.map +1 -0
- package/dist/components/VideoScreen/utils.js +74 -0
- package/dist/components/VideoScreen/utils.js.map +1 -0
- package/dist/components/commons/IconButton/index.d.ts +1 -1
- package/dist/components/commons/IconButton/index.d.ts.map +1 -1
- package/dist/components/commons/PlaceholderScreen/index.d.ts +1 -1
- package/dist/components/commons/PlaceholderScreen/index.d.ts.map +1 -1
- package/dist/components/commons/VideoMesh/index.d.ts +1 -1
- package/dist/components/commons/VideoMesh/index.d.ts.map +1 -1
- package/dist/components/commons/VolumeControl/index.d.ts +1 -1
- package/dist/components/commons/VolumeControl/index.d.ts.map +1 -1
- package/dist/contexts/AudioVolumeContext.d.ts +2 -2
- package/dist/contexts/AudioVolumeContext.d.ts.map +1 -1
- package/dist/contexts/ConfirmContext.d.ts +1 -1
- package/dist/contexts/ConfirmContext.d.ts.map +1 -1
- package/dist/contexts/FileInputContext.d.ts +1 -1
- package/dist/contexts/FileInputContext.d.ts.map +1 -1
- package/dist/contexts/GrabbableContext.d.ts +1 -1
- package/dist/contexts/GrabbableContext.d.ts.map +1 -1
- package/dist/contexts/InstanceContext.d.ts +1 -1
- package/dist/contexts/InstanceContext.d.ts.map +1 -1
- package/dist/contexts/InstanceEventContext.d.ts +1 -1
- package/dist/contexts/InstanceEventContext.d.ts.map +1 -1
- package/dist/contexts/InstanceStateContext.d.ts +1 -1
- package/dist/contexts/InstanceStateContext.d.ts.map +1 -1
- package/dist/contexts/ItemContext.d.ts +23 -3
- package/dist/contexts/ItemContext.d.ts.map +1 -1
- package/dist/contexts/ItemContext.js +7 -3
- package/dist/contexts/ItemContext.js.map +1 -1
- package/dist/contexts/PlacementStateContext.d.ts +1 -1
- package/dist/contexts/PlacementStateContext.d.ts.map +1 -1
- package/dist/contexts/ScreenShareContext.d.ts +1 -1
- package/dist/contexts/ScreenShareContext.d.ts.map +1 -1
- package/dist/contexts/ServerClockContext.d.ts +108 -0
- package/dist/contexts/ServerClockContext.d.ts.map +1 -0
- package/dist/contexts/ServerClockContext.js +48 -0
- package/dist/contexts/ServerClockContext.js.map +1 -0
- package/dist/contexts/SharedFileContext.d.ts +1 -1
- package/dist/contexts/SharedFileContext.d.ts.map +1 -1
- package/dist/contexts/SpawnPointContext.d.ts +1 -1
- package/dist/contexts/SpawnPointContext.d.ts.map +1 -1
- package/dist/contexts/TeleportContext.d.ts +1 -1
- package/dist/contexts/TeleportContext.d.ts.map +1 -1
- package/dist/contexts/TextInputContext.d.ts +1 -1
- package/dist/contexts/TextInputContext.d.ts.map +1 -1
- package/dist/contexts/UsersContext.d.ts +1 -1
- package/dist/contexts/UsersContext.d.ts.map +1 -1
- package/dist/contexts/WorldContext.d.ts +1 -1
- package/dist/contexts/WorldContext.d.ts.map +1 -1
- package/dist/contexts/WorldStorageContext.d.ts +1 -1
- package/dist/contexts/WorldStorageContext.d.ts.map +1 -1
- package/dist/contexts/XRiftContext.d.ts +7 -1
- package/dist/contexts/XRiftContext.d.ts.map +1 -1
- package/dist/contexts/XRiftContext.js +5 -1
- package/dist/contexts/XRiftContext.js.map +1 -1
- package/dist/hooks/useServerClock.d.ts +60 -0
- package/dist/hooks/useServerClock.d.ts.map +1 -0
- package/dist/hooks/useServerClock.js +58 -0
- package/dist/hooks/useServerClock.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/package.json +7 -5
- package/dist/components/BillboardY/__tests__/utils.test.d.ts +0 -2
- package/dist/components/BillboardY/__tests__/utils.test.d.ts.map +0 -1
- package/dist/components/BillboardY/__tests__/utils.test.js +0 -45
- package/dist/components/BillboardY/__tests__/utils.test.js.map +0 -1
- package/dist/components/DevEnvironment/__tests__/utils.test.d.ts +0 -2
- package/dist/components/DevEnvironment/__tests__/utils.test.d.ts.map +0 -1
- package/dist/components/DevEnvironment/__tests__/utils.test.js +0 -24
- package/dist/components/DevEnvironment/__tests__/utils.test.js.map +0 -1
- package/dist/components/DevEnvironment/components/GrabSystem/__tests__/store.test.d.ts +0 -2
- package/dist/components/DevEnvironment/components/GrabSystem/__tests__/store.test.d.ts.map +0 -1
- package/dist/components/DevEnvironment/components/GrabSystem/__tests__/store.test.js +0 -114
- package/dist/components/DevEnvironment/components/GrabSystem/__tests__/store.test.js.map +0 -1
- package/dist/components/DevEnvironment/components/GrabSystem/__tests__/utils.test.d.ts +0 -2
- package/dist/components/DevEnvironment/components/GrabSystem/__tests__/utils.test.d.ts.map +0 -1
- package/dist/components/DevEnvironment/components/GrabSystem/__tests__/utils.test.js +0 -103
- package/dist/components/DevEnvironment/components/GrabSystem/__tests__/utils.test.js.map +0 -1
- package/dist/components/EntryLogBoard/__tests__/utils.test.d.ts +0 -2
- package/dist/components/EntryLogBoard/__tests__/utils.test.d.ts.map +0 -1
- package/dist/components/EntryLogBoard/__tests__/utils.test.js +0 -231
- package/dist/components/EntryLogBoard/__tests__/utils.test.js.map +0 -1
- package/dist/components/Grabbable/__tests__/utils.test.d.ts +0 -2
- package/dist/components/Grabbable/__tests__/utils.test.d.ts.map +0 -1
- package/dist/components/Grabbable/__tests__/utils.test.js +0 -59
- package/dist/components/Grabbable/__tests__/utils.test.js.map +0 -1
- package/dist/components/LiveVideoPlayer/components/ControlPanel/LiveIndicator.d.ts +0 -8
- package/dist/components/LiveVideoPlayer/components/ControlPanel/LiveIndicator.d.ts.map +0 -1
- package/dist/components/LiveVideoPlayer/components/ControlPanel/LiveIndicator.js +0 -11
- package/dist/components/LiveVideoPlayer/components/ControlPanel/LiveIndicator.js.map +0 -1
- package/dist/components/LiveVideoPlayer/components/index.d.ts +0 -3
- package/dist/components/LiveVideoPlayer/components/index.d.ts.map +0 -1
- package/dist/components/LiveVideoPlayer/components/index.js +0 -3
- package/dist/components/LiveVideoPlayer/components/index.js.map +0 -1
- package/dist/components/LiveVideoPlayer/hooks/useHlsVideo/__tests__/utils.test.d.ts +0 -2
- package/dist/components/LiveVideoPlayer/hooks/useHlsVideo/__tests__/utils.test.d.ts.map +0 -1
- package/dist/components/LiveVideoPlayer/hooks/useHlsVideo/__tests__/utils.test.js +0 -196
- package/dist/components/LiveVideoPlayer/hooks/useHlsVideo/__tests__/utils.test.js.map +0 -1
- package/dist/components/LiveVideoPlayer/hooks/useHlsVideo/classes/__tests__/HlsJsPlayer.test.d.ts +0 -2
- package/dist/components/LiveVideoPlayer/hooks/useHlsVideo/classes/__tests__/HlsJsPlayer.test.d.ts.map +0 -1
- package/dist/components/LiveVideoPlayer/hooks/useHlsVideo/classes/__tests__/HlsJsPlayer.test.js +0 -146
- package/dist/components/LiveVideoPlayer/hooks/useHlsVideo/classes/__tests__/HlsJsPlayer.test.js.map +0 -1
- package/dist/components/LiveVideoPlayer/hooks/useHlsVideo/classes/__tests__/NativeHlsPlayer.test.d.ts +0 -2
- package/dist/components/LiveVideoPlayer/hooks/useHlsVideo/classes/__tests__/NativeHlsPlayer.test.d.ts.map +0 -1
- package/dist/components/LiveVideoPlayer/hooks/useHlsVideo/classes/__tests__/NativeHlsPlayer.test.js +0 -94
- package/dist/components/LiveVideoPlayer/hooks/useHlsVideo/classes/__tests__/NativeHlsPlayer.test.js.map +0 -1
- package/dist/components/LiveVideoPlayer/hooks/useHlsVideo/classes/__tests__/RecoveryTracker.test.d.ts +0 -2
- package/dist/components/LiveVideoPlayer/hooks/useHlsVideo/classes/__tests__/RecoveryTracker.test.d.ts.map +0 -1
- package/dist/components/LiveVideoPlayer/hooks/useHlsVideo/classes/__tests__/RecoveryTracker.test.js +0 -74
- package/dist/components/LiveVideoPlayer/hooks/useHlsVideo/classes/__tests__/RecoveryTracker.test.js.map +0 -1
- package/dist/components/LiveVideoPlayer/hooks/useLiveVideoPlayer/index.d.ts +0 -25
- package/dist/components/LiveVideoPlayer/hooks/useLiveVideoPlayer/index.d.ts.map +0 -1
- package/dist/components/LiveVideoPlayer/hooks/useLiveVideoPlayer/index.js +0 -97
- package/dist/components/LiveVideoPlayer/hooks/useLiveVideoPlayer/index.js.map +0 -1
- package/dist/components/Mirror/__tests__/utils.test.d.ts +0 -2
- package/dist/components/Mirror/__tests__/utils.test.d.ts.map +0 -1
- package/dist/components/Mirror/__tests__/utils.test.js +0 -42
- package/dist/components/Mirror/__tests__/utils.test.js.map +0 -1
- package/dist/components/MsdfText/index.d.ts +0 -24
- package/dist/components/MsdfText/index.d.ts.map +0 -1
- package/dist/components/MsdfText/index.js +0 -24
- package/dist/components/MsdfText/index.js.map +0 -1
- package/dist/components/Portal/__tests__/utils.test.d.ts +0 -2
- package/dist/components/Portal/__tests__/utils.test.d.ts.map +0 -1
- package/dist/components/Portal/__tests__/utils.test.js +0 -56
- package/dist/components/Portal/__tests__/utils.test.js.map +0 -1
- package/dist/components/ScreenShareDisplay/__tests__/utils.test.d.ts +0 -2
- package/dist/components/ScreenShareDisplay/__tests__/utils.test.d.ts.map +0 -1
- package/dist/components/ScreenShareDisplay/__tests__/utils.test.js +0 -47
- package/dist/components/ScreenShareDisplay/__tests__/utils.test.js.map +0 -1
- package/dist/components/TroikaText/index.d.ts +0 -4
- package/dist/components/TroikaText/index.d.ts.map +0 -1
- package/dist/components/TroikaText/index.js +0 -50
- package/dist/components/TroikaText/index.js.map +0 -1
- package/dist/components/TroikaText/types.d.ts +0 -19
- package/dist/components/TroikaText/types.d.ts.map +0 -1
- package/dist/components/TroikaText/types.js +0 -2
- package/dist/components/TroikaText/types.js.map +0 -1
- package/dist/components/VideoPlayer/ControlPanel.d.ts +0 -3
- package/dist/components/VideoPlayer/ControlPanel.d.ts.map +0 -1
- package/dist/components/VideoPlayer/ControlPanel.js +0 -34
- package/dist/components/VideoPlayer/ControlPanel.js.map +0 -1
- package/dist/components/VideoPlayer/ProgressBar.d.ts +0 -3
- package/dist/components/VideoPlayer/ProgressBar.d.ts.map +0 -1
- package/dist/components/VideoPlayer/ProgressBar.js +0 -21
- package/dist/components/VideoPlayer/ProgressBar.js.map +0 -1
- package/dist/components/VideoPlayer/__tests__/utils.test.d.ts +0 -2
- package/dist/components/VideoPlayer/__tests__/utils.test.d.ts.map +0 -1
- package/dist/components/VideoPlayer/__tests__/utils.test.js +0 -23
- package/dist/components/VideoPlayer/__tests__/utils.test.js.map +0 -1
- package/dist/components/VideoPlayer/components/ProgressBar.d.ts +0 -12
- package/dist/components/VideoPlayer/components/ProgressBar.d.ts.map +0 -1
- package/dist/components/VideoPlayer/components/ProgressBar.js +0 -21
- package/dist/components/VideoPlayer/components/ProgressBar.js.map +0 -1
- package/dist/components/VideoPlayer/components/index.d.ts +0 -3
- package/dist/components/VideoPlayer/components/index.d.ts.map +0 -1
- package/dist/components/VideoPlayer/components/index.js +0 -3
- package/dist/components/VideoPlayer/components/index.js.map +0 -1
- package/dist/components/VideoPlayer/types.d.ts +0 -44
- package/dist/components/VideoPlayer/types.d.ts.map +0 -1
- package/dist/components/VideoPlayer/types.js +0 -2
- package/dist/components/VideoPlayer/types.js.map +0 -1
- package/dist/components/VideoPlayer/utils.test.d.ts +0 -2
- package/dist/components/VideoPlayer/utils.test.d.ts.map +0 -1
- package/dist/components/VideoPlayer/utils.test.js +0 -23
- package/dist/components/VideoPlayer/utils.test.js.map +0 -1
- package/dist/components/commons/utils.test.d.ts +0 -2
- package/dist/components/commons/utils.test.d.ts.map +0 -1
- package/dist/components/commons/utils.test.js +0 -79
- package/dist/components/commons/utils.test.js.map +0 -1
- package/dist/contexts/FontContext.d.ts +0 -17
- package/dist/contexts/FontContext.d.ts.map +0 -1
- package/dist/contexts/FontContext.js +0 -25
- package/dist/contexts/FontContext.js.map +0 -1
- package/dist/contexts/InstanceInfoContext.d.ts +0 -39
- package/dist/contexts/InstanceInfoContext.d.ts.map +0 -1
- package/dist/contexts/InstanceInfoContext.js +0 -42
- package/dist/contexts/InstanceInfoContext.js.map +0 -1
- package/dist/contexts/PortalContext.d.ts +0 -39
- package/dist/contexts/PortalContext.d.ts.map +0 -1
- package/dist/contexts/PortalContext.js +0 -42
- package/dist/contexts/PortalContext.js.map +0 -1
- package/dist/contexts/WorldEventContext.d.ts +0 -32
- package/dist/contexts/WorldEventContext.d.ts.map +0 -1
- package/dist/contexts/WorldEventContext.js +0 -54
- package/dist/contexts/WorldEventContext.js.map +0 -1
- package/dist/contexts/__tests__/WorldStorageContext.test.d.ts +0 -2
- package/dist/contexts/__tests__/WorldStorageContext.test.d.ts.map +0 -1
- package/dist/contexts/__tests__/WorldStorageContext.test.js +0 -120
- package/dist/contexts/__tests__/WorldStorageContext.test.js.map +0 -1
- package/dist/fonts/FontContext.d.ts +0 -9
- package/dist/fonts/FontContext.d.ts.map +0 -1
- package/dist/fonts/FontContext.js +0 -5
- package/dist/fonts/FontContext.js.map +0 -1
- package/dist/fonts/FontProvider.d.ts +0 -31
- package/dist/fonts/FontProvider.d.ts.map +0 -1
- package/dist/fonts/FontProvider.js +0 -40
- package/dist/fonts/FontProvider.js.map +0 -1
- package/dist/fonts/FontReadyContainer.d.ts +0 -35
- package/dist/fonts/FontReadyContainer.d.ts.map +0 -1
- package/dist/fonts/FontReadyContainer.js +0 -40
- package/dist/fonts/FontReadyContainer.js.map +0 -1
- package/dist/fonts/constants.d.ts +0 -5
- package/dist/fonts/constants.d.ts.map +0 -1
- package/dist/fonts/constants.js +0 -5
- package/dist/fonts/constants.js.map +0 -1
- package/dist/fonts/loadTTF.d.ts +0 -18
- package/dist/fonts/loadTTF.d.ts.map +0 -1
- package/dist/fonts/loadTTF.js +0 -36
- package/dist/fonts/loadTTF.js.map +0 -1
- package/dist/fonts/useTTF.d.ts +0 -7
- package/dist/fonts/useTTF.d.ts.map +0 -1
- package/dist/fonts/useTTF.js +0 -9
- package/dist/fonts/useTTF.js.map +0 -1
- package/dist/hooks/useJapaneseFont.d.ts +0 -7
- package/dist/hooks/useJapaneseFont.d.ts.map +0 -1
- package/dist/hooks/useJapaneseFont.js +0 -25
- package/dist/hooks/useJapaneseFont.js.map +0 -1
- package/dist/hooks/useMsdfFont.d.ts +0 -11
- package/dist/hooks/useMsdfFont.d.ts.map +0 -1
- package/dist/hooks/useMsdfFont.js +0 -19
- package/dist/hooks/useMsdfFont.js.map +0 -1
- package/dist/hooks/usePortalNavigation.d.ts +0 -10
- package/dist/hooks/usePortalNavigation.d.ts.map +0 -1
- package/dist/hooks/usePortalNavigation.js +0 -46
- package/dist/hooks/usePortalNavigation.js.map +0 -1
- package/dist/hooks/useWorldEvent.d.ts +0 -25
- package/dist/hooks/useWorldEvent.d.ts.map +0 -1
- package/dist/hooks/useWorldEvent.js +0 -45
- package/dist/hooks/useWorldEvent.js.map +0 -1
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { isServerClockAccurateEnough, useServerClockContext, } from '../contexts/ServerClockContext';
|
|
2
|
+
/**
|
|
3
|
+
* インスタンス内の全端末で共有できる時計(サーバ時刻)を提供するフック
|
|
4
|
+
*
|
|
5
|
+
* 端末の `Date.now()` は互いに 0.1〜数秒ずれているため、動画の再生位置同期・
|
|
6
|
+
* カウントダウン・同時演出・決定論的アニメーションはこれを使う。
|
|
7
|
+
*
|
|
8
|
+
* 指針:
|
|
9
|
+
* - **`now` は関数**。値ではないので `useFrame` の中から再レンダーなしで呼べる
|
|
10
|
+
* - **`timeJumpCount` の変化を見て基準を取り直す。** 通常は時刻が巻き戻らない
|
|
11
|
+
* よう徐々に補正するが、スリープ復帰などでは飛ぶ。時刻から位置を計算している
|
|
12
|
+
* ワールドは、飛んだときに基準を取り直さないとワープしたままになる
|
|
13
|
+
* - **補正のコストが誤差より大きいなら補正しない。** 動画で言えば、ズレを直すために
|
|
14
|
+
* シークしてバッファが切れるくらいなら、ズレたまま再生を続けるほうが体験は良い
|
|
15
|
+
* - 早押し・ゴール判定のような**公平性が要る用途には使わない**。経路の非対称ぶんの
|
|
16
|
+
* 誤差は検出できず、繰り返しても平均化されない(同じ人が毎回勝つ)
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* // 動画の再生位置を合わせる
|
|
20
|
+
* const clock = useServerClock({ require: 'media' })
|
|
21
|
+
*
|
|
22
|
+
* useFrame(() => {
|
|
23
|
+
* if (!clock.trustworthy) return // 精度が出ていないなら諦める
|
|
24
|
+
* const target = (clock.now() - epoch) / 1000 % duration
|
|
25
|
+
* const diff = target - video.currentTime
|
|
26
|
+
* if (Math.abs(diff) < 0.3) {
|
|
27
|
+
* video.playbackRate = 1 // dead band。戻し忘れると振動し続ける
|
|
28
|
+
* return
|
|
29
|
+
* }
|
|
30
|
+
* if (Math.abs(diff) < 5) video.playbackRate = 1 + Math.sign(diff) * 0.05
|
|
31
|
+
* else if (isBuffered(video, target)) video.currentTime = target
|
|
32
|
+
* // バッファ外なら何もしない(同期より再生継続を優先)
|
|
33
|
+
* })
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* // 全員で一致する動く床(通信ゼロ。後から入った人も即座に正しい位置になる)
|
|
37
|
+
* const { now, timeJumpCount } = useServerClock()
|
|
38
|
+
* const seen = useRef(timeJumpCount)
|
|
39
|
+
*
|
|
40
|
+
* useFrame(() => {
|
|
41
|
+
* if (seen.current !== timeJumpCount) {
|
|
42
|
+
* seen.current = timeJumpCount
|
|
43
|
+
* resetBaseline() // 時刻が飛んだので基準を取り直す
|
|
44
|
+
* }
|
|
45
|
+
* floor.current.position.y = Math.sin(now() / 1000) * 2
|
|
46
|
+
* })
|
|
47
|
+
*
|
|
48
|
+
* @throws {Error} XRiftProvider の外で呼び出された場合
|
|
49
|
+
*/
|
|
50
|
+
export const useServerClock = (options) => {
|
|
51
|
+
const clock = useServerClockContext();
|
|
52
|
+
const accuracy = options?.require;
|
|
53
|
+
return {
|
|
54
|
+
...clock,
|
|
55
|
+
trustworthy: accuracy ? isServerClockAccurateEnough(clock, accuracy) : clock.synced,
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=useServerClock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useServerClock.js","sourceRoot":"","sources":["../../src/hooks/useServerClock.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAG3B,qBAAqB,GACtB,MAAM,gCAAgC,CAAA;AAUvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAA2C,EAAwB,EAAE;IAClG,MAAM,KAAK,GAAG,qBAAqB,EAAE,CAAA;IACrC,MAAM,QAAQ,GAAG,OAAO,EAAE,OAAO,CAAA;IACjC,OAAO;QACL,GAAG,KAAK;QACR,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,2BAA2B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM;KACpF,CAAA;AACH,CAAC,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -11,9 +11,10 @@ export { WorldContext, WorldProvider, useWorldContext, createDefaultWorldImpleme
|
|
|
11
11
|
export { TeleportContext, TeleportProvider, useTeleportContext, createDefaultTeleportImplementation, type TeleportContextValue, type TeleportDestination, } from './contexts/TeleportContext';
|
|
12
12
|
export { InstanceEventContext, InstanceEventProvider, useInstanceEventContext, createDefaultInstanceEventImplementation, type InstanceEventContextValue, } from './contexts/InstanceEventContext';
|
|
13
13
|
export { PlacementStateProvider, usePlacementState, type PlacementMode, type PlacementStateContextValue, } from './contexts/PlacementStateContext';
|
|
14
|
-
export { ItemProvider, useItem, type ItemContextValue, } from './contexts/ItemContext';
|
|
14
|
+
export { ItemProvider, useItem, type ItemContextValue, type ItemPlacer, } from './contexts/ItemContext';
|
|
15
15
|
export { SharedFileContext, SharedFileProvider, useSharedFileContext, createDefaultSharedFileImplementation, type SharedFileContextValue, type SharedFileInfo, type UploadSharedFileOptions, type UpdateSharedFileParams, } from './contexts/SharedFileContext';
|
|
16
16
|
export { WorldStorageContext, WorldStorageProvider, useWorldStorageContext, createDefaultWorldStorageImplementation, WorldStorageError, WORLD_STORAGE_KEY_PATTERN, WORLD_STORAGE_LIMITS, isValidWorldStorageKey, getWorldStorageEntrySize, incrementWorldStorageValue, type WorldStorageContextValue, type WorldStorageErrorCode, type WorldStorageEntry, type SharedWorldStorage, type PlayerWorldStorage, } from './contexts/WorldStorageContext';
|
|
17
|
+
export { ServerClockContext, ServerClockProvider, useServerClockContext, createDefaultServerClockImplementation, isServerClockAccurateEnough, SERVER_CLOCK_ACCURACY_THRESHOLD, type ServerClockContextValue, type ServerClockAccuracy, } from './contexts/ServerClockContext';
|
|
17
18
|
export { GrabbableContext, GrabbableProvider, useGrabbableContext, createDefaultGrabbableImplementation, type GrabbableContextValue, type GrabbableEntry, type GrabbableTransform, type GrabResultTransform, } from './contexts/GrabbableContext';
|
|
18
19
|
export { VoiceVolumeOverrideContext, VoiceVolumeOverrideProvider, useVoiceVolumeOverrideContext, createDefaultVoiceVolumeOverrideImplementation, type VoiceVolumeOverrideContextValue, AudioVolumeContext, AudioVolumeProvider, useAudioVolumeContext, createDefaultAudioVolumeImplementation, type AudioVolumeContextValue, } from './contexts/AudioVolumeContext';
|
|
19
20
|
export { Interactable, type InteractableProps, } from './components/Interactable';
|
|
@@ -44,6 +45,9 @@ export { useWorld } from './hooks/useWorld';
|
|
|
44
45
|
export { useInstanceEvent } from './hooks/useInstanceEvent';
|
|
45
46
|
export { useSharedFile } from './hooks/useSharedFile';
|
|
46
47
|
export { useWorldStorage } from './hooks/useWorldStorage';
|
|
48
|
+
export { useServerClock, type UseServerClockResult } from './hooks/useServerClock';
|
|
49
|
+
export { computeTargetTime, decideVideoSyncAction, isTimeBuffered, type VideoSyncAction, } from './components/VideoScreen/utils';
|
|
50
|
+
export { SYNC_DEAD_BAND, SYNC_RATE_ADJUSTMENT, SYNC_RATE_LIMIT, } from './components/VideoScreen/constants';
|
|
47
51
|
export { useVoiceVolumeOverride, useAudioVolume } from './hooks/useAudioVolume';
|
|
48
52
|
export { useDefaultFont, type FontLocale } from './hooks/useDefaultFont';
|
|
49
53
|
export { LAYERS, type LayerName, type LayerNumber } from './constants/layers';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,KAAK,iBAAiB,GACvB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,KAAK,yBAAyB,GAC/B,MAAM,iCAAiC,CAAA;AAExC,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,uBAAuB,GAC7B,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,UAAU,IAAI,cAAc,EACjC,KAAK,sBAAsB,GAC5B,MAAM,8BAA8B,CAAA;AAErC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,KAAK,IAAI,EACT,KAAK,iBAAiB,GACvB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,oCAAoC,EACpC,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,GACtB,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,oCAAoC,EACpC,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,kBAAkB,GACxB,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EACL,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,kCAAkC,EAClC,KAAK,mBAAmB,EACxB,KAAK,cAAc,GACpB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,mCAAmC,EACnC,KAAK,oBAAoB,EACzB,KAAK,YAAY,GAClB,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,eAAe,EACf,gCAAgC,EAChC,KAAK,iBAAiB,EACtB,KAAK,SAAS,GACf,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,mCAAmC,EACnC,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,wCAAwC,EACxC,KAAK,yBAAyB,GAC/B,MAAM,iCAAiC,CAAA;AAExC,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,KAAK,aAAa,EAClB,KAAK,0BAA0B,GAChC,MAAM,kCAAkC,CAAA;AAEzC,OAAO,EACL,YAAY,EACZ,OAAO,EACP,KAAK,gBAAgB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -15,6 +15,7 @@ export { PlacementStateProvider, usePlacementState, } from './contexts/Placement
|
|
|
15
15
|
export { ItemProvider, useItem, } from './contexts/ItemContext';
|
|
16
16
|
export { SharedFileContext, SharedFileProvider, useSharedFileContext, createDefaultSharedFileImplementation, } from './contexts/SharedFileContext';
|
|
17
17
|
export { WorldStorageContext, WorldStorageProvider, useWorldStorageContext, createDefaultWorldStorageImplementation, WorldStorageError, WORLD_STORAGE_KEY_PATTERN, WORLD_STORAGE_LIMITS, isValidWorldStorageKey, getWorldStorageEntrySize, incrementWorldStorageValue, } from './contexts/WorldStorageContext';
|
|
18
|
+
export { ServerClockContext, ServerClockProvider, useServerClockContext, createDefaultServerClockImplementation, isServerClockAccurateEnough, SERVER_CLOCK_ACCURACY_THRESHOLD, } from './contexts/ServerClockContext';
|
|
18
19
|
export { GrabbableContext, GrabbableProvider, useGrabbableContext, createDefaultGrabbableImplementation, } from './contexts/GrabbableContext';
|
|
19
20
|
export { VoiceVolumeOverrideContext, VoiceVolumeOverrideProvider, useVoiceVolumeOverrideContext, createDefaultVoiceVolumeOverrideImplementation,
|
|
20
21
|
// Deprecated aliases
|
|
@@ -48,6 +49,9 @@ export { useWorld } from './hooks/useWorld';
|
|
|
48
49
|
export { useInstanceEvent } from './hooks/useInstanceEvent';
|
|
49
50
|
export { useSharedFile } from './hooks/useSharedFile';
|
|
50
51
|
export { useWorldStorage } from './hooks/useWorldStorage';
|
|
52
|
+
export { useServerClock } from './hooks/useServerClock';
|
|
53
|
+
export { computeTargetTime, decideVideoSyncAction, isTimeBuffered, } from './components/VideoScreen/utils';
|
|
54
|
+
export { SYNC_DEAD_BAND, SYNC_RATE_ADJUSTMENT, SYNC_RATE_LIMIT, } from './components/VideoScreen/constants';
|
|
51
55
|
export { useVoiceVolumeOverride, useAudioVolume } from './hooks/useAudioVolume';
|
|
52
56
|
export { useDefaultFont } from './hooks/useDefaultFont';
|
|
53
57
|
// Constants
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,GAET,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,oBAAoB,EACpB,uBAAuB,GAExB,MAAM,iCAAiC,CAAA;AAExC,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,GAEtB,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,GAGrB,MAAM,8BAA8B,CAAA;AAErC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,GAGT,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,oCAAoC,GAGrC,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,oCAAoC,GAKrC,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EACL,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,kCAAkC,GAGnC,MAAM,2BAA2B,CAAA;AAElC,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,mCAAmC,GAGpC,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,eAAe,EACf,gCAAgC,GAGjC,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,mCAAmC,GAGpC,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,wCAAwC,GAEzC,MAAM,iCAAiC,CAAA;AAExC,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAGlB,MAAM,kCAAkC,CAAA;AAEzC,OAAO,EACL,YAAY,EACZ,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xrift/world-components",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.49.0",
|
|
4
4
|
"description": "Shared components and utilities for Xrift worlds",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -8,10 +8,11 @@
|
|
|
8
8
|
"dist"
|
|
9
9
|
],
|
|
10
10
|
"scripts": {
|
|
11
|
-
"build": "tsc",
|
|
11
|
+
"build": "tsc -p tsconfig.build.json",
|
|
12
12
|
"dev": "vite",
|
|
13
|
-
"dev:build": "tsc --watch",
|
|
13
|
+
"dev:build": "tsc -p tsconfig.build.json --watch",
|
|
14
14
|
"test": "vitest run",
|
|
15
|
+
"typecheck": "tsc --noEmit",
|
|
15
16
|
"test:watch": "vitest",
|
|
16
17
|
"prepublishOnly": "npm run build"
|
|
17
18
|
},
|
|
@@ -37,7 +38,7 @@
|
|
|
37
38
|
"@react-three/rapier": "^2.0.0",
|
|
38
39
|
"@react-three/uikit": "^1.0.0",
|
|
39
40
|
"hls.js": "^1.5.0",
|
|
40
|
-
"react": "^
|
|
41
|
+
"react": "^19.0.0",
|
|
41
42
|
"three": ">=0.176.0"
|
|
42
43
|
},
|
|
43
44
|
"peerDependenciesMeta": {
|
|
@@ -57,7 +58,8 @@
|
|
|
57
58
|
"@react-three/rapier": "^2.2.0",
|
|
58
59
|
"@react-three/uikit": "^1.0.62",
|
|
59
60
|
"@triplex/api": "^0.1.4",
|
|
60
|
-
"@types/react": "^
|
|
61
|
+
"@types/react": "^19.2.18",
|
|
62
|
+
"@types/react-dom": "^19.2.7",
|
|
61
63
|
"@types/three": "^0.185.0",
|
|
62
64
|
"@vitejs/plugin-react": "^6.0.1",
|
|
63
65
|
"jsdom": "^28.0.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../../../../src/components/BillboardY/__tests__/utils.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { Vector3 } from 'three';
|
|
3
|
-
import { getBillboardYRotation } from '../utils';
|
|
4
|
-
describe('getBillboardYRotation', () => {
|
|
5
|
-
it('カメラが正面(+Z方向)にある場合、回転角度が0になる', () => {
|
|
6
|
-
const cameraPos = new Vector3(0, 0, 5);
|
|
7
|
-
const targetPos = new Vector3(0, 0, 0);
|
|
8
|
-
const rotation = getBillboardYRotation(cameraPos, targetPos);
|
|
9
|
-
expect(rotation).toBeCloseTo(0);
|
|
10
|
-
});
|
|
11
|
-
it('カメラが背面(-Z方向)にある場合、回転角度がπになる', () => {
|
|
12
|
-
const cameraPos = new Vector3(0, 0, -5);
|
|
13
|
-
const targetPos = new Vector3(0, 0, 0);
|
|
14
|
-
const rotation = getBillboardYRotation(cameraPos, targetPos);
|
|
15
|
-
expect(rotation).toBeCloseTo(Math.PI);
|
|
16
|
-
});
|
|
17
|
-
it('カメラが右側(+X方向)にある場合、回転角度がπ/2になる', () => {
|
|
18
|
-
const cameraPos = new Vector3(5, 0, 0);
|
|
19
|
-
const targetPos = new Vector3(0, 0, 0);
|
|
20
|
-
const rotation = getBillboardYRotation(cameraPos, targetPos);
|
|
21
|
-
expect(rotation).toBeCloseTo(Math.PI / 2);
|
|
22
|
-
});
|
|
23
|
-
it('カメラが左側(-X方向)にある場合、回転角度が-π/2になる', () => {
|
|
24
|
-
const cameraPos = new Vector3(-5, 0, 0);
|
|
25
|
-
const targetPos = new Vector3(0, 0, 0);
|
|
26
|
-
const rotation = getBillboardYRotation(cameraPos, targetPos);
|
|
27
|
-
expect(rotation).toBeCloseTo(-Math.PI / 2);
|
|
28
|
-
});
|
|
29
|
-
it('Y座標の差は回転角度に影響しない', () => {
|
|
30
|
-
const cameraPos1 = new Vector3(3, 0, 4);
|
|
31
|
-
const cameraPos2 = new Vector3(3, 100, 4);
|
|
32
|
-
const targetPos = new Vector3(0, 0, 0);
|
|
33
|
-
const rotation1 = getBillboardYRotation(cameraPos1, targetPos);
|
|
34
|
-
const rotation2 = getBillboardYRotation(cameraPos2, targetPos);
|
|
35
|
-
expect(rotation1).toBeCloseTo(rotation2);
|
|
36
|
-
});
|
|
37
|
-
it('ターゲットが原点以外でも正しく計算できる', () => {
|
|
38
|
-
const cameraPos = new Vector3(10, 5, 10);
|
|
39
|
-
const targetPos = new Vector3(10, 0, 5);
|
|
40
|
-
const rotation = getBillboardYRotation(cameraPos, targetPos);
|
|
41
|
-
// dx=0, dz=5 → atan2(0, 5) = 0
|
|
42
|
-
expect(rotation).toBeCloseTo(0);
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
//# sourceMappingURL=utils.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../../../src/components/BillboardY/__tests__/utils.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAEhD,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACtC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACtC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAC5D,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACvC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACtC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAC5D,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACtC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACtC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAC5D,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACvC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACtC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAC5D,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACvC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;QACzC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACtC,MAAM,SAAS,GAAG,qBAAqB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;QAC9D,MAAM,SAAS,GAAG,qBAAqB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;QAC9D,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;QACxC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACvC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAC5D,+BAA+B;QAC/B,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../../../../src/components/DevEnvironment/__tests__/utils.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { FloatType, HalfFloatType, UnsignedByteType } from 'three';
|
|
3
|
-
import { toThreeOutputBufferType } from '../utils';
|
|
4
|
-
describe('toThreeOutputBufferType', () => {
|
|
5
|
-
it('HalfFloatType 文字列を Three.js の HalfFloatType に変換する', () => {
|
|
6
|
-
expect(toThreeOutputBufferType('HalfFloatType')).toBe(HalfFloatType);
|
|
7
|
-
});
|
|
8
|
-
it('FloatType 文字列を Three.js の FloatType に変換する', () => {
|
|
9
|
-
expect(toThreeOutputBufferType('FloatType')).toBe(FloatType);
|
|
10
|
-
});
|
|
11
|
-
it('UnsignedByteType 文字列を Three.js の UnsignedByteType に変換する', () => {
|
|
12
|
-
expect(toThreeOutputBufferType('UnsignedByteType')).toBe(UnsignedByteType);
|
|
13
|
-
});
|
|
14
|
-
it('null の場合は undefined を返す', () => {
|
|
15
|
-
expect(toThreeOutputBufferType(null)).toBeUndefined();
|
|
16
|
-
});
|
|
17
|
-
it('undefined の場合は undefined を返す', () => {
|
|
18
|
-
expect(toThreeOutputBufferType(undefined)).toBeUndefined();
|
|
19
|
-
});
|
|
20
|
-
it('未知の文字列の場合は undefined を返す', () => {
|
|
21
|
-
expect(toThreeOutputBufferType('InvalidType')).toBeUndefined();
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
//# sourceMappingURL=utils.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../../../src/components/DevEnvironment/__tests__/utils.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAElD,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,uBAAuB,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IACtE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;IAC5E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;IACvD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;IAC5D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;IAChE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store.test.d.ts","sourceRoot":"","sources":["../../../../../../src/components/DevEnvironment/components/GrabSystem/__tests__/store.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
-
import { MAX_HOLD_DISTANCE, MIN_HOLD_DISTANCE } from '../constants';
|
|
3
|
-
import { createDevGrabStore } from '../store';
|
|
4
|
-
const createEntry = (overrides = {}) => ({
|
|
5
|
-
renderGhost: () => null,
|
|
6
|
-
onMove: () => { },
|
|
7
|
-
getTransform: () => ({
|
|
8
|
-
position: { x: 0, y: 1, z: -3 },
|
|
9
|
-
rotation: { x: 0, y: 0.5, z: 0 },
|
|
10
|
-
scale: 2,
|
|
11
|
-
}),
|
|
12
|
-
...overrides,
|
|
13
|
-
});
|
|
14
|
-
describe('createDevGrabStore', () => {
|
|
15
|
-
it('登録した対象を掴むと holding になり、掴んだ時点の姿勢を保持する', () => {
|
|
16
|
-
const store = createDevGrabStore();
|
|
17
|
-
store.contextValue.registerGrabbable('box', createEntry());
|
|
18
|
-
store.grab('box', { x: 0, y: 1, z: 0 });
|
|
19
|
-
const state = store.getState();
|
|
20
|
-
expect(state.phase).toBe('holding');
|
|
21
|
-
expect(state.grabbedId).toBe('box');
|
|
22
|
-
expect(state.holdDistance).toBeCloseTo(3);
|
|
23
|
-
expect(state.heldRotation).toEqual({ x: 0, y: 0.5, z: 0 });
|
|
24
|
-
expect(state.heldScale).toBe(2);
|
|
25
|
-
});
|
|
26
|
-
it('未登録の ID を掴もうとしても idle のまま', () => {
|
|
27
|
-
const store = createDevGrabStore();
|
|
28
|
-
store.grab('unknown', { x: 0, y: 0, z: 0 });
|
|
29
|
-
expect(store.getState().phase).toBe('idle');
|
|
30
|
-
});
|
|
31
|
-
it('掴み距離は MIN/MAX に丸められる', () => {
|
|
32
|
-
const store = createDevGrabStore();
|
|
33
|
-
store.contextValue.registerGrabbable('near', createEntry({
|
|
34
|
-
getTransform: () => ({
|
|
35
|
-
position: { x: 0, y: 0, z: -0.1 },
|
|
36
|
-
rotation: { x: 0, y: 0, z: 0 },
|
|
37
|
-
scale: 1,
|
|
38
|
-
}),
|
|
39
|
-
}));
|
|
40
|
-
store.grab('near', { x: 0, y: 0, z: 0 });
|
|
41
|
-
expect(store.getState().holdDistance).toBe(MIN_HOLD_DISTANCE);
|
|
42
|
-
});
|
|
43
|
-
it('adjustHoldDistance は holding 中のみ動作し clamp される', () => {
|
|
44
|
-
const store = createDevGrabStore();
|
|
45
|
-
store.contextValue.registerGrabbable('box', createEntry());
|
|
46
|
-
store.adjustHoldDistance(1);
|
|
47
|
-
expect(store.getState().holdDistance).toBe(0);
|
|
48
|
-
store.grab('box', { x: 0, y: 1, z: 0 });
|
|
49
|
-
store.adjustHoldDistance(100);
|
|
50
|
-
expect(store.getState().holdDistance).toBe(MAX_HOLD_DISTANCE);
|
|
51
|
-
store.adjustHoldDistance(-100);
|
|
52
|
-
expect(store.getState().holdDistance).toBe(MIN_HOLD_DISTANCE);
|
|
53
|
-
});
|
|
54
|
-
it('release で最後の heldPosition と掴んだ時点の回転が onMove に渡り idle に戻る', () => {
|
|
55
|
-
const onMove = vi.fn();
|
|
56
|
-
const store = createDevGrabStore();
|
|
57
|
-
store.contextValue.registerGrabbable('box', createEntry({ onMove }));
|
|
58
|
-
store.grab('box', { x: 0, y: 1, z: 0 });
|
|
59
|
-
store.updateHeldPosition({ x: 5, y: 2, z: -1 });
|
|
60
|
-
store.release();
|
|
61
|
-
expect(onMove).toHaveBeenCalledWith({
|
|
62
|
-
position: { x: 5, y: 2, z: -1 },
|
|
63
|
-
rotation: { x: 0, y: 0.5, z: 0 },
|
|
64
|
-
});
|
|
65
|
-
expect(store.getState().phase).toBe('idle');
|
|
66
|
-
expect(store.getState().grabbedId).toBeNull();
|
|
67
|
-
});
|
|
68
|
-
it('cancel は onMove を呼ばずに idle に戻る', () => {
|
|
69
|
-
const onMove = vi.fn();
|
|
70
|
-
const store = createDevGrabStore();
|
|
71
|
-
store.contextValue.registerGrabbable('box', createEntry({ onMove }));
|
|
72
|
-
store.grab('box', { x: 0, y: 1, z: 0 });
|
|
73
|
-
store.cancel();
|
|
74
|
-
expect(onMove).not.toHaveBeenCalled();
|
|
75
|
-
expect(store.getState().phase).toBe('idle');
|
|
76
|
-
});
|
|
77
|
-
it('holding 中は別の対象を掴めない', () => {
|
|
78
|
-
const store = createDevGrabStore();
|
|
79
|
-
store.contextValue.registerGrabbable('a', createEntry());
|
|
80
|
-
store.contextValue.registerGrabbable('b', createEntry());
|
|
81
|
-
store.grab('a', { x: 0, y: 1, z: 0 });
|
|
82
|
-
store.grab('b', { x: 0, y: 1, z: 0 });
|
|
83
|
-
expect(store.getState().grabbedId).toBe('a');
|
|
84
|
-
});
|
|
85
|
-
it('掴み中の対象が登録解除されたら idle に戻る', () => {
|
|
86
|
-
const store = createDevGrabStore();
|
|
87
|
-
store.contextValue.registerGrabbable('box', createEntry());
|
|
88
|
-
store.grab('box', { x: 0, y: 1, z: 0 });
|
|
89
|
-
store.contextValue.unregisterGrabbable('box');
|
|
90
|
-
expect(store.getState().phase).toBe('idle');
|
|
91
|
-
expect(store.getState().grabbedId).toBeNull();
|
|
92
|
-
});
|
|
93
|
-
it('ホバー中の対象が登録解除されたら hoveredId が消える', () => {
|
|
94
|
-
const store = createDevGrabStore();
|
|
95
|
-
store.contextValue.registerGrabbable('box', createEntry());
|
|
96
|
-
store.setHovered('box');
|
|
97
|
-
store.contextValue.unregisterGrabbable('box');
|
|
98
|
-
expect(store.getState().hoveredId).toBeNull();
|
|
99
|
-
});
|
|
100
|
-
it('subscribeGrabbedId のリスナーが掴み/離しで呼ばれる', () => {
|
|
101
|
-
const listener = vi.fn();
|
|
102
|
-
const store = createDevGrabStore();
|
|
103
|
-
store.contextValue.registerGrabbable('box', createEntry());
|
|
104
|
-
const unsubscribe = store.contextValue.subscribeGrabbedId(listener);
|
|
105
|
-
store.grab('box', { x: 0, y: 1, z: 0 });
|
|
106
|
-
expect(listener).toHaveBeenCalledTimes(1);
|
|
107
|
-
store.release();
|
|
108
|
-
expect(listener).toHaveBeenCalledTimes(2);
|
|
109
|
-
unsubscribe();
|
|
110
|
-
store.grab('box', { x: 0, y: 1, z: 0 });
|
|
111
|
-
expect(listener).toHaveBeenCalledTimes(2);
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
//# sourceMappingURL=store.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store.test.js","sourceRoot":"","sources":["../../../../../../src/components/DevEnvironment/components/GrabSystem/__tests__/store.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../../../../../../src/components/DevEnvironment/components/GrabSystem/__tests__/utils.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { Object3D, Quaternion, Vector3 } from 'three';
|
|
3
|
-
import { GRABBABLE_USER_DATA_KEY } from '../../../../Grabbable/constants';
|
|
4
|
-
import { MAX_ANCESTOR_DEPTH, MAX_HOLD_DISTANCE, MIN_HOLD_DISTANCE } from '../constants';
|
|
5
|
-
import { clampHoldDistance, computeHeldPosition, distanceBetween, findFirstGrabbableId, findGrabbableId, } from '../utils';
|
|
6
|
-
describe('clampHoldDistance', () => {
|
|
7
|
-
it('範囲内の距離はそのまま返す', () => {
|
|
8
|
-
expect(clampHoldDistance(3)).toBe(3);
|
|
9
|
-
});
|
|
10
|
-
it('最小距離未満は MIN_HOLD_DISTANCE に丸める', () => {
|
|
11
|
-
expect(clampHoldDistance(0.2)).toBe(MIN_HOLD_DISTANCE);
|
|
12
|
-
});
|
|
13
|
-
it('最大距離超過は MAX_HOLD_DISTANCE に丸める', () => {
|
|
14
|
-
expect(clampHoldDistance(99)).toBe(MAX_HOLD_DISTANCE);
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
describe('distanceBetween', () => {
|
|
18
|
-
it('2点間の距離を返す', () => {
|
|
19
|
-
expect(distanceBetween({ x: 0, y: 0, z: 0 }, { x: 3, y: 4, z: 0 })).toBeCloseTo(5);
|
|
20
|
-
});
|
|
21
|
-
it('同一点は 0 を返す', () => {
|
|
22
|
-
expect(distanceBetween({ x: 1, y: 2, z: 3 }, { x: 1, y: 2, z: 3 })).toBeCloseTo(0);
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
describe('computeHeldPosition', () => {
|
|
26
|
-
it('無回転なら前方(-Z)distance の位置を返す', () => {
|
|
27
|
-
const q = { x: 0, y: 0, z: 0, w: 1 };
|
|
28
|
-
const result = computeHeldPosition({ x: 1, y: 2, z: 3 }, q, 2);
|
|
29
|
-
expect(result.x).toBeCloseTo(1);
|
|
30
|
-
expect(result.y).toBeCloseTo(2);
|
|
31
|
-
expect(result.z).toBeCloseTo(1);
|
|
32
|
-
});
|
|
33
|
-
it('three.js の applyQuaternion と同じ結果になる', () => {
|
|
34
|
-
const quaternions = [
|
|
35
|
-
new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), Math.PI / 2),
|
|
36
|
-
new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), -Math.PI / 4),
|
|
37
|
-
new Quaternion().setFromAxisAngle(new Vector3(1, 2, 3).normalize(), 1.23),
|
|
38
|
-
];
|
|
39
|
-
const cameraPosition = { x: -2, y: 1.6, z: 5 };
|
|
40
|
-
const distance = 3.5;
|
|
41
|
-
for (const q of quaternions) {
|
|
42
|
-
const expected = new Vector3(0, 0, -1)
|
|
43
|
-
.applyQuaternion(q)
|
|
44
|
-
.multiplyScalar(distance)
|
|
45
|
-
.add(new Vector3(cameraPosition.x, cameraPosition.y, cameraPosition.z));
|
|
46
|
-
const result = computeHeldPosition(cameraPosition, q, distance);
|
|
47
|
-
expect(result.x).toBeCloseTo(expected.x);
|
|
48
|
-
expect(result.y).toBeCloseTo(expected.y);
|
|
49
|
-
expect(result.z).toBeCloseTo(expected.z);
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
describe('findGrabbableId', () => {
|
|
54
|
-
it('自身の userData から ID を見つける', () => {
|
|
55
|
-
const obj = new Object3D();
|
|
56
|
-
obj.userData[GRABBABLE_USER_DATA_KEY] = 'target-1';
|
|
57
|
-
expect(findGrabbableId(obj)).toBe('target-1');
|
|
58
|
-
});
|
|
59
|
-
it('親を辿って ID を見つける', () => {
|
|
60
|
-
const root = new Object3D();
|
|
61
|
-
root.userData[GRABBABLE_USER_DATA_KEY] = 'target-2';
|
|
62
|
-
const middle = new Object3D();
|
|
63
|
-
const leaf = new Object3D();
|
|
64
|
-
root.add(middle);
|
|
65
|
-
middle.add(leaf);
|
|
66
|
-
expect(findGrabbableId(leaf)).toBe('target-2');
|
|
67
|
-
});
|
|
68
|
-
it('ID が無ければ null を返す', () => {
|
|
69
|
-
expect(findGrabbableId(new Object3D())).toBeNull();
|
|
70
|
-
expect(findGrabbableId(null)).toBeNull();
|
|
71
|
-
});
|
|
72
|
-
it('最大親階層を超える探索はしない', () => {
|
|
73
|
-
const root = new Object3D();
|
|
74
|
-
root.userData[GRABBABLE_USER_DATA_KEY] = 'too-deep';
|
|
75
|
-
let current = root;
|
|
76
|
-
for (let i = 0; i < MAX_ANCESTOR_DEPTH; i++) {
|
|
77
|
-
const child = new Object3D();
|
|
78
|
-
current.add(child);
|
|
79
|
-
current = child;
|
|
80
|
-
}
|
|
81
|
-
expect(findGrabbableId(current)).toBeNull();
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
describe('findFirstGrabbableId', () => {
|
|
85
|
-
it('手前から順に走査して最初の ID を返す', () => {
|
|
86
|
-
const plain = new Object3D();
|
|
87
|
-
const grabbable = new Object3D();
|
|
88
|
-
grabbable.userData[GRABBABLE_USER_DATA_KEY] = 'first';
|
|
89
|
-
const another = new Object3D();
|
|
90
|
-
another.userData[GRABBABLE_USER_DATA_KEY] = 'second';
|
|
91
|
-
const result = findFirstGrabbableId([
|
|
92
|
-
{ object: plain },
|
|
93
|
-
{ object: grabbable },
|
|
94
|
-
{ object: another },
|
|
95
|
-
]);
|
|
96
|
-
expect(result).toBe('first');
|
|
97
|
-
});
|
|
98
|
-
it('掴める対象が無ければ null を返す', () => {
|
|
99
|
-
expect(findFirstGrabbableId([{ object: new Object3D() }])).toBeNull();
|
|
100
|
-
expect(findFirstGrabbableId([])).toBeNull();
|
|
101
|
-
});
|
|
102
|
-
});
|
|
103
|
-
//# sourceMappingURL=utils.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../../../../../src/components/DevEnvironment/components/GrabSystem/__tests__/utils.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../../../../src/components/EntryLogBoard/__tests__/utils.test.ts"],"names":[],"mappings":""}
|