@xrift/world-components 0.45.0 → 0.47.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.
Files changed (34) hide show
  1. package/dist/components/DevEnvironment/index.d.ts.map +1 -1
  2. package/dist/components/DevEnvironment/index.js +16 -1
  3. package/dist/components/DevEnvironment/index.js.map +1 -1
  4. package/dist/components/ScreenShareDisplay/hooks.d.ts +10 -0
  5. package/dist/components/ScreenShareDisplay/hooks.d.ts.map +1 -1
  6. package/dist/components/ScreenShareDisplay/hooks.js +41 -0
  7. package/dist/components/ScreenShareDisplay/hooks.js.map +1 -1
  8. package/dist/components/ScreenShareDisplay/index.d.ts +1 -1
  9. package/dist/components/ScreenShareDisplay/index.d.ts.map +1 -1
  10. package/dist/components/ScreenShareDisplay/index.js +5 -3
  11. package/dist/components/ScreenShareDisplay/index.js.map +1 -1
  12. package/dist/components/ScreenShareDisplay/types.d.ts +2 -0
  13. package/dist/components/ScreenShareDisplay/types.d.ts.map +1 -1
  14. package/dist/contexts/ServerClockContext.d.ts +108 -0
  15. package/dist/contexts/ServerClockContext.d.ts.map +1 -0
  16. package/dist/contexts/ServerClockContext.js +48 -0
  17. package/dist/contexts/ServerClockContext.js.map +1 -0
  18. package/dist/contexts/XRiftContext.d.ts +7 -1
  19. package/dist/contexts/XRiftContext.d.ts.map +1 -1
  20. package/dist/contexts/XRiftContext.js +5 -1
  21. package/dist/contexts/XRiftContext.js.map +1 -1
  22. package/dist/contexts/__tests__/ServerClockContext.test.d.ts +2 -0
  23. package/dist/contexts/__tests__/ServerClockContext.test.d.ts.map +1 -0
  24. package/dist/contexts/__tests__/ServerClockContext.test.js +43 -0
  25. package/dist/contexts/__tests__/ServerClockContext.test.js.map +1 -0
  26. package/dist/hooks/useServerClock.d.ts +60 -0
  27. package/dist/hooks/useServerClock.d.ts.map +1 -0
  28. package/dist/hooks/useServerClock.js +58 -0
  29. package/dist/hooks/useServerClock.js.map +1 -0
  30. package/dist/index.d.ts +2 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +2 -0
  33. package/dist/index.js.map +1 -1
  34. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/DevEnvironment/index.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAqCpC,MAAM,MAAM,mBAAmB,GAAG,KAAK,CAAA;AAmBvC,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,MAAM,EACN,SAAsB,EACtB,OAAc,EACd,aAAsC,EACtC,gBAAsC,EACtC,aAAa,EACb,gBAAgB,EAAE,mBAAmB,GACtC,EAAE,KAAK,2CA0FP"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/DevEnvironment/index.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAqCpC,MAAM,MAAM,mBAAmB,GAAG,KAAK,CAAA;AAmBvC,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,MAAM,EACN,SAAsB,EACtB,OAAc,EACd,aAAsC,EACtC,gBAAsC,EACtC,aAAa,EACb,gBAAgB,EAAE,mBAAmB,GACtC,EAAE,KAAK,2CAoHP"}
@@ -6,6 +6,7 @@ import { Physics } from '@react-three/rapier';
6
6
  import { GrabbableProvider } from '../../contexts/GrabbableContext';
7
7
  import { SpawnPointProvider } from '../../contexts/SpawnPointContext';
8
8
  import { UsersProvider } from '../../contexts/UsersContext';
9
+ import { XRiftContext } from '../../contexts/XRiftContext';
9
10
  import { PCFShadowMap } from 'three';
10
11
  import { toThreeOutputBufferType } from './utils';
11
12
  import { DEFAULT_SPAWN_POSITION, DEFAULT_GRAVITY, DEFAULT_ALLOW_INFINITE_JUMP, DEFAULT_CAMERA_NEAR, DEFAULT_CAMERA_FAR, MOVE_SPEED, RESPAWN_Y_THRESHOLD, DEV_LOCAL_USER_ID, DEV_LOCAL_USER_DISPLAY_NAME, DEV_AVATAR_HEIGHT, DEV_EYE_HEIGHT, } from './constants';
@@ -66,6 +67,20 @@ export function DevEnvironment({ children, camera, moveSpeed = MOVE_SPEED, shado
66
67
  getAvatarHeight: () => undefined,
67
68
  getLocalAvatarHeight: () => DEV_LOCAL_AVATAR_HEIGHT,
68
69
  }), []);
70
+ // Interactable の登録先(useXRift を使うコンポーネントを dev 環境で動かすため)
71
+ const [interactableObjects] = useState(() => new Set());
72
+ const registerInteractable = useCallback((object) => {
73
+ interactableObjects.add(object);
74
+ }, [interactableObjects]);
75
+ const unregisterInteractable = useCallback((object) => {
76
+ interactableObjects.delete(object);
77
+ }, [interactableObjects]);
78
+ const xriftContextValue = useMemo(() => ({
79
+ baseUrl: '/',
80
+ interactableObjects,
81
+ registerInteractable,
82
+ unregisterInteractable,
83
+ }), [interactableObjects, registerInteractable, unregisterInteractable]);
69
84
  const gravity = physicsConfig?.gravity ?? DEFAULT_GRAVITY;
70
85
  const allowInfiniteJump = physicsConfig?.allowInfiniteJump ?? DEFAULT_ALLOW_INFINITE_JUMP;
71
86
  const outputBufferType = toThreeOutputBufferType(outputBufferTypeStr);
@@ -81,6 +96,6 @@ export function DevEnvironment({ children, camera, moveSpeed = MOVE_SPEED, shado
81
96
  fov: cameraFov,
82
97
  near: cameraNear,
83
98
  far: cameraFar,
84
- }, gl: glProps, children: [_jsx(PointerLockControls, {}), _jsx(CenterRaycaster, { onHitChange: handleHitChange }), _jsx(Physics, { gravity: [0, -gravity, 0], timeStep: "vary", children: _jsx(SpawnPointProvider, { children: _jsx(UsersProvider, { implementation: usersImplementation, children: _jsxs(GrabbableProvider, { implementation: grabStore.contextValue, children: [_jsx(PhysicsPlayer, { moveSpeed: moveSpeed, spawnPosition: spawnPosition, respawnThreshold: respawnThreshold, allowInfiniteJump: allowInfiniteJump, movementRef: localMovementRef }), _jsx(GrabSystem, { store: grabStore }), children] }) }) }) })] }), _jsx(Crosshair, { active: isHit }), _jsx(PointerLockStatus, { isLocked: isPointerLocked }), _jsx(ControlsHelp, {})] }));
99
+ }, gl: glProps, children: [_jsx(PointerLockControls, {}), _jsx(CenterRaycaster, { onHitChange: handleHitChange }), _jsx(Physics, { gravity: [0, -gravity, 0], timeStep: "vary", children: _jsx(XRiftContext.Provider, { value: xriftContextValue, children: _jsx(SpawnPointProvider, { children: _jsx(UsersProvider, { implementation: usersImplementation, children: _jsxs(GrabbableProvider, { implementation: grabStore.contextValue, children: [_jsx(PhysicsPlayer, { moveSpeed: moveSpeed, spawnPosition: spawnPosition, respawnThreshold: respawnThreshold, allowInfiniteJump: allowInfiniteJump, movementRef: localMovementRef }), _jsx(GrabSystem, { store: grabStore }), children] }) }) }) }) })] }), _jsx(Crosshair, { active: isHit }), _jsx(PointerLockStatus, { isLocked: isPointerLocked }), _jsx(ControlsHelp, {})] }));
85
100
  }
86
101
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/DevEnvironment/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/DevEnvironment/index.tsx"],"names":[],"mappings":"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"}
@@ -10,4 +10,14 @@ export declare const useVideoTexture: (videoElement: HTMLVideoElement | null, sc
10
10
  hasVideo: boolean;
11
11
  videoSize: [number, number];
12
12
  };
13
+ /**
14
+ * 画像URLからプレースホルダー用のテクスチャを作成し管理するフック
15
+ * 読み込み失敗時は null を返す(呼び出し側でフォールバック表示する)
16
+ * @param imageUrl 画像のURL(省略時はテクスチャを作成しない)
17
+ * @param screenSize スクリーンのサイズ [幅, 高さ]
18
+ */
19
+ export declare const usePlaceholderTexture: (imageUrl: string | undefined, screenSize: [number, number]) => {
20
+ placeholderTexture: THREE.Texture<unknown, THREE.TextureEventMap> | null;
21
+ placeholderSize: [number, number];
22
+ };
13
23
  //# sourceMappingURL=hooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/components/ScreenShareDisplay/hooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,cAAc,gBAAgB,GAAG,IAAI,EACrC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,YAAY,MAAM;;;;CA6FnB,CAAA"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/components/ScreenShareDisplay/hooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,cAAc,gBAAgB,GAAG,IAAI,EACrC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,YAAY,MAAM;;;;CA6FnB,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,UAAU,MAAM,GAAG,SAAS,EAC5B,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;;;CAmD7B,CAAA"}
@@ -86,4 +86,45 @@ export const useVideoTexture = (videoElement, screenSize, targetFps) => {
86
86
  }, [videoElement]);
87
87
  return { texture, hasVideo, videoSize };
88
88
  };
89
+ /**
90
+ * 画像URLからプレースホルダー用のテクスチャを作成し管理するフック
91
+ * 読み込み失敗時は null を返す(呼び出し側でフォールバック表示する)
92
+ * @param imageUrl 画像のURL(省略時はテクスチャを作成しない)
93
+ * @param screenSize スクリーンのサイズ [幅, 高さ]
94
+ */
95
+ export const usePlaceholderTexture = (imageUrl, screenSize) => {
96
+ const [texture, setTexture] = useState(null);
97
+ useEffect(() => {
98
+ if (!imageUrl) {
99
+ setTexture(null);
100
+ return;
101
+ }
102
+ const loader = new THREE.TextureLoader();
103
+ loader.setCrossOrigin('anonymous');
104
+ let cancelled = false;
105
+ loader.load(imageUrl, (loaded) => {
106
+ if (cancelled)
107
+ return;
108
+ loaded.colorSpace = THREE.SRGBColorSpace;
109
+ setTexture(loaded);
110
+ }, undefined, (err) => {
111
+ console.error('ScreenShareDisplay: placeholder image load failed', err);
112
+ });
113
+ return () => {
114
+ cancelled = true;
115
+ setTexture((prev) => {
116
+ prev?.dispose();
117
+ return null;
118
+ });
119
+ };
120
+ }, [imageUrl]);
121
+ // 画像サイズをスクリーン内に contain フィットさせる
122
+ const placeholderSize = useMemo(() => {
123
+ const image = texture?.image;
124
+ if (!image?.width || !image?.height)
125
+ return screenSize;
126
+ return calculateContainSize(image.width, image.height, screenSize[0], screenSize[1]);
127
+ }, [texture, screenSize]);
128
+ return { placeholderTexture: texture, placeholderSize };
129
+ };
89
130
  //# sourceMappingURL=hooks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/components/ScreenShareDisplay/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/components/ScreenShareDisplay/hooks.ts"],"names":[],"mappings":"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"}
@@ -4,5 +4,5 @@ export type { Props as ScreenShareDisplayProps } from './types';
4
4
  * 映像を3D空間内にスクリーンとして表示するコンポーネント
5
5
  * 画面共有やカメラ映像などの表示に使用可能
6
6
  */
7
- export declare const ScreenShareDisplay: import("react").MemoExoticComponent<({ id, position, rotation, width, targetFps, }: Props) => import("react/jsx-runtime").JSX.Element>;
7
+ export declare const ScreenShareDisplay: import("react").MemoExoticComponent<({ id, position, rotation, width, targetFps, placeholderImageUrl, }: Props) => import("react/jsx-runtime").JSX.Element>;
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ScreenShareDisplay/index.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEpC,YAAY,EAAE,KAAK,IAAI,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAO/D;;;GAGG;AACH,eAAO,MAAM,kBAAkB,sFAM5B,KAAK,6CAyDN,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ScreenShareDisplay/index.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEpC,YAAY,EAAE,KAAK,IAAI,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAO/D;;;GAGG;AACH,eAAO,MAAM,kBAAkB,2GAO5B,KAAK,6CAwEN,CAAA"}
@@ -4,7 +4,7 @@ import { memo, useCallback, useMemo } from 'react';
4
4
  import * as THREE from 'three';
5
5
  import { useScreenShareContext } from '../../contexts/ScreenShareContext';
6
6
  import { Interactable } from '../Interactable';
7
- import { useVideoTexture } from './hooks';
7
+ import { usePlaceholderTexture, useVideoTexture } from './hooks';
8
8
  // デフォルト値
9
9
  const DEFAULT_WIDTH = 4;
10
10
  const DEFAULT_POSITION = [0, 0, 0];
@@ -13,11 +13,13 @@ const DEFAULT_ROTATION = [0, 0, 0];
13
13
  * 映像を3D空間内にスクリーンとして表示するコンポーネント
14
14
  * 画面共有やカメラ映像などの表示に使用可能
15
15
  */
16
- export const ScreenShareDisplay = memo(({ id, position = DEFAULT_POSITION, rotation = DEFAULT_ROTATION, width = DEFAULT_WIDTH, targetFps, }) => {
16
+ export const ScreenShareDisplay = memo(({ id, position = DEFAULT_POSITION, rotation = DEFAULT_ROTATION, width = DEFAULT_WIDTH, targetFps, placeholderImageUrl, }) => {
17
17
  const { videoElement, isSharing, startScreenShare, stopScreenShare, isRoomConnected } = useScreenShareContext();
18
18
  const interactionText = isSharing ? '画面共有を停止' : '画面共有を開始';
19
19
  const screenSize = useMemo(() => [width, width * (9 / 16)], [width]);
20
20
  const { texture, hasVideo, videoSize } = useVideoTexture(videoElement, screenSize, targetFps);
21
+ const { placeholderTexture, placeholderSize } = usePlaceholderTexture(placeholderImageUrl, screenSize);
22
+ const showPlaceholderImage = !hasVideo && placeholderTexture !== null;
21
23
  const handleInteract = useCallback(() => {
22
24
  if (isSharing) {
23
25
  stopScreenShare();
@@ -26,6 +28,6 @@ export const ScreenShareDisplay = memo(({ id, position = DEFAULT_POSITION, rotat
26
28
  startScreenShare();
27
29
  }
28
30
  }, [isSharing, startScreenShare, stopScreenShare]);
29
- return (_jsxs("group", { position: position, rotation: rotation, children: [_jsxs(Interactable, { id: id, onInteract: handleInteract, interactionText: interactionText, children: [_jsxs("mesh", { visible: !hasVideo, children: [_jsx("planeGeometry", { args: [screenSize[0], screenSize[1]] }), _jsx("meshBasicMaterial", { side: THREE.FrontSide, toneMapped: false, color: "#1a1a2a" })] }), _jsxs("mesh", { visible: hasVideo, children: [_jsx("planeGeometry", { args: [videoSize[0], videoSize[1]] }), _jsx("meshBasicMaterial", { map: texture, side: THREE.FrontSide, toneMapped: false })] })] }), !hasVideo && (_jsx(Text, { position: [0, 0, 0.01], fontSize: width * 0.05, color: "#666666", anchorX: "center", anchorY: "middle", textAlign: "center", "material-side": THREE.FrontSide, children: isRoomConnected ? 'クリックして画面共有' : '音声通話に接続できていません' }))] }));
31
+ return (_jsxs("group", { position: position, rotation: rotation, children: [_jsxs(Interactable, { id: id, onInteract: handleInteract, interactionText: interactionText, children: [_jsxs("mesh", { visible: !hasVideo, children: [_jsx("planeGeometry", { args: [screenSize[0], screenSize[1]] }), _jsx("meshBasicMaterial", { side: THREE.FrontSide, toneMapped: false, color: "#1a1a2a", polygonOffset: true, polygonOffsetFactor: 1, polygonOffsetUnits: 1 })] }), _jsxs("mesh", { visible: showPlaceholderImage, children: [_jsx("planeGeometry", { args: [placeholderSize[0], placeholderSize[1]] }), _jsx("meshBasicMaterial", { map: placeholderTexture, side: THREE.FrontSide, toneMapped: false })] }), _jsxs("mesh", { visible: hasVideo, children: [_jsx("planeGeometry", { args: [videoSize[0], videoSize[1]] }), _jsx("meshBasicMaterial", { map: texture, side: THREE.FrontSide, toneMapped: false })] })] }), !hasVideo && !showPlaceholderImage && (_jsx(Text, { position: [0, 0, 0.01], fontSize: width * 0.05, color: "#666666", anchorX: "center", anchorY: "middle", textAlign: "center", "material-side": THREE.FrontSide, children: isRoomConnected ? 'クリックして画面共有' : '音声通話に接続できていません' }))] }));
30
32
  });
31
33
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ScreenShareDisplay/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ScreenShareDisplay/index.tsx"],"names":[],"mappings":"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"}
@@ -9,5 +9,7 @@ export interface Props {
9
9
  width?: number;
10
10
  /** テクスチャ更新のフレームレート上限(低スペック端末向け。省略時は制限なし) */
11
11
  targetFps?: number;
12
+ /** 未共有時に表示するプレースホルダー画像のURL(省略時は背景色とガイドテキストを表示) */
13
+ placeholderImageUrl?: string;
12
14
  }
13
15
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/ScreenShareDisplay/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,kBAAkB;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,eAAe;IACf,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,eAAe;IACf,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/ScreenShareDisplay/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,kBAAkB;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,eAAe;IACf,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,eAAe;IACf,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kDAAkD;IAClD,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B"}
@@ -0,0 +1,108 @@
1
+ import { type ReactNode } from 'react';
2
+ /**
3
+ * 用途ごとに要求する時刻精度のプリセット
4
+ *
5
+ * - `media`: 動画・音楽の再生位置合わせ。数百 ms のズレは体感しにくい
6
+ * - `motion`: 決定論的アニメーション(動く床・観覧車)、アバター補間
7
+ *
8
+ * 早押しやゴール判定のような**公平性が要る用途のプリセットは用意していない**。
9
+ * 経路の往復が非対称なぶんの誤差はクライアント側から検出できず、しかも
10
+ * セッション中ほぼ一定なので繰り返しても平均化されない(=同じ人が毎回勝ち、
11
+ * 同じ人が毎回負ける)。判定はサーバー側で裁定すること。
12
+ */
13
+ export type ServerClockAccuracy = 'media' | 'motion';
14
+ /** プリセットが要求する `uncertainty` の上限(ms) */
15
+ export declare const SERVER_CLOCK_ACCURACY_THRESHOLD: Record<ServerClockAccuracy, number>;
16
+ /**
17
+ * 共有時計の Context 値
18
+ *
19
+ * **注入側(プラットフォーム)への契約:**
20
+ *
21
+ * `uncertainty` / `synced` / `timeJumpCount` はただの値なので、この Context の
22
+ * reactivity は「注入側が**新しいオブジェクトに差し替えること**」に全面的に依存する。
23
+ * 同じオブジェクトを持ち続けると(getter 付きの可変オブジェクトを1個渡す等)、
24
+ * 一度レンダーした値のまま永久に更新されず、**下のフックの使用例が黙って壊れる**
25
+ * (飛びを観測できないので基準を取り直せない)。
26
+ *
27
+ * 差し替えるタイミング:
28
+ * 1. オフセットを採用したとき(≒45秒ごとの再同期)
29
+ * 2. `synced` が変化したとき
30
+ * 3. 時刻が飛んだとき
31
+ *
32
+ * この頻度なら `uncertainty` の鮮度は最大45秒遅れ = ドリフト換算で +2ms 程度。
33
+ * しきい値(100 / 300ms)に対して無視できる。
34
+ */
35
+ export interface ServerClockContextValue {
36
+ /**
37
+ * サーバ時刻の推定値(ms)
38
+ *
39
+ * 値ではなく関数。`useFrame` の中から再レンダーなしで呼べる。
40
+ * 一度も同期していなければ `Date.now()` にフォールバックする。
41
+ */
42
+ now: () => number;
43
+ /**
44
+ * 推定誤差の上界(ms)。一度も同期していなければ Infinity
45
+ *
46
+ * 経過時間による劣化を含む値。往路と復路が非対称だった場合の誤差上界であり、
47
+ * 実際の再現性はこれよりずっと良いことが多い(実測で 2 桁違う)。
48
+ * ただしその差はクライアント側からは検出できないため、これが唯一の保証値になる。
49
+ */
50
+ uncertainty: number;
51
+ /**
52
+ * いま同期が有効か
53
+ *
54
+ * 切断中は false になるが `now()` は直前の推定を返し続ける(通信が切れただけで
55
+ * 端末の時計は動いているため)。切断が続くと `uncertainty` が膨らんでいく。
56
+ */
57
+ synced: boolean;
58
+ /**
59
+ * `now()` のタイムラインが飛んだ回数
60
+ *
61
+ * 通常の補正は徐々に寄せる(時刻は巻き戻らない)が、次の場合だけは飛ぶ。
62
+ * 1. 端末のスリープ等で推定を捨てたとき
63
+ * 2. フォールバックから推定へ戻ったとき(初回同期・採り直しの完了)
64
+ * 3. 補正量が大きすぎて徐々に寄せられないとき
65
+ *
66
+ * **時刻から位置を計算しているワールドは、この値の変化を見て基準を取り直すこと。**
67
+ * 取り直さないと、飛んだぶんだけオブジェクトがワープしたまま戻らない。
68
+ *
69
+ * 名前はプラットフォーム側の実装(`ServerClock.timeJumpCount`)と一致させてある。
70
+ * あちらの `discontinuityCount` は「端末時計の不連続の**検出**回数」という別物なので、
71
+ * 注入するときに取り違えないこと。
72
+ */
73
+ timeJumpCount: number;
74
+ /** 直近に飛んだ量(ms)。負なら時刻が戻った */
75
+ lastTimeJumpMs: number;
76
+ }
77
+ /**
78
+ * デフォルト実装(プラットフォームが実装を注入しない場合に使用される)
79
+ *
80
+ * 端末のローカル時計をそのまま返す。他の端末とは 0.1〜数秒ずれている前提なので、
81
+ * `synced` は false・`uncertainty` は Infinity で「信用できない」ことを明示する。
82
+ */
83
+ export declare const createDefaultServerClockImplementation: () => ServerClockContextValue;
84
+ /**
85
+ * 用途に対して時刻が十分な精度かを判定する
86
+ *
87
+ * false のときの振る舞いはワールドの判断。動画なら同期を諦める(再生継続を優先)、
88
+ * 決定論的アニメーションなら合わせにいかずそのまま動かす、など。
89
+ */
90
+ export declare const isServerClockAccurateEnough: (clock: Pick<ServerClockContextValue, "synced" | "uncertainty">, accuracy: ServerClockAccuracy) => boolean;
91
+ /**
92
+ * インスタンス共有時計(サーバ時刻)を提供する Context
93
+ * xrift-frontend 側で実装を注入し、ワールド側で利用できる
94
+ */
95
+ export declare const ServerClockContext: import("react").Context<ServerClockContextValue | null>;
96
+ interface Props {
97
+ value: ServerClockContextValue;
98
+ children: ReactNode;
99
+ }
100
+ /** 共有時計を提供する ContextProvider */
101
+ export declare const ServerClockProvider: ({ value, children }: Props) => import("react/jsx-runtime").JSX.Element;
102
+ /**
103
+ * 共有時計の Context を取得する hook
104
+ * @throws {Error} ServerClockProvider の外で呼び出された場合
105
+ */
106
+ export declare const useServerClockContext: () => ServerClockContextValue;
107
+ export {};
108
+ //# sourceMappingURL=ServerClockContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerClockContext.d.ts","sourceRoot":"","sources":["../../src/contexts/ServerClockContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAAc,MAAM,OAAO,CAAA;AAEjE;;;;;;;;;;GAUG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,QAAQ,CAAA;AAEpD,uCAAuC;AACvC,eAAO,MAAM,+BAA+B,EAAE,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAG/E,CAAA;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;;OAKG;IACH,GAAG,EAAE,MAAM,MAAM,CAAA;IACjB;;;;;;OAMG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;;;;OAKG;IACH,MAAM,EAAE,OAAO,CAAA;IACf;;;;;;;;;;;;;;OAcG;IACH,aAAa,EAAE,MAAM,CAAA;IACrB,4BAA4B;IAC5B,cAAc,EAAE,MAAM,CAAA;CACvB;AAED;;;;;GAKG;AACH,eAAO,MAAM,sCAAsC,QAAO,uBAMxD,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,GACtC,OAAO,IAAI,CAAC,uBAAuB,EAAE,QAAQ,GAAG,aAAa,CAAC,EAC9D,UAAU,mBAAmB,KAC5B,OAAyF,CAAA;AAE5F;;;GAGG;AACH,eAAO,MAAM,kBAAkB,yDAAsD,CAAA;AAErF,UAAU,KAAK;IACb,KAAK,EAAE,uBAAuB,CAAA;IAC9B,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,gCAAgC;AAChC,eAAO,MAAM,mBAAmB,GAAI,qBAAqB,KAAK,4CAE7D,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,QAAO,uBAMxC,CAAA"}
@@ -0,0 +1,48 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext } from 'react';
3
+ /** プリセットが要求する `uncertainty` の上限(ms) */
4
+ export const SERVER_CLOCK_ACCURACY_THRESHOLD = {
5
+ media: 300,
6
+ motion: 100,
7
+ };
8
+ /**
9
+ * デフォルト実装(プラットフォームが実装を注入しない場合に使用される)
10
+ *
11
+ * 端末のローカル時計をそのまま返す。他の端末とは 0.1〜数秒ずれている前提なので、
12
+ * `synced` は false・`uncertainty` は Infinity で「信用できない」ことを明示する。
13
+ */
14
+ export const createDefaultServerClockImplementation = () => ({
15
+ now: () => Date.now(),
16
+ uncertainty: Number.POSITIVE_INFINITY,
17
+ synced: false,
18
+ timeJumpCount: 0,
19
+ lastTimeJumpMs: 0,
20
+ });
21
+ /**
22
+ * 用途に対して時刻が十分な精度かを判定する
23
+ *
24
+ * false のときの振る舞いはワールドの判断。動画なら同期を諦める(再生継続を優先)、
25
+ * 決定論的アニメーションなら合わせにいかずそのまま動かす、など。
26
+ */
27
+ export const isServerClockAccurateEnough = (clock, accuracy) => clock.synced && clock.uncertainty <= SERVER_CLOCK_ACCURACY_THRESHOLD[accuracy];
28
+ /**
29
+ * インスタンス共有時計(サーバ時刻)を提供する Context
30
+ * xrift-frontend 側で実装を注入し、ワールド側で利用できる
31
+ */
32
+ export const ServerClockContext = createContext(null);
33
+ /** 共有時計を提供する ContextProvider */
34
+ export const ServerClockProvider = ({ value, children }) => {
35
+ return _jsx(ServerClockContext.Provider, { value: value, children: children });
36
+ };
37
+ /**
38
+ * 共有時計の Context を取得する hook
39
+ * @throws {Error} ServerClockProvider の外で呼び出された場合
40
+ */
41
+ export const useServerClockContext = () => {
42
+ const context = useContext(ServerClockContext);
43
+ if (!context) {
44
+ throw new Error('useServerClockContext must be used within ServerClockProvider');
45
+ }
46
+ return context;
47
+ };
48
+ //# sourceMappingURL=ServerClockContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerClockContext.js","sourceRoot":"","sources":["../../src/contexts/ServerClockContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAkB,UAAU,EAAE,MAAM,OAAO,CAAA;AAejE,uCAAuC;AACvC,MAAM,CAAC,MAAM,+BAA+B,GAAwC;IAClF,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;CACZ,CAAA;AAgED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sCAAsC,GAAG,GAA4B,EAAE,CAAC,CAAC;IACpF,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;IACrB,WAAW,EAAE,MAAM,CAAC,iBAAiB;IACrC,MAAM,EAAE,KAAK;IACb,aAAa,EAAE,CAAC;IAChB,cAAc,EAAE,CAAC;CAClB,CAAC,CAAA;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,KAA8D,EAC9D,QAA6B,EACpB,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,+BAA+B,CAAC,QAAQ,CAAC,CAAA;AAE5F;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAAiC,IAAI,CAAC,CAAA;AAOrF,gCAAgC;AAChC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAS,EAAE,EAAE;IAChE,OAAO,KAAC,kBAAkB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAA+B,CAAA;AAC5F,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAA4B,EAAE;IACjE,MAAM,OAAO,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAA;IAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAA;IAClF,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
@@ -16,6 +16,7 @@ import { type PlacementMode } from './PlacementStateContext';
16
16
  import { type AudioVolumeContextValue } from './AudioVolumeContext';
17
17
  import { type SharedFileContextValue } from './SharedFileContext';
18
18
  import { type WorldStorageContextValue } from './WorldStorageContext';
19
+ import { type ServerClockContextValue } from './ServerClockContext';
19
20
  export interface XRiftContextValue {
20
21
  /**
21
22
  * ワールドのベースURL(CDNのディレクトリパス)
@@ -118,6 +119,11 @@ interface Props {
118
119
  * 指定しない場合はデフォルト実装(インメモリ・リロードで消える)が使用される
119
120
  */
120
121
  worldStorageImplementation?: WorldStorageContextValue;
122
+ /**
123
+ * インスタンス共有時計(サーバ時刻)の実装(オプション)
124
+ * 指定しない場合はデフォルト実装(端末のローカル時計・synced=false)が使用される
125
+ */
126
+ serverClockImplementation?: ServerClockContextValue;
121
127
  /**
122
128
  * アイテムの配置状態(オプション)
123
129
  * 'preview': プレビュー中、'placed': 設置済み
@@ -131,7 +137,7 @@ interface Props {
131
137
  * Module Federationで動的にロードされたワールドコンポーネントに
132
138
  * 必要な情報を注入するために使用
133
139
  */
134
- export declare const XRiftProvider: ({ baseUrl, confirmImplementation, instanceStateImplementation, instanceImplementation, screenShareImplementation, spawnPointImplementation, teleportImplementation, textInputImplementation, usersImplementation, worldImplementation, instanceEventImplementation, audioVolumeImplementation, fileInputImplementation, sharedFileImplementation, grabbableImplementation, worldStorageImplementation, placementMode, children, }: Props) => import("react/jsx-runtime").JSX.Element;
140
+ export declare const XRiftProvider: ({ baseUrl, confirmImplementation, instanceStateImplementation, instanceImplementation, screenShareImplementation, spawnPointImplementation, teleportImplementation, textInputImplementation, usersImplementation, worldImplementation, instanceEventImplementation, audioVolumeImplementation, fileInputImplementation, sharedFileImplementation, grabbableImplementation, worldStorageImplementation, serverClockImplementation, placementMode, children, }: Props) => import("react/jsx-runtime").JSX.Element;
135
141
  /**
136
142
  * XRift ワールドの情報を取得するhook
137
143
  * ワールドプロジェクト側でアセットの相対パスを絶対パスに変換する際に使用
@@ -1 +1 @@
1
- {"version":3,"file":"XRiftContext.d.ts","sourceRoot":"","sources":["../../src/contexts/XRiftContext.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"XRiftContext.d.ts","sourceRoot":"","sources":["../../src/contexts/XRiftContext.tsx"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ import { PlacementStateProvider } from './PlacementStateContext';
16
16
  import { AudioVolumeProvider, createDefaultAudioVolumeImplementation, } from './AudioVolumeContext';
17
17
  import { SharedFileProvider, createDefaultSharedFileImplementation, } from './SharedFileContext';
18
18
  import { WorldStorageProvider, createDefaultWorldStorageImplementation, } from './WorldStorageContext';
19
+ import { ServerClockProvider, createDefaultServerClockImplementation, } from './ServerClockContext';
19
20
  // デフォルトの画面共有実装(開発環境用)
20
21
  const createDefaultScreenShareImplementation = () => ({
21
22
  videoElement: null,
@@ -39,7 +40,7 @@ const composeProviders = (providers, children) => providers.reduceRight((acc, [P
39
40
  * Module Federationで動的にロードされたワールドコンポーネントに
40
41
  * 必要な情報を注入するために使用
41
42
  */
42
- export const XRiftProvider = ({ baseUrl, confirmImplementation, instanceStateImplementation, instanceImplementation, screenShareImplementation, spawnPointImplementation, teleportImplementation, textInputImplementation, usersImplementation, worldImplementation, instanceEventImplementation, audioVolumeImplementation, fileInputImplementation, sharedFileImplementation, grabbableImplementation, worldStorageImplementation, placementMode, children, }) => {
43
+ export const XRiftProvider = ({ baseUrl, confirmImplementation, instanceStateImplementation, instanceImplementation, screenShareImplementation, spawnPointImplementation, teleportImplementation, textInputImplementation, usersImplementation, worldImplementation, instanceEventImplementation, audioVolumeImplementation, fileInputImplementation, sharedFileImplementation, grabbableImplementation, worldStorageImplementation, serverClockImplementation, placementMode, children, }) => {
43
44
  // インタラクト可能なオブジェクトの管理
44
45
  const [interactableObjects] = useState(() => new Set());
45
46
  // 画面共有の実装(指定がない場合はデフォルト実装を使用)
@@ -64,6 +65,8 @@ export const XRiftProvider = ({ baseUrl, confirmImplementation, instanceStateImp
64
65
  const sharedFileImpl = useMemo(() => sharedFileImplementation ?? createDefaultSharedFileImplementation(), [sharedFileImplementation]);
65
66
  // World Storage の実装(指定がない場合はデフォルト実装を使用)
66
67
  const worldStorageImpl = useMemo(() => worldStorageImplementation ?? createDefaultWorldStorageImplementation(), [worldStorageImplementation]);
68
+ // 共有時計の実装(指定がない場合はデフォルト実装 = 端末のローカル時計を使用)
69
+ const serverClockImpl = useMemo(() => serverClockImplementation ?? createDefaultServerClockImplementation(), [serverClockImplementation]);
67
70
  // オブジェクトの登録
68
71
  const registerInteractable = useCallback((object) => {
69
72
  interactableObjects.add(object);
@@ -94,6 +97,7 @@ export const XRiftProvider = ({ baseUrl, confirmImplementation, instanceStateImp
94
97
  [InstanceProvider, { value: instanceImpl }],
95
98
  [AudioVolumeProvider, { value: audioVolumeImpl }],
96
99
  [WorldStorageProvider, { value: worldStorageImpl }],
100
+ [ServerClockProvider, { value: serverClockImpl }],
97
101
  ];
98
102
  if (placementMode) {
99
103
  providers.push([PlacementStateProvider, { mode: placementMode }]);
@@ -1 +1 @@
1
- {"version":3,"file":"XRiftContext.js","sourceRoot":"","sources":["../../src/contexts/XRiftContext.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"XRiftContext.js","sourceRoot":"","sources":["../../src/contexts/XRiftContext.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ServerClockContext.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerClockContext.test.d.ts","sourceRoot":"","sources":["../../../src/contexts/__tests__/ServerClockContext.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,43 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { SERVER_CLOCK_ACCURACY_THRESHOLD, createDefaultServerClockImplementation, isServerClockAccurateEnough, } from '../ServerClockContext';
3
+ describe('createDefaultServerClockImplementation', () => {
4
+ it('端末のローカル時計を返す', () => {
5
+ const clock = createDefaultServerClockImplementation();
6
+ expect(clock.now()).toBeCloseTo(Date.now(), -2);
7
+ });
8
+ it('信用できないことを明示する(未注入の判別)', () => {
9
+ const clock = createDefaultServerClockImplementation();
10
+ // 他の端末とは 0.1〜数秒ずれている前提なので、合わせにいってはいけない
11
+ expect(clock.synced).toBe(false);
12
+ expect(clock.uncertainty).toBe(Number.POSITIVE_INFINITY);
13
+ expect(clock.timeJumpCount).toBe(0);
14
+ });
15
+ });
16
+ describe('isServerClockAccurateEnough', () => {
17
+ it('同期していなければ用途によらず false', () => {
18
+ const clock = { synced: false, uncertainty: 5 };
19
+ expect(isServerClockAccurateEnough(clock, 'media')).toBe(false);
20
+ expect(isServerClockAccurateEnough(clock, 'motion')).toBe(false);
21
+ });
22
+ it('しきい値以下なら true', () => {
23
+ const clock = { synced: true, uncertainty: SERVER_CLOCK_ACCURACY_THRESHOLD.motion };
24
+ expect(isServerClockAccurateEnough(clock, 'motion')).toBe(true);
25
+ expect(isServerClockAccurateEnough(clock, 'media')).toBe(true);
26
+ });
27
+ it('用途ごとに要求精度が違う', () => {
28
+ // 動画なら許容できるが、決定論的アニメーションには粗いケース
29
+ const clock = { synced: true, uncertainty: 200 };
30
+ expect(isServerClockAccurateEnough(clock, 'media')).toBe(true);
31
+ expect(isServerClockAccurateEnough(clock, 'motion')).toBe(false);
32
+ });
33
+ it('しきい値を超えたら false', () => {
34
+ const clock = { synced: true, uncertainty: 1000 };
35
+ expect(isServerClockAccurateEnough(clock, 'media')).toBe(false);
36
+ });
37
+ it('実測(本番デスクトップ, uncertainty ±40ms)はどちらの用途も満たす', () => {
38
+ const clock = { synced: true, uncertainty: 40 };
39
+ expect(isServerClockAccurateEnough(clock, 'media')).toBe(true);
40
+ expect(isServerClockAccurateEnough(clock, 'motion')).toBe(true);
41
+ });
42
+ });
43
+ //# sourceMappingURL=ServerClockContext.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerClockContext.test.js","sourceRoot":"","sources":["../../../src/contexts/__tests__/ServerClockContext.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EACL,+BAA+B,EAC/B,sCAAsC,EACtC,2BAA2B,GAC5B,MAAM,uBAAuB,CAAA;AAE9B,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;IACtD,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;QACtB,MAAM,KAAK,GAAG,sCAAsC,EAAE,CAAA;QAEtD,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,KAAK,GAAG,sCAAsC,EAAE,CAAA;QAEtD,uCAAuC;QACvC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAChC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;QACxD,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,CAAA;QAE/C,MAAM,CAAC,2BAA2B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC/D,MAAM,CAAC,2BAA2B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAClE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;QACvB,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,+BAA+B,CAAC,MAAM,EAAE,CAAA;QAEnF,MAAM,CAAC,2BAA2B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/D,MAAM,CAAC,2BAA2B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAChE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;QACtB,gCAAgC;QAChC,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAA;QAEhD,MAAM,CAAC,2BAA2B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9D,MAAM,CAAC,2BAA2B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAClE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACzB,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;QAEjD,MAAM,CAAC,2BAA2B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAA;QAE/C,MAAM,CAAC,2BAA2B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9D,MAAM,CAAC,2BAA2B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,60 @@
1
+ import { type ServerClockAccuracy, type ServerClockContextValue } from '../contexts/ServerClockContext';
2
+ export interface UseServerClockResult extends ServerClockContextValue {
3
+ /**
4
+ * `require` で指定した用途に対して時刻が十分な精度か。
5
+ * `require` を指定しない場合は `synced` と同じ。
6
+ */
7
+ trustworthy: boolean;
8
+ }
9
+ /**
10
+ * インスタンス内の全端末で共有できる時計(サーバ時刻)を提供するフック
11
+ *
12
+ * 端末の `Date.now()` は互いに 0.1〜数秒ずれているため、動画の再生位置同期・
13
+ * カウントダウン・同時演出・決定論的アニメーションはこれを使う。
14
+ *
15
+ * 指針:
16
+ * - **`now` は関数**。値ではないので `useFrame` の中から再レンダーなしで呼べる
17
+ * - **`timeJumpCount` の変化を見て基準を取り直す。** 通常は時刻が巻き戻らない
18
+ * よう徐々に補正するが、スリープ復帰などでは飛ぶ。時刻から位置を計算している
19
+ * ワールドは、飛んだときに基準を取り直さないとワープしたままになる
20
+ * - **補正のコストが誤差より大きいなら補正しない。** 動画で言えば、ズレを直すために
21
+ * シークしてバッファが切れるくらいなら、ズレたまま再生を続けるほうが体験は良い
22
+ * - 早押し・ゴール判定のような**公平性が要る用途には使わない**。経路の非対称ぶんの
23
+ * 誤差は検出できず、繰り返しても平均化されない(同じ人が毎回勝つ)
24
+ *
25
+ * @example
26
+ * // 動画の再生位置を合わせる
27
+ * const clock = useServerClock({ require: 'media' })
28
+ *
29
+ * useFrame(() => {
30
+ * if (!clock.trustworthy) return // 精度が出ていないなら諦める
31
+ * const target = (clock.now() - epoch) / 1000 % duration
32
+ * const diff = target - video.currentTime
33
+ * if (Math.abs(diff) < 0.3) {
34
+ * video.playbackRate = 1 // dead band。戻し忘れると振動し続ける
35
+ * return
36
+ * }
37
+ * if (Math.abs(diff) < 5) video.playbackRate = 1 + Math.sign(diff) * 0.05
38
+ * else if (isBuffered(video, target)) video.currentTime = target
39
+ * // バッファ外なら何もしない(同期より再生継続を優先)
40
+ * })
41
+ *
42
+ * @example
43
+ * // 全員で一致する動く床(通信ゼロ。後から入った人も即座に正しい位置になる)
44
+ * const { now, timeJumpCount } = useServerClock()
45
+ * const seen = useRef(timeJumpCount)
46
+ *
47
+ * useFrame(() => {
48
+ * if (seen.current !== timeJumpCount) {
49
+ * seen.current = timeJumpCount
50
+ * resetBaseline() // 時刻が飛んだので基準を取り直す
51
+ * }
52
+ * floor.current.position.y = Math.sin(now() / 1000) * 2
53
+ * })
54
+ *
55
+ * @throws {Error} XRiftProvider の外で呼び出された場合
56
+ */
57
+ export declare const useServerClock: (options?: {
58
+ require?: ServerClockAccuracy;
59
+ }) => UseServerClockResult;
60
+ //# sourceMappingURL=useServerClock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useServerClock.d.ts","sourceRoot":"","sources":["../../src/hooks/useServerClock.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAE7B,MAAM,gCAAgC,CAAA;AAEvC,MAAM,WAAW,oBAAqB,SAAQ,uBAAuB;IACnE;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAA;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,eAAO,MAAM,cAAc,GAAI,UAAU;IAAE,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAAE,KAAG,oBAO5E,CAAA"}
@@ -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
@@ -14,6 +14,7 @@ export { PlacementStateProvider, usePlacementState, type PlacementMode, type Pla
14
14
  export { ItemProvider, useItem, type ItemContextValue, } 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,7 @@ 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';
47
49
  export { useVoiceVolumeOverride, useAudioVolume } from './hooks/useAudioVolume';
48
50
  export { useDefaultFont, type FontLocale } from './hooks/useDefaultFont';
49
51
  export { LAYERS, type LayerName, type LayerNumber } from './constants/layers';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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,7 @@ 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';
51
53
  export { useVoiceVolumeOverride, useAudioVolume } from './hooks/useAudioVolume';
52
54
  export { useDefaultFont } from './hooks/useDefaultFont';
53
55
  // Constants
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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.45.0",
3
+ "version": "0.47.0",
4
4
  "description": "Shared components and utilities for Xrift worlds",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",