@xrift/world-components 0.2.5 → 0.3.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/Interactable/index.d.ts.map +1 -1
- package/dist/components/Interactable/index.js +7 -3
- package/dist/components/Interactable/index.js.map +1 -1
- package/dist/contexts/XRiftContext.d.ts +13 -0
- package/dist/contexts/XRiftContext.d.ts.map +1 -1
- package/dist/contexts/XRiftContext.js +14 -1
- package/dist/contexts/XRiftContext.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Interactable/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAsE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAA;AAGnG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAIpC,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Interactable/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAsE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAA;AAGnG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAIpC,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,KAAK,CAgHlC,CAAA;AAED,YAAY,EAAE,KAAK,IAAI,iBAAiB,EAAE,MAAM,SAAS,CAAA"}
|
|
@@ -4,9 +4,9 @@ import { Children, cloneElement, isValidElement, useEffect, useMemo, useRef } fr
|
|
|
4
4
|
import { useXRift } from '../../contexts/XRiftContext';
|
|
5
5
|
const INTERACTABLE_LAYER = 10;
|
|
6
6
|
export const Interactable = ({ id, type = 'button', onInteract, interactionText, enabled = true, children, }) => {
|
|
7
|
-
const { currentTarget } = useXRift();
|
|
7
|
+
const { currentTarget, registerInteractable, unregisterInteractable } = useXRift();
|
|
8
8
|
const groupRef = useRef(null);
|
|
9
|
-
// userDataにインタラクション情報を設定 & レイヤー設定
|
|
9
|
+
// userDataにインタラクション情報を設定 & レイヤー設定 & オブジェクト登録
|
|
10
10
|
useEffect(() => {
|
|
11
11
|
const object = groupRef.current;
|
|
12
12
|
if (!object)
|
|
@@ -24,8 +24,12 @@ export const Interactable = ({ id, type = 'button', onInteract, interactionText,
|
|
|
24
24
|
object.traverse((child) => {
|
|
25
25
|
child.layers.enable(INTERACTABLE_LAYER);
|
|
26
26
|
});
|
|
27
|
+
// インタラクト可能オブジェクトとして登録
|
|
28
|
+
registerInteractable(object);
|
|
27
29
|
// クリーンアップ: userDataからインタラクション情報を削除
|
|
28
30
|
return () => {
|
|
31
|
+
// 登録解除
|
|
32
|
+
unregisterInteractable(object);
|
|
29
33
|
if (object.userData) {
|
|
30
34
|
delete object.userData.id;
|
|
31
35
|
delete object.userData.type;
|
|
@@ -38,7 +42,7 @@ export const Interactable = ({ id, type = 'button', onInteract, interactionText,
|
|
|
38
42
|
child.layers.disable(INTERACTABLE_LAYER);
|
|
39
43
|
});
|
|
40
44
|
};
|
|
41
|
-
}, [id, type, onInteract, interactionText, enabled]);
|
|
45
|
+
}, [id, type, onInteract, interactionText, enabled, registerInteractable, unregisterInteractable]);
|
|
42
46
|
// 現在のターゲットかどうかで視覚的フィードバックを提供
|
|
43
47
|
const isTargeted = currentTarget !== null && currentTarget.uuid === groupRef.current?.uuid;
|
|
44
48
|
// 再帰的に子要素を探索して、すべての<mesh>に<Outlines>を追加する関数
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Interactable/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAW,MAAM,OAAO,CAAA;AAEnG,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAGtD,MAAM,kBAAkB,GAAG,EAAE,CAAA;AAE7B,MAAM,CAAC,MAAM,YAAY,GAAc,CAAC,EACtC,EAAE,EACF,IAAI,GAAG,QAAQ,EACf,UAAU,EACV,eAAe,EACf,OAAO,GAAG,IAAI,EACd,QAAQ,GACT,EAAE,EAAE;IACH,MAAM,EAAE,aAAa,EAAE,GAAG,QAAQ,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Interactable/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,19 @@ export interface XRiftContextValue {
|
|
|
11
11
|
* xrift-frontend側のRaycastDetectorが設定する
|
|
12
12
|
*/
|
|
13
13
|
currentTarget: Object3D | null;
|
|
14
|
+
/**
|
|
15
|
+
* インタラクト可能なオブジェクトのセット
|
|
16
|
+
* レイキャストのパフォーマンス最適化のために使用
|
|
17
|
+
*/
|
|
18
|
+
interactableObjects: Set<Object3D>;
|
|
19
|
+
/**
|
|
20
|
+
* インタラクト可能なオブジェクトを登録
|
|
21
|
+
*/
|
|
22
|
+
registerInteractable: (object: Object3D) => void;
|
|
23
|
+
/**
|
|
24
|
+
* インタラクト可能なオブジェクトの登録を解除
|
|
25
|
+
*/
|
|
26
|
+
unregisterInteractable: (object: Object3D) => void;
|
|
14
27
|
}
|
|
15
28
|
/**
|
|
16
29
|
* XRift ワールドの情報を提供するContext
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XRiftContext.d.ts","sourceRoot":"","sources":["../../src/contexts/XRiftContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"XRiftContext.d.ts","sourceRoot":"","sources":["../../src/contexts/XRiftContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAAqC,MAAM,OAAO,CAAA;AACxF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAErC,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,aAAa,EAAE,QAAQ,GAAG,IAAI,CAAA;IAC9B;;;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,aAAa,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;IAC/B,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,sCAA6C,KAAK,4CA2B/E,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,QAAQ,QAAO,iBAQ3B,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { createContext, useContext } from 'react';
|
|
2
|
+
import { createContext, useCallback, useContext, useState } from 'react';
|
|
3
3
|
/**
|
|
4
4
|
* XRift ワールドの情報を提供するContext
|
|
5
5
|
* ワールド側でこのContextを直接参照して情報を取得できる
|
|
@@ -11,9 +11,22 @@ export const XRiftContext = createContext(null);
|
|
|
11
11
|
* 必要な情報を注入するために使用
|
|
12
12
|
*/
|
|
13
13
|
export const XRiftProvider = ({ baseUrl, currentTarget = null, children }) => {
|
|
14
|
+
// インタラクト可能なオブジェクトの管理
|
|
15
|
+
const [interactableObjects] = useState(() => new Set());
|
|
16
|
+
// オブジェクトの登録
|
|
17
|
+
const registerInteractable = useCallback((object) => {
|
|
18
|
+
interactableObjects.add(object);
|
|
19
|
+
}, [interactableObjects]);
|
|
20
|
+
// オブジェクトの登録解除
|
|
21
|
+
const unregisterInteractable = useCallback((object) => {
|
|
22
|
+
interactableObjects.delete(object);
|
|
23
|
+
}, [interactableObjects]);
|
|
14
24
|
return (_jsx(XRiftContext.Provider, { value: {
|
|
15
25
|
baseUrl,
|
|
16
26
|
currentTarget,
|
|
27
|
+
interactableObjects,
|
|
28
|
+
registerInteractable,
|
|
29
|
+
unregisterInteractable,
|
|
17
30
|
}, children: children }));
|
|
18
31
|
};
|
|
19
32
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XRiftContext.js","sourceRoot":"","sources":["../../src/contexts/XRiftContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAkB,UAAU,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"XRiftContext.js","sourceRoot":"","sources":["../../src/contexts/XRiftContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAkB,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAiCxF;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAA2B,IAAI,CAAC,CAAA;AAQzE;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,EAAE,QAAQ,EAAS,EAAE,EAAE;IAClF,qBAAqB;IACrB,MAAM,CAAC,mBAAmB,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,EAAY,CAAC,CAAA;IAEjE,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,aAAa;YACb,mBAAmB;YACnB,oBAAoB;YACpB,sBAAsB;SACvB,YAEA,QAAQ,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"}
|