@xrift/world-components 0.10.6 → 0.12.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.
@@ -0,0 +1,28 @@
1
+ import { type FC } from 'react';
2
+ declare module '@react-three/fiber' {
3
+ interface ThreeElements {
4
+ gradientCylinderMaterial: React.JSX.IntrinsicElements['shaderMaterial'];
5
+ }
6
+ }
7
+ export interface SpawnPointProps {
8
+ /** スポーン位置 [x, y, z] */
9
+ position?: [number, number, number];
10
+ /** スポーン時の向き(度数法 0-360) */
11
+ yaw?: number;
12
+ }
13
+ /**
14
+ * ワールド内のリスポーン地点を指定するコンポーネント
15
+ * ワールド作成者がこのコンポーネントを配置することで、
16
+ * プラットフォーム側がプレイヤーのスポーン位置を取得できる
17
+ *
18
+ * @example
19
+ * // ワールド側での使用例
20
+ * <SpawnPoint position={[0, 0, 5]} yaw={180} />
21
+ *
22
+ * @note
23
+ * - 開発時(import.meta.env.DEV === true)のみヘルパー表示が有効になります
24
+ * - 本番ビルドにはヘルパーのコードが含まれません
25
+ * - 1つのワールドに複数のSpawnPointがある場合、最後に設定されたものが有効になります
26
+ */
27
+ export declare const SpawnPoint: FC<SpawnPointProps>;
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/SpawnPoint/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAa,MAAM,OAAO,CAAA;AA8B1C,OAAO,QAAQ,oBAAoB,CAAC;IAClC,UAAU,aAAa;QACrB,wBAAwB,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAA;KACxE;CACF;AAED,MAAM,WAAW,eAAe;IAC9B,uBAAuB;IACvB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,0BAA0B;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CA4C1C,CAAA"}
@@ -0,0 +1,54 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect } from 'react';
3
+ import { shaderMaterial } from '@react-three/drei';
4
+ import { extend } from '@react-three/fiber';
5
+ import { DoubleSide } from 'three';
6
+ import { useSpawnPointContext } from '../../contexts/SpawnPointContext';
7
+ const GradientCylinderMaterial = shaderMaterial({ color: [0, 1, 0.53], opacity: 0.5 },
8
+ // vertex shader
9
+ `
10
+ varying vec2 vUv;
11
+ void main() {
12
+ vUv = uv;
13
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
14
+ }
15
+ `,
16
+ // fragment shader
17
+ `
18
+ uniform vec3 color;
19
+ uniform float opacity;
20
+ varying vec2 vUv;
21
+ void main() {
22
+ float alpha = opacity * (1.0 - vUv.y);
23
+ gl_FragColor = vec4(color, alpha);
24
+ }
25
+ `);
26
+ extend({ GradientCylinderMaterial });
27
+ /**
28
+ * ワールド内のリスポーン地点を指定するコンポーネント
29
+ * ワールド作成者がこのコンポーネントを配置することで、
30
+ * プラットフォーム側がプレイヤーのスポーン位置を取得できる
31
+ *
32
+ * @example
33
+ * // ワールド側での使用例
34
+ * <SpawnPoint position={[0, 0, 5]} yaw={180} />
35
+ *
36
+ * @note
37
+ * - 開発時(import.meta.env.DEV === true)のみヘルパー表示が有効になります
38
+ * - 本番ビルドにはヘルパーのコードが含まれません
39
+ * - 1つのワールドに複数のSpawnPointがある場合、最後に設定されたものが有効になります
40
+ */
41
+ export const SpawnPoint = ({ position = [0, 0, 0], yaw = 0, }) => {
42
+ const { setSpawnPoint } = useSpawnPointContext();
43
+ const yawRad = (yaw * Math.PI) / 180;
44
+ useEffect(() => {
45
+ setSpawnPoint({ position, yaw });
46
+ }, [position, yaw, setSpawnPoint]);
47
+ // Vite以外の環境では import.meta.env が存在しない可能性があるため安全にアクセス
48
+ const isDev = typeof import.meta !== 'undefined' && import.meta.env?.DEV;
49
+ if (!isDev) {
50
+ return null;
51
+ }
52
+ return (_jsxs("group", { position: position, children: [_jsxs("mesh", { position: [0, 0.375, 0], children: [_jsx("cylinderGeometry", { args: [0.5, 0.5, 0.75, 32, 1, true] }), _jsx("gradientCylinderMaterial", { transparent: true, side: DoubleSide, depthWrite: false })] }), _jsxs("group", { rotation: [0, -yawRad, 0], children: [_jsxs("mesh", { position: [0, 0.3, -0.1], rotation: [Math.PI / 2, 0, 0], children: [_jsx("cylinderGeometry", { args: [0.03, 0.03, 0.3, 8] }), _jsx("meshBasicMaterial", { color: "#00ff88" })] }), _jsxs("mesh", { position: [0, 0.3, 0.12], rotation: [Math.PI / 2, 0, 0], children: [_jsx("coneGeometry", { args: [0.08, 0.15, 8] }), _jsx("meshBasicMaterial", { color: "#00ff88" })] })] })] }));
53
+ };
54
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/SpawnPoint/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAW,SAAS,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AAEvE,MAAM,wBAAwB,GAAG,cAAc,CAC7C,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE;AACrC,gBAAgB;AAChB;;;;;;GAMC;AACD,kBAAkB;AAClB;;;;;;;;GAQC,CACF,CAAA;AAED,MAAM,CAAC,EAAE,wBAAwB,EAAE,CAAC,CAAA;AAepC;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,UAAU,GAAwB,CAAC,EAC9C,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACpB,GAAG,GAAG,CAAC,GACR,EAAE,EAAE;IACH,MAAM,EAAE,aAAa,EAAE,GAAG,oBAAoB,EAAE,CAAA;IAChD,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAA;IAEpC,SAAS,CAAC,GAAG,EAAE;QACb,aAAa,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAA;IAClC,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,CAAA;IAElC,oDAAoD;IACpD,MAAM,KAAK,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAA;IACxE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CACL,iBAAO,QAAQ,EAAE,QAAQ,aAEvB,gBAAM,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,aAC3B,2BAAkB,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAI,EACzD,mCACE,WAAW,QACX,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,KAAK,GACjB,IACG,EAGP,iBAAO,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,aAE9B,gBAAM,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,aAC3D,2BAAkB,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAI,EAChD,4BAAmB,KAAK,EAAC,SAAS,GAAG,IAChC,EAEP,gBAAM,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,aAC3D,uBAAc,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAI,EACvC,4BAAmB,KAAK,EAAC,SAAS,GAAG,IAChC,IACD,IACF,CACT,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,53 @@
1
+ import { type ReactNode } from 'react';
2
+ /**
3
+ * スポーン地点の情報
4
+ */
5
+ export interface SpawnPoint {
6
+ /** スポーン位置 [x, y, z] */
7
+ position: [number, number, number];
8
+ /** スポーン時の向き(度数法 0-360) */
9
+ yaw: number;
10
+ }
11
+ /**
12
+ * スポーン地点を管理するためのインターフェース
13
+ * プラットフォーム側(xrift-frontend)が実装を注入する
14
+ */
15
+ export interface SpawnPointContextValue {
16
+ /** 現在のスポーン地点(未設定時はnull) */
17
+ spawnPoint: SpawnPoint | null;
18
+ /** スポーン地点を設定する */
19
+ setSpawnPoint: (point: SpawnPoint) => void;
20
+ }
21
+ /**
22
+ * スポーン地点を管理するContext
23
+ * ワールド作成者がSpawnPointコンポーネントで設定した値を
24
+ * プラットフォーム側が取得できる
25
+ */
26
+ export declare const SpawnPointContext: import("react").Context<SpawnPointContextValue>;
27
+ interface Props {
28
+ /**
29
+ * プラットフォーム側が提供する実装
30
+ * 未指定の場合はデフォルト実装(ローカルstate)が使用される
31
+ */
32
+ implementation?: SpawnPointContextValue;
33
+ children: ReactNode;
34
+ }
35
+ /**
36
+ * スポーン地点を提供するContextProvider
37
+ * プラットフォーム側(xrift-frontend)がスポーン地点を取得するために使用
38
+ *
39
+ * @example
40
+ * // プラットフォーム側での使用例
41
+ * const spawnPointImpl = useSpawnPointImplementation()
42
+ * <SpawnPointProvider implementation={spawnPointImpl}>
43
+ * <WorldComponent />
44
+ * </SpawnPointProvider>
45
+ */
46
+ export declare const SpawnPointProvider: ({ implementation, children }: Props) => import("react/jsx-runtime").JSX.Element;
47
+ /**
48
+ * スポーン地点のContextを取得するhook
49
+ * 通常、ワールド作成者は直接このhookを使用せず、useSpawnPointを使用する
50
+ */
51
+ export declare const useSpawnPointContext: () => SpawnPointContextValue;
52
+ export {};
53
+ //# sourceMappingURL=SpawnPointContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpawnPointContext.d.ts","sourceRoot":"","sources":["../../src/contexts/SpawnPointContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAAqC,MAAM,OAAO,CAAA;AAExF;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,uBAAuB;IACvB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,0BAA0B;IAC1B,GAAG,EAAE,MAAM,CAAA;CACZ;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,2BAA2B;IAC3B,UAAU,EAAE,UAAU,GAAG,IAAI,CAAA;IAC7B,kBAAkB;IAClB,aAAa,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;CAC3C;AAkBD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,iDAE7B,CAAA;AAED,UAAU,KAAK;IACb;;;OAGG;IACH,cAAc,CAAC,EAAE,sBAAsB,CAAA;IACvC,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,GAAI,8BAA8B,KAAK,4CAkBrE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,QAAO,sBAEvC,CAAA"}
@@ -0,0 +1,53 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useCallback, useContext, useState } from 'react';
3
+ /**
4
+ * デフォルト実装: Context未設定時はローカル状態として動作
5
+ */
6
+ const createDefaultImplementation = () => {
7
+ let currentSpawnPoint = null;
8
+ return {
9
+ get spawnPoint() {
10
+ return currentSpawnPoint;
11
+ },
12
+ setSpawnPoint: (point) => {
13
+ currentSpawnPoint = point;
14
+ },
15
+ };
16
+ };
17
+ /**
18
+ * スポーン地点を管理するContext
19
+ * ワールド作成者がSpawnPointコンポーネントで設定した値を
20
+ * プラットフォーム側が取得できる
21
+ */
22
+ export const SpawnPointContext = createContext(createDefaultImplementation());
23
+ /**
24
+ * スポーン地点を提供するContextProvider
25
+ * プラットフォーム側(xrift-frontend)がスポーン地点を取得するために使用
26
+ *
27
+ * @example
28
+ * // プラットフォーム側での使用例
29
+ * const spawnPointImpl = useSpawnPointImplementation()
30
+ * <SpawnPointProvider implementation={spawnPointImpl}>
31
+ * <WorldComponent />
32
+ * </SpawnPointProvider>
33
+ */
34
+ export const SpawnPointProvider = ({ implementation, children }) => {
35
+ const [spawnPoint, setSpawnPointState] = useState(null);
36
+ const setSpawnPoint = useCallback((point) => {
37
+ setSpawnPointState(point);
38
+ }, []);
39
+ // 外部実装が渡された場合はそれを使用、なければデフォルト実装
40
+ const value = implementation ?? {
41
+ spawnPoint,
42
+ setSpawnPoint,
43
+ };
44
+ return (_jsx(SpawnPointContext.Provider, { value: value, children: children }));
45
+ };
46
+ /**
47
+ * スポーン地点のContextを取得するhook
48
+ * 通常、ワールド作成者は直接このhookを使用せず、useSpawnPointを使用する
49
+ */
50
+ export const useSpawnPointContext = () => {
51
+ return useContext(SpawnPointContext);
52
+ };
53
+ //# sourceMappingURL=SpawnPointContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpawnPointContext.js","sourceRoot":"","sources":["../../src/contexts/SpawnPointContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAkB,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAuBxF;;GAEG;AACH,MAAM,2BAA2B,GAAG,GAA2B,EAAE;IAC/D,IAAI,iBAAiB,GAAsB,IAAI,CAAA;IAE/C,OAAO;QACL,IAAI,UAAU;YACZ,OAAO,iBAAiB,CAAA;QAC1B,CAAC;QACD,aAAa,EAAE,CAAC,KAAiB,EAAE,EAAE;YACnC,iBAAiB,GAAG,KAAK,CAAA;QAC3B,CAAC;KACF,CAAA;AACH,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAC5C,2BAA2B,EAAE,CAC9B,CAAA;AAWD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAAE,cAAc,EAAE,QAAQ,EAAS,EAAE,EAAE;IACxE,MAAM,CAAC,UAAU,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAoB,IAAI,CAAC,CAAA;IAE1E,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,KAAiB,EAAE,EAAE;QACtD,kBAAkB,CAAC,KAAK,CAAC,CAAA;IAC3B,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,gCAAgC;IAChC,MAAM,KAAK,GAA2B,cAAc,IAAI;QACtD,UAAU;QACV,aAAa;KACd,CAAA;IAED,OAAO,CACL,KAAC,iBAAiB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YACrC,QAAQ,GACkB,CAC9B,CAAA;AACH,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAA2B,EAAE;IAC/D,OAAO,UAAU,CAAC,iBAAiB,CAAC,CAAA;AACtC,CAAC,CAAA"}
@@ -2,6 +2,7 @@ import { type ReactNode } from 'react';
2
2
  import type { Object3D } from 'three';
3
3
  import { type InstanceStateContextValue } from './InstanceStateContext';
4
4
  import { type ScreenShareContextValue } from './ScreenShareContext';
5
+ import { type SpawnPointContextValue } from './SpawnPointContext';
5
6
  export interface XRiftContextValue {
6
7
  /**
7
8
  * ワールドのベースURL(CDNのディレクトリパス)
@@ -39,6 +40,11 @@ interface Props {
39
40
  * 指定しない場合はデフォルト実装(no-op)が使用される
40
41
  */
41
42
  screenShareImplementation?: ScreenShareContextValue;
43
+ /**
44
+ * スポーン地点管理の実装(オプション)
45
+ * 指定しない場合はデフォルト実装(ローカルstate)が使用される
46
+ */
47
+ spawnPointImplementation?: SpawnPointContextValue;
42
48
  children: ReactNode;
43
49
  }
44
50
  /**
@@ -46,7 +52,7 @@ interface Props {
46
52
  * Module Federationで動的にロードされたワールドコンポーネントに
47
53
  * 必要な情報を注入するために使用
48
54
  */
49
- export declare const XRiftProvider: ({ baseUrl, instanceStateImplementation, screenShareImplementation, children, }: Props) => import("react/jsx-runtime").JSX.Element;
55
+ export declare const XRiftProvider: ({ baseUrl, instanceStateImplementation, screenShareImplementation, spawnPointImplementation, children, }: Props) => import("react/jsx-runtime").JSX.Element;
50
56
  /**
51
57
  * XRift ワールドの情報を取得するhook
52
58
  * ワールドプロジェクト側でアセットの相対パスを絶対パスに変換する際に使用
@@ -1 +1 @@
1
- {"version":3,"file":"XRiftContext.d.ts","sourceRoot":"","sources":["../../src/contexts/XRiftContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAA8C,MAAM,OAAO,CAAA;AACjG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,EAAyB,KAAK,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAC9F,OAAO,EAAuB,KAAK,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAUxF,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,mBAAmB,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;IAClC;;OAEG;IACH,oBAAoB,EAAE,CAAC,MAAM,EAAE,QAAQ,KAAK,IAAI,CAAA;IAChD;;OAEG;IACH,sBAAsB,EAAE,CAAC,MAAM,EAAE,QAAQ,KAAK,IAAI,CAAA;CAKnD;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,mDAAgD,CAAA;AAEzE,UAAU,KAAK;IACb,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,2BAA2B,CAAC,EAAE,yBAAyB,CAAA;IACvD;;;OAGG;IACH,yBAAyB,CAAC,EAAE,uBAAuB,CAAA;IACnD,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,gFAK3B,KAAK,4CAoCP,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,QAAQ,QAAO,iBAQ3B,CAAA"}
1
+ {"version":3,"file":"XRiftContext.d.ts","sourceRoot":"","sources":["../../src/contexts/XRiftContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAA8C,MAAM,OAAO,CAAA;AACjG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,EAAyB,KAAK,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAC9F,OAAO,EAAuB,KAAK,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AACxF,OAAO,EAAsB,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAUrF,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,mBAAmB,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;IAClC;;OAEG;IACH,oBAAoB,EAAE,CAAC,MAAM,EAAE,QAAQ,KAAK,IAAI,CAAA;IAChD;;OAEG;IACH,sBAAsB,EAAE,CAAC,MAAM,EAAE,QAAQ,KAAK,IAAI,CAAA;CAKnD;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,mDAAgD,CAAA;AAEzE,UAAU,KAAK;IACb,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,2BAA2B,CAAC,EAAE,yBAAyB,CAAA;IACvD;;;OAGG;IACH,yBAAyB,CAAC,EAAE,uBAAuB,CAAA;IACnD;;;OAGG;IACH,wBAAwB,CAAC,EAAE,sBAAsB,CAAA;IACjD,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,0GAM3B,KAAK,4CAsCP,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,QAAQ,QAAO,iBAQ3B,CAAA"}
@@ -2,6 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { createContext, useCallback, useContext, useMemo, useState } from 'react';
3
3
  import { InstanceStateProvider } from './InstanceStateContext';
4
4
  import { ScreenShareProvider } from './ScreenShareContext';
5
+ import { SpawnPointProvider } from './SpawnPointContext';
5
6
  // デフォルトの画面共有実装(開発環境用)
6
7
  const createDefaultScreenShareImplementation = () => ({
7
8
  videoElement: null,
@@ -19,7 +20,7 @@ export const XRiftContext = createContext(null);
19
20
  * Module Federationで動的にロードされたワールドコンポーネントに
20
21
  * 必要な情報を注入するために使用
21
22
  */
22
- export const XRiftProvider = ({ baseUrl, instanceStateImplementation, screenShareImplementation, children, }) => {
23
+ export const XRiftProvider = ({ baseUrl, instanceStateImplementation, screenShareImplementation, spawnPointImplementation, children, }) => {
23
24
  // インタラクト可能なオブジェクトの管理
24
25
  const [interactableObjects] = useState(() => new Set());
25
26
  // 画面共有の実装(指定がない場合はデフォルト実装を使用)
@@ -37,7 +38,7 @@ export const XRiftProvider = ({ baseUrl, instanceStateImplementation, screenShar
37
38
  interactableObjects,
38
39
  registerInteractable,
39
40
  unregisterInteractable,
40
- }, children: _jsx(ScreenShareProvider, { value: screenShareImpl, children: _jsx(InstanceStateProvider, { implementation: instanceStateImplementation, children: children }) }) }));
41
+ }, children: _jsx(ScreenShareProvider, { value: screenShareImpl, children: _jsx(InstanceStateProvider, { implementation: instanceStateImplementation, children: _jsx(SpawnPointProvider, { implementation: spawnPointImplementation, children: children }) }) }) }));
41
42
  };
42
43
  /**
43
44
  * XRift ワールドの情報を取得するhook
@@ -1 +1 @@
1
- {"version":3,"file":"XRiftContext.js","sourceRoot":"","sources":["../../src/contexts/XRiftContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAkB,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEjG,OAAO,EAAE,qBAAqB,EAAkC,MAAM,wBAAwB,CAAA;AAC9F,OAAO,EAAE,mBAAmB,EAAgC,MAAM,sBAAsB,CAAA;AAExF,sBAAsB;AACtB,MAAM,sCAAsC,GAAG,GAA4B,EAAE,CAAC,CAAC;IAC7E,YAAY,EAAE,IAAI;IAClB,SAAS,EAAE,KAAK;IAChB,gBAAgB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC;IAC5E,eAAe,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC;CAC3E,CAAC,CAAA;AA2BF;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAA2B,IAAI,CAAC,CAAA;AAiBzE;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAC5B,OAAO,EACP,2BAA2B,EAC3B,yBAAyB,EACzB,QAAQ,GACF,EAAE,EAAE;IACV,qBAAqB;IACrB,MAAM,CAAC,mBAAmB,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,EAAY,CAAC,CAAA;IAEjE,8BAA8B;IAC9B,MAAM,eAAe,GAAG,OAAO,CAC7B,GAAG,EAAE,CAAC,yBAAyB,IAAI,sCAAsC,EAAE,EAC3E,CAAC,yBAAyB,CAAC,CAC5B,CAAA;IAED,YAAY;IACZ,MAAM,oBAAoB,GAAG,WAAW,CAAC,CAAC,MAAgB,EAAE,EAAE;QAC5D,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAA;IAEzB,cAAc;IACd,MAAM,sBAAsB,GAAG,WAAW,CAAC,CAAC,MAAgB,EAAE,EAAE;QAC9D,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACpC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAA;IAEzB,OAAO,CACL,KAAC,YAAY,CAAC,QAAQ,IACpB,KAAK,EAAE;YACL,OAAO;YACP,mBAAmB;YACnB,oBAAoB;YACpB,sBAAsB;SACvB,YAED,KAAC,mBAAmB,IAAC,KAAK,EAAE,eAAe,YACzC,KAAC,qBAAqB,IAAC,cAAc,EAAE,2BAA2B,YAC/D,QAAQ,GACa,GACJ,GACA,CACzB,CAAA;AACH,CAAC,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAsB,EAAE;IAC9C,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,CAAA;IAExC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;IAC/D,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
1
+ {"version":3,"file":"XRiftContext.js","sourceRoot":"","sources":["../../src/contexts/XRiftContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAkB,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEjG,OAAO,EAAE,qBAAqB,EAAkC,MAAM,wBAAwB,CAAA;AAC9F,OAAO,EAAE,mBAAmB,EAAgC,MAAM,sBAAsB,CAAA;AACxF,OAAO,EAAE,kBAAkB,EAA+B,MAAM,qBAAqB,CAAA;AAErF,sBAAsB;AACtB,MAAM,sCAAsC,GAAG,GAA4B,EAAE,CAAC,CAAC;IAC7E,YAAY,EAAE,IAAI;IAClB,SAAS,EAAE,KAAK;IAChB,gBAAgB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC;IAC5E,eAAe,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC;CAC3E,CAAC,CAAA;AA2BF;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAA2B,IAAI,CAAC,CAAA;AAsBzE;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAC5B,OAAO,EACP,2BAA2B,EAC3B,yBAAyB,EACzB,wBAAwB,EACxB,QAAQ,GACF,EAAE,EAAE;IACV,qBAAqB;IACrB,MAAM,CAAC,mBAAmB,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,EAAY,CAAC,CAAA;IAEjE,8BAA8B;IAC9B,MAAM,eAAe,GAAG,OAAO,CAC7B,GAAG,EAAE,CAAC,yBAAyB,IAAI,sCAAsC,EAAE,EAC3E,CAAC,yBAAyB,CAAC,CAC5B,CAAA;IAED,YAAY;IACZ,MAAM,oBAAoB,GAAG,WAAW,CAAC,CAAC,MAAgB,EAAE,EAAE;QAC5D,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAA;IAEzB,cAAc;IACd,MAAM,sBAAsB,GAAG,WAAW,CAAC,CAAC,MAAgB,EAAE,EAAE;QAC9D,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACpC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAA;IAEzB,OAAO,CACL,KAAC,YAAY,CAAC,QAAQ,IACpB,KAAK,EAAE;YACL,OAAO;YACP,mBAAmB;YACnB,oBAAoB;YACpB,sBAAsB;SACvB,YAED,KAAC,mBAAmB,IAAC,KAAK,EAAE,eAAe,YACzC,KAAC,qBAAqB,IAAC,cAAc,EAAE,2BAA2B,YAChE,KAAC,kBAAkB,IAAC,cAAc,EAAE,wBAAwB,YACzD,QAAQ,GACU,GACC,GACJ,GACA,CACzB,CAAA;AACH,CAAC,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAsB,EAAE;IAC9C,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,CAAA;IAExC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;IAC/D,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
@@ -0,0 +1,17 @@
1
+ import { type SpawnPoint } from '../contexts/SpawnPointContext';
2
+ /**
3
+ * 現在設定されているスポーン地点を取得するhook
4
+ * 主にプラットフォーム側(xrift-frontend)で使用される
5
+ *
6
+ * @example
7
+ * // プラットフォーム側での使用例
8
+ * const spawnPoint = useSpawnPoint()
9
+ * if (spawnPoint) {
10
+ * player.position.set(...spawnPoint.position)
11
+ * player.rotation.y = THREE.MathUtils.degToRad(spawnPoint.yaw)
12
+ * }
13
+ *
14
+ * @returns スポーン地点情報(未設定時はnull)
15
+ */
16
+ export declare const useSpawnPoint: () => SpawnPoint | null;
17
+ //# sourceMappingURL=useSpawnPoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSpawnPoint.d.ts","sourceRoot":"","sources":["../../src/hooks/useSpawnPoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAwB,MAAM,+BAA+B,CAAA;AAErF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,aAAa,QAAO,UAAU,GAAG,IAG7C,CAAA"}
@@ -0,0 +1,20 @@
1
+ import { useSpawnPointContext } from '../contexts/SpawnPointContext';
2
+ /**
3
+ * 現在設定されているスポーン地点を取得するhook
4
+ * 主にプラットフォーム側(xrift-frontend)で使用される
5
+ *
6
+ * @example
7
+ * // プラットフォーム側での使用例
8
+ * const spawnPoint = useSpawnPoint()
9
+ * if (spawnPoint) {
10
+ * player.position.set(...spawnPoint.position)
11
+ * player.rotation.y = THREE.MathUtils.degToRad(spawnPoint.yaw)
12
+ * }
13
+ *
14
+ * @returns スポーン地点情報(未設定時はnull)
15
+ */
16
+ export const useSpawnPoint = () => {
17
+ const { spawnPoint } = useSpawnPointContext();
18
+ return spawnPoint;
19
+ };
20
+ //# sourceMappingURL=useSpawnPoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSpawnPoint.js","sourceRoot":"","sources":["../../src/hooks/useSpawnPoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AAErF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAsB,EAAE;IACnD,MAAM,EAAE,UAAU,EAAE,GAAG,oBAAoB,EAAE,CAAA;IAC7C,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA"}
package/dist/index.d.ts CHANGED
@@ -1,10 +1,13 @@
1
1
  export { XRiftContext, XRiftProvider, useXRift, type XRiftContextValue, } from './contexts/XRiftContext';
2
2
  export { InstanceStateContext, useInstanceStateContext, type InstanceStateContextValue, } from './contexts/InstanceStateContext';
3
3
  export { ScreenShareContext, ScreenShareProvider, useScreenShareContext, type ScreenShareContextValue, } from './contexts/ScreenShareContext';
4
+ export { SpawnPointContext, SpawnPointProvider, useSpawnPointContext, type SpawnPoint as SpawnPointData, type SpawnPointContextValue, } from './contexts/SpawnPointContext';
4
5
  export { Interactable, type InteractableProps, } from './components/Interactable';
5
6
  export { Mirror, type MirrorProps } from './components/Mirror';
6
7
  export { Skybox, type SkyboxProps } from './components/Skybox';
7
8
  export { VideoScreen, type VideoScreenProps, type VideoState, } from './components/VideoScreen';
8
9
  export { ScreenShareDisplay, type ScreenShareDisplayProps, } from './components/ScreenShareDisplay';
10
+ export { SpawnPoint, type SpawnPointProps, } from './components/SpawnPoint';
9
11
  export { useInstanceState } from './hooks/useInstanceState';
12
+ export { useSpawnPoint } from './hooks/useSpawnPoint';
10
13
  //# sourceMappingURL=index.d.ts.map
@@ -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;AAGtC,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAE9D,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAE9D,OAAO,EACL,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,UAAU,GAChB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,GAC7B,MAAM,iCAAiC,CAAA;AAGxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA"}
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;AAGrC,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAE9D,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAE9D,OAAO,EACL,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,UAAU,GAChB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,GAC7B,MAAM,iCAAiC,CAAA;AAExC,OAAO,EACL,UAAU,EACV,KAAK,eAAe,GACrB,MAAM,yBAAyB,CAAA;AAGhC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA"}
package/dist/index.js CHANGED
@@ -2,12 +2,15 @@
2
2
  export { XRiftContext, XRiftProvider, useXRift, } from './contexts/XRiftContext';
3
3
  export { InstanceStateContext, useInstanceStateContext, } from './contexts/InstanceStateContext';
4
4
  export { ScreenShareContext, ScreenShareProvider, useScreenShareContext, } from './contexts/ScreenShareContext';
5
+ export { SpawnPointContext, SpawnPointProvider, useSpawnPointContext, } from './contexts/SpawnPointContext';
5
6
  // Components
6
7
  export { Interactable, } from './components/Interactable';
7
8
  export { Mirror } from './components/Mirror';
8
9
  export { Skybox } from './components/Skybox';
9
10
  export { VideoScreen, } from './components/VideoScreen';
10
11
  export { ScreenShareDisplay, } from './components/ScreenShareDisplay';
12
+ export { SpawnPoint, } from './components/SpawnPoint';
11
13
  // Hooks
12
14
  export { useInstanceState } from './hooks/useInstanceState';
15
+ export { useSpawnPoint } from './hooks/useSpawnPoint';
13
16
  //# sourceMappingURL=index.js.map
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,aAAa;AACb,OAAO,EACL,YAAY,GAEb,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAA;AAE9D,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAA;AAE9D,OAAO,EACL,WAAW,GAGZ,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EACL,kBAAkB,GAEnB,MAAM,iCAAiC,CAAA;AAExC,QAAQ;AACR,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA"}
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,aAAa;AACb,OAAO,EACL,YAAY,GAEb,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAA;AAE9D,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAA;AAE9D,OAAO,EACL,WAAW,GAGZ,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EACL,kBAAkB,GAEnB,MAAM,iCAAiC,CAAA;AAExC,OAAO,EACL,UAAU,GAEX,MAAM,yBAAyB,CAAA;AAEhC,QAAQ;AACR,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xrift/world-components",
3
- "version": "0.10.6",
3
+ "version": "0.12.0",
4
4
  "description": "Shared components and utilities for Xrift worlds",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",