@xrift/world-components 0.22.0 → 0.23.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/DevEnvironment/components/CenterRaycaster.d.ts +6 -0
- package/dist/components/DevEnvironment/components/CenterRaycaster.d.ts.map +1 -0
- package/dist/components/DevEnvironment/components/CenterRaycaster.js +43 -0
- package/dist/components/DevEnvironment/components/CenterRaycaster.js.map +1 -0
- package/dist/components/DevEnvironment/components/ControlsHelp.d.ts +2 -0
- package/dist/components/DevEnvironment/components/ControlsHelp.d.ts.map +1 -0
- package/dist/components/DevEnvironment/components/ControlsHelp.js +32 -0
- package/dist/components/DevEnvironment/components/ControlsHelp.js.map +1 -0
- package/dist/components/DevEnvironment/components/Crosshair.d.ts +6 -0
- package/dist/components/DevEnvironment/components/Crosshair.d.ts.map +1 -0
- package/dist/components/DevEnvironment/components/Crosshair.js +41 -0
- package/dist/components/DevEnvironment/components/Crosshair.js.map +1 -0
- package/dist/components/DevEnvironment/components/PhysicsPlayer.d.ts +9 -0
- package/dist/components/DevEnvironment/components/PhysicsPlayer.d.ts.map +1 -0
- package/dist/components/DevEnvironment/components/PhysicsPlayer.js +133 -0
- package/dist/components/DevEnvironment/components/PhysicsPlayer.js.map +1 -0
- package/dist/components/DevEnvironment/components/PointerLockStatus.d.ts +6 -0
- package/dist/components/DevEnvironment/components/PointerLockStatus.d.ts.map +1 -0
- package/dist/components/DevEnvironment/components/PointerLockStatus.js +50 -0
- package/dist/components/DevEnvironment/components/PointerLockStatus.js.map +1 -0
- package/dist/components/DevEnvironment/constants.d.ts +21 -0
- package/dist/components/DevEnvironment/constants.d.ts.map +1 -0
- package/dist/components/DevEnvironment/constants.js +21 -0
- package/dist/components/DevEnvironment/constants.js.map +1 -0
- package/dist/components/DevEnvironment/index.d.ts +4 -0
- package/dist/components/DevEnvironment/index.d.ts.map +1 -0
- package/dist/components/DevEnvironment/index.js +42 -0
- package/dist/components/DevEnvironment/index.js.map +1 -0
- package/dist/components/DevEnvironment/types.d.ts +26 -0
- package/dist/components/DevEnvironment/types.d.ts.map +1 -0
- package/dist/components/DevEnvironment/types.js +2 -0
- package/dist/components/DevEnvironment/types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/package.json +6 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CenterRaycaster.d.ts","sourceRoot":"","sources":["../../../../src/components/DevEnvironment/components/CenterRaycaster.tsx"],"names":[],"mappings":"AAMA,UAAU,KAAK;IACb,WAAW,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAA;CACpC;AAID,wBAAgB,eAAe,CAAC,EAAE,WAAW,EAAE,EAAE,KAAK,QA2CrD"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { useEffect, useRef } from 'react';
|
|
2
|
+
import { useFrame, useThree } from '@react-three/fiber';
|
|
3
|
+
import { Raycaster, Vector2 } from 'three';
|
|
4
|
+
import { LAYERS } from '../../../constants/layers';
|
|
5
|
+
const NDC_CENTER = new Vector2(0, 0);
|
|
6
|
+
export function CenterRaycaster({ onHitChange }) {
|
|
7
|
+
const { camera, scene } = useThree();
|
|
8
|
+
const raycasterRef = useRef(new Raycaster());
|
|
9
|
+
const currentHitRef = useRef(null);
|
|
10
|
+
const wasHitRef = useRef(false);
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
const handleClick = () => {
|
|
13
|
+
let node = currentHitRef.current;
|
|
14
|
+
while (node) {
|
|
15
|
+
const userData = node.userData;
|
|
16
|
+
if (typeof userData.onInteract === 'function') {
|
|
17
|
+
userData.onInteract(userData.id ?? '');
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
node = node.parent;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
window.addEventListener('mousedown', handleClick);
|
|
24
|
+
return () => {
|
|
25
|
+
window.removeEventListener('mousedown', handleClick);
|
|
26
|
+
};
|
|
27
|
+
}, []);
|
|
28
|
+
useFrame(() => {
|
|
29
|
+
const raycaster = raycasterRef.current;
|
|
30
|
+
raycaster.far = 3.5;
|
|
31
|
+
raycaster.layers.set(LAYERS.INTERACTABLE);
|
|
32
|
+
raycaster.setFromCamera(NDC_CENTER, camera);
|
|
33
|
+
const hits = raycaster.intersectObjects(scene.children, true);
|
|
34
|
+
currentHitRef.current = hits.length > 0 ? hits[0].object : null;
|
|
35
|
+
const isHit = currentHitRef.current !== null;
|
|
36
|
+
if (isHit !== wasHitRef.current) {
|
|
37
|
+
wasHitRef.current = isHit;
|
|
38
|
+
onHitChange(isHit);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=CenterRaycaster.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CenterRaycaster.js","sourceRoot":"","sources":["../../../../src/components/DevEnvironment/components/CenterRaycaster.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAMlD,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAEpC,MAAM,UAAU,eAAe,CAAC,EAAE,WAAW,EAAS;IACpD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAA;IACpC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC,CAAA;IAC5C,MAAM,aAAa,GAAG,MAAM,CAAkB,IAAI,CAAC,CAAA;IACnD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAE/B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,IAAI,IAAI,GAAG,aAAa,CAAC,OAAO,CAAA;YAChC,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAGrB,CAAA;gBACD,IAAI,OAAO,QAAQ,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;oBAC9C,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;oBACtC,OAAM;gBACR,CAAC;gBACD,IAAI,GAAG,IAAI,CAAC,MAAM,CAAA;YACpB,CAAC;QACH,CAAC,CAAA;QACD,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;QACjD,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;QACtD,CAAC,CAAA;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,QAAQ,CAAC,GAAG,EAAE;QACZ,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAA;QACtC,SAAS,CAAC,GAAG,GAAG,GAAG,CAAA;QACnB,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QACzC,SAAS,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QAC3C,MAAM,IAAI,GAAG,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QAC7D,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;QAE/D,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,KAAK,IAAI,CAAA;QAC5C,IAAI,KAAK,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC;YAChC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAA;YACzB,WAAW,CAAC,KAAK,CAAC,CAAA;QACpB,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ControlsHelp.d.ts","sourceRoot":"","sources":["../../../../src/components/DevEnvironment/components/ControlsHelp.tsx"],"names":[],"mappings":"AAgCA,wBAAgB,YAAY,4CAkB3B"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
const containerStyle = {
|
|
3
|
+
position: 'absolute',
|
|
4
|
+
bottom: 16,
|
|
5
|
+
left: 16,
|
|
6
|
+
padding: '10px 14px',
|
|
7
|
+
background: 'rgba(0, 0, 0, 0.55)',
|
|
8
|
+
color: '#fff',
|
|
9
|
+
borderRadius: 8,
|
|
10
|
+
fontSize: 12,
|
|
11
|
+
lineHeight: 1.7,
|
|
12
|
+
pointerEvents: 'none',
|
|
13
|
+
userSelect: 'none',
|
|
14
|
+
fontFamily: 'system-ui, sans-serif',
|
|
15
|
+
backdropFilter: 'blur(4px)',
|
|
16
|
+
};
|
|
17
|
+
const kbdStyle = {
|
|
18
|
+
display: 'inline-block',
|
|
19
|
+
padding: '1px 5px',
|
|
20
|
+
background: 'rgba(255, 255, 255, 0.15)',
|
|
21
|
+
borderRadius: 3,
|
|
22
|
+
fontSize: 11,
|
|
23
|
+
fontFamily: 'inherit',
|
|
24
|
+
marginRight: 2,
|
|
25
|
+
};
|
|
26
|
+
function Kbd({ children }) {
|
|
27
|
+
return _jsx("kbd", { style: kbdStyle, children: children });
|
|
28
|
+
}
|
|
29
|
+
export function ControlsHelp() {
|
|
30
|
+
return (_jsxs("div", { style: containerStyle, children: [_jsxs("div", { children: [_jsx(Kbd, { children: "Click" }), " \u30ED\u30C3\u30AF\u958B\u59CB / \u30A4\u30F3\u30BF\u30E9\u30AF\u30C8"] }), _jsxs("div", { children: [_jsx(Kbd, { children: "W" }), _jsx(Kbd, { children: "A" }), _jsx(Kbd, { children: "S" }), _jsx(Kbd, { children: "D" }), " \u79FB\u52D5"] }), _jsxs("div", { children: [_jsx(Kbd, { children: "Space" }), _jsx(Kbd, { children: "E" }), " \u30B8\u30E3\u30F3\u30D7"] })] }));
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=ControlsHelp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ControlsHelp.js","sourceRoot":"","sources":["../../../../src/components/DevEnvironment/components/ControlsHelp.tsx"],"names":[],"mappings":";AAEA,MAAM,cAAc,GAAkB;IACpC,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,WAAW;IACpB,UAAU,EAAE,qBAAqB;IACjC,KAAK,EAAE,MAAM;IACb,YAAY,EAAE,CAAC;IACf,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,GAAG;IACf,aAAa,EAAE,MAAM;IACrB,UAAU,EAAE,MAAM;IAClB,UAAU,EAAE,uBAAuB;IACnC,cAAc,EAAE,WAAW;CAC5B,CAAA;AAED,MAAM,QAAQ,GAAkB;IAC9B,OAAO,EAAE,cAAc;IACvB,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,2BAA2B;IACvC,YAAY,EAAE,CAAC;IACf,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,SAAS;IACrB,WAAW,EAAE,CAAC;CACf,CAAA;AAED,SAAS,GAAG,CAAC,EAAE,QAAQ,EAA2B;IAChD,OAAO,cAAK,KAAK,EAAE,QAAQ,YAAG,QAAQ,GAAO,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,CACL,eAAK,KAAK,EAAE,cAAc,aACxB,0BACE,KAAC,GAAG,wBAAY,8EACZ,EACN,0BACE,KAAC,GAAG,oBAAQ,EACZ,KAAC,GAAG,oBAAQ,EACZ,KAAC,GAAG,oBAAQ,EACZ,KAAC,GAAG,oBAAQ,qBACR,EACN,0BACE,KAAC,GAAG,wBAAY,EAChB,KAAC,GAAG,oBAAQ,iCACR,IACF,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Crosshair.d.ts","sourceRoot":"","sources":["../../../../src/components/DevEnvironment/components/Crosshair.tsx"],"names":[],"mappings":"AAQA,UAAU,KAAK;IACb,MAAM,EAAE,OAAO,CAAA;CAChB;AAoBD,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,2CAgC1C"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { CROSSHAIR_SIZE, CROSSHAIR_THICKNESS, CROSSHAIR_ACTIVE_THICKNESS, HIGHLIGHT_COLOR, } from '../constants';
|
|
3
|
+
const containerStyle = {
|
|
4
|
+
position: 'absolute',
|
|
5
|
+
top: '50%',
|
|
6
|
+
left: '50%',
|
|
7
|
+
transform: 'translate(-50%, -50%)',
|
|
8
|
+
pointerEvents: 'none',
|
|
9
|
+
zIndex: 100,
|
|
10
|
+
width: CROSSHAIR_SIZE,
|
|
11
|
+
height: CROSSHAIR_SIZE,
|
|
12
|
+
};
|
|
13
|
+
const lineBase = {
|
|
14
|
+
position: 'absolute',
|
|
15
|
+
backgroundColor: 'rgba(255, 255, 255, 0.1)',
|
|
16
|
+
transition: 'background-color 0.2s ease, width 0.15s ease, height 0.15s ease, box-shadow 0.2s ease',
|
|
17
|
+
};
|
|
18
|
+
export function Crosshair({ active }) {
|
|
19
|
+
const color = active ? HIGHLIGHT_COLOR : 'rgba(255, 255, 255, 0.1)';
|
|
20
|
+
const shadow = active ? `0 0 8px ${HIGHLIGHT_COLOR}` : 'none';
|
|
21
|
+
return (_jsxs("div", { style: containerStyle, children: [_jsx("div", { style: {
|
|
22
|
+
...lineBase,
|
|
23
|
+
top: '50%',
|
|
24
|
+
left: 0,
|
|
25
|
+
width: '100%',
|
|
26
|
+
height: active ? CROSSHAIR_ACTIVE_THICKNESS : CROSSHAIR_THICKNESS,
|
|
27
|
+
transform: 'translateY(-50%)',
|
|
28
|
+
backgroundColor: color,
|
|
29
|
+
boxShadow: shadow,
|
|
30
|
+
} }), _jsx("div", { style: {
|
|
31
|
+
...lineBase,
|
|
32
|
+
top: 0,
|
|
33
|
+
left: '50%',
|
|
34
|
+
width: active ? CROSSHAIR_ACTIVE_THICKNESS : CROSSHAIR_THICKNESS,
|
|
35
|
+
height: '100%',
|
|
36
|
+
transform: 'translateX(-50%)',
|
|
37
|
+
backgroundColor: color,
|
|
38
|
+
boxShadow: shadow,
|
|
39
|
+
} })] }));
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=Crosshair.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Crosshair.js","sourceRoot":"","sources":["../../../../src/components/DevEnvironment/components/Crosshair.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,0BAA0B,EAC1B,eAAe,GAChB,MAAM,cAAc,CAAA;AAMrB,MAAM,cAAc,GAAkB;IACpC,QAAQ,EAAE,UAAU;IACpB,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,KAAK;IACX,SAAS,EAAE,uBAAuB;IAClC,aAAa,EAAE,MAAM;IACrB,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,cAAc;IACrB,MAAM,EAAE,cAAc;CACvB,CAAA;AAED,MAAM,QAAQ,GAAkB;IAC9B,QAAQ,EAAE,UAAU;IACpB,eAAe,EAAE,0BAA0B;IAC3C,UAAU,EACR,uFAAuF;CAC1F,CAAA;AAED,MAAM,UAAU,SAAS,CAAC,EAAE,MAAM,EAAS;IACzC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,0BAA0B,CAAA;IACnE,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,eAAe,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;IAE7D,OAAO,CACL,eAAK,KAAK,EAAE,cAAc,aACxB,cACE,KAAK,EAAE;oBACL,GAAG,QAAQ;oBACX,GAAG,EAAE,KAAK;oBACV,IAAI,EAAE,CAAC;oBACP,KAAK,EAAE,MAAM;oBACb,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,mBAAmB;oBACjE,SAAS,EAAE,kBAAkB;oBAC7B,eAAe,EAAE,KAAK;oBACtB,SAAS,EAAE,MAAM;iBAClB,GACD,EACF,cACE,KAAK,EAAE;oBACL,GAAG,QAAQ;oBACX,GAAG,EAAE,CAAC;oBACN,IAAI,EAAE,KAAK;oBACX,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,mBAAmB;oBAChE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,kBAAkB;oBAC7B,eAAe,EAAE,KAAK;oBACtB,SAAS,EAAE,MAAM;iBAClB,GACD,IACE,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
moveSpeed: number;
|
|
3
|
+
spawnPosition: [number, number, number];
|
|
4
|
+
respawnThreshold: number;
|
|
5
|
+
allowInfiniteJump: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function PhysicsPlayer({ moveSpeed, spawnPosition, respawnThreshold, allowInfiniteJump, }: Props): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=PhysicsPlayer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhysicsPlayer.d.ts","sourceRoot":"","sources":["../../../../src/components/DevEnvironment/components/PhysicsPlayer.tsx"],"names":[],"mappings":"AAmBA,UAAU,KAAK;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,gBAAgB,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,OAAO,CAAA;CAC3B;AAID,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,iBAAiB,GAClB,EAAE,KAAK,2CAsLP"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef } from 'react';
|
|
3
|
+
import { useFrame, useThree } from '@react-three/fiber';
|
|
4
|
+
import { CapsuleCollider, CuboidCollider, RigidBody, } from '@react-three/rapier';
|
|
5
|
+
import { Vector3 } from 'three';
|
|
6
|
+
import { LAYERS } from '../../../constants/layers';
|
|
7
|
+
import { PLAYER_HALF_HEIGHT, PLAYER_RADIUS, JUMP_VELOCITY, LINEAR_DAMPING, CAMERA_Y_OFFSET, } from '../constants';
|
|
8
|
+
const DUMMY_AVATAR_HEIGHT = 1.5;
|
|
9
|
+
export function PhysicsPlayer({ moveSpeed, spawnPosition, respawnThreshold, allowInfiniteJump, }) {
|
|
10
|
+
const rigidBodyRef = useRef(null);
|
|
11
|
+
const avatarGroupRef = useRef(null);
|
|
12
|
+
const headRef = useRef(null);
|
|
13
|
+
const pressedKeysRef = useRef(new Set());
|
|
14
|
+
const isGroundedRef = useRef(false);
|
|
15
|
+
const prevSpaceRef = useRef(false);
|
|
16
|
+
const forwardRef = useRef(new Vector3());
|
|
17
|
+
const rightRef = useRef(new Vector3());
|
|
18
|
+
const { camera } = useThree();
|
|
19
|
+
// アバターを三人称レイヤーに設定(一人称カメラには映らない)
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
avatarGroupRef.current?.traverse((obj) => {
|
|
22
|
+
obj.layers.set(LAYERS.THIRD_PERSON_ONLY);
|
|
23
|
+
});
|
|
24
|
+
}, []);
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
const shouldHandle = (event) => {
|
|
27
|
+
if (event.isComposing)
|
|
28
|
+
return false;
|
|
29
|
+
const target = event.target;
|
|
30
|
+
if (target.tagName === 'INPUT' ||
|
|
31
|
+
target.tagName === 'TEXTAREA' ||
|
|
32
|
+
target.isContentEditable)
|
|
33
|
+
return false;
|
|
34
|
+
return true;
|
|
35
|
+
};
|
|
36
|
+
const handleKeyDown = (event) => {
|
|
37
|
+
if (!shouldHandle(event))
|
|
38
|
+
return;
|
|
39
|
+
const code = event.code;
|
|
40
|
+
if (!pressedKeysRef.current.has(code)) {
|
|
41
|
+
pressedKeysRef.current.add(code);
|
|
42
|
+
}
|
|
43
|
+
if (event.key) {
|
|
44
|
+
pressedKeysRef.current.add(event.key);
|
|
45
|
+
}
|
|
46
|
+
event.preventDefault();
|
|
47
|
+
event.stopPropagation();
|
|
48
|
+
event.stopImmediatePropagation();
|
|
49
|
+
};
|
|
50
|
+
const handleKeyUp = (event) => {
|
|
51
|
+
if (!shouldHandle(event))
|
|
52
|
+
return;
|
|
53
|
+
pressedKeysRef.current.delete(event.code);
|
|
54
|
+
if (event.key) {
|
|
55
|
+
pressedKeysRef.current.delete(event.key);
|
|
56
|
+
}
|
|
57
|
+
event.preventDefault();
|
|
58
|
+
event.stopPropagation();
|
|
59
|
+
event.stopImmediatePropagation();
|
|
60
|
+
};
|
|
61
|
+
const options = { passive: false, capture: true };
|
|
62
|
+
window.addEventListener('keydown', handleKeyDown, options);
|
|
63
|
+
window.addEventListener('keyup', handleKeyUp, options);
|
|
64
|
+
return () => {
|
|
65
|
+
window.removeEventListener('keydown', handleKeyDown, options);
|
|
66
|
+
window.removeEventListener('keyup', handleKeyUp, options);
|
|
67
|
+
};
|
|
68
|
+
}, []);
|
|
69
|
+
useFrame(() => {
|
|
70
|
+
const rb = rigidBodyRef.current;
|
|
71
|
+
if (!rb)
|
|
72
|
+
return;
|
|
73
|
+
const keys = pressedKeysRef.current;
|
|
74
|
+
// --- 移動ベクトル算出 ---
|
|
75
|
+
const fwd = (keys.has('KeyW') || keys.has('w') || keys.has('ArrowUp') ? 1 : 0) +
|
|
76
|
+
(keys.has('KeyS') || keys.has('s') || keys.has('ArrowDown') ? -1 : 0);
|
|
77
|
+
const strafe = (keys.has('KeyD') || keys.has('d') || keys.has('ArrowRight') ? 1 : 0) +
|
|
78
|
+
(keys.has('KeyA') || keys.has('a') || keys.has('ArrowLeft') ? -1 : 0);
|
|
79
|
+
camera.getWorldDirection(forwardRef.current);
|
|
80
|
+
forwardRef.current.y = 0;
|
|
81
|
+
forwardRef.current.normalize();
|
|
82
|
+
rightRef.current.crossVectors(forwardRef.current, camera.up).normalize();
|
|
83
|
+
let moveX = forwardRef.current.x * fwd + rightRef.current.x * strafe;
|
|
84
|
+
let moveZ = forwardRef.current.z * fwd + rightRef.current.z * strafe;
|
|
85
|
+
const len = Math.sqrt(moveX * moveX + moveZ * moveZ);
|
|
86
|
+
if (len > 0) {
|
|
87
|
+
moveX = (moveX / len) * moveSpeed;
|
|
88
|
+
moveZ = (moveZ / len) * moveSpeed;
|
|
89
|
+
}
|
|
90
|
+
// --- ジャンプ ---
|
|
91
|
+
const currentVel = rb.linvel();
|
|
92
|
+
const spacePressed = keys.has('Space') || keys.has(' ') || keys.has('KeyE') || keys.has('e');
|
|
93
|
+
let vy = currentVel.y;
|
|
94
|
+
if (allowInfiniteJump) {
|
|
95
|
+
if (spacePressed) {
|
|
96
|
+
vy = JUMP_VELOCITY;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
const spaceEdge = spacePressed && !prevSpaceRef.current;
|
|
101
|
+
if (spaceEdge && isGroundedRef.current) {
|
|
102
|
+
vy = JUMP_VELOCITY;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
prevSpaceRef.current = spacePressed;
|
|
106
|
+
rb.setLinvel({ x: moveX, y: vy, z: moveZ }, true);
|
|
107
|
+
// --- カメラ位置同期 ---
|
|
108
|
+
const pos = rb.translation();
|
|
109
|
+
camera.position.set(pos.x, pos.y + CAMERA_Y_OFFSET, pos.z);
|
|
110
|
+
// --- DummyAvatar 位置同期 ---
|
|
111
|
+
if (avatarGroupRef.current) {
|
|
112
|
+
avatarGroupRef.current.position.set(pos.x, pos.y + CAMERA_Y_OFFSET, pos.z);
|
|
113
|
+
camera.getWorldDirection(forwardRef.current);
|
|
114
|
+
const yaw = -Math.atan2(forwardRef.current.x, -forwardRef.current.z);
|
|
115
|
+
const pitch = Math.asin(forwardRef.current.y);
|
|
116
|
+
avatarGroupRef.current.rotation.set(0, yaw, 0);
|
|
117
|
+
if (headRef.current) {
|
|
118
|
+
headRef.current.rotation.set(pitch, 0, 0);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// --- リスポーン ---
|
|
122
|
+
if (pos.y < respawnThreshold) {
|
|
123
|
+
rb.setTranslation({ x: spawnPosition[0], y: spawnPosition[1], z: spawnPosition[2] }, true);
|
|
124
|
+
rb.setLinvel({ x: 0, y: 0, z: 0 }, true);
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
return (_jsxs(_Fragment, { children: [_jsxs(RigidBody, { ref: rigidBodyRef, type: "dynamic", position: spawnPosition, lockRotations: true, friction: 0, restitution: 0, linearDamping: LINEAR_DAMPING, enabledRotations: [false, false, false], children: [_jsx(CapsuleCollider, { args: [PLAYER_HALF_HEIGHT, PLAYER_RADIUS] }), _jsx(CuboidCollider, { args: [PLAYER_RADIUS * 0.9, 0.05, PLAYER_RADIUS * 0.9], position: [0, -(PLAYER_HALF_HEIGHT + PLAYER_RADIUS), 0], sensor: true, onIntersectionEnter: () => {
|
|
128
|
+
isGroundedRef.current = true;
|
|
129
|
+
}, onIntersectionExit: () => {
|
|
130
|
+
isGroundedRef.current = false;
|
|
131
|
+
} })] }), _jsxs("group", { ref: avatarGroupRef, children: [_jsxs("mesh", { castShadow: true, ref: headRef, children: [_jsx("boxGeometry", { args: [0.2, 0.1, 0.2] }), _jsx("meshLambertMaterial", { color: "#ffcccc" })] }), _jsxs("mesh", { castShadow: true, position: [0, -DUMMY_AVATAR_HEIGHT * 0.55, 0], children: [_jsx("boxGeometry", { args: [0.3, DUMMY_AVATAR_HEIGHT, 0.1] }), _jsx("meshLambertMaterial", { color: "#ccffcc" })] })] })] }));
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=PhysicsPlayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhysicsPlayer.js","sourceRoot":"","sources":["../../../../src/components/DevEnvironment/components/PhysicsPlayer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PointerLockStatus.d.ts","sourceRoot":"","sources":["../../../../src/components/DevEnvironment/components/PointerLockStatus.tsx"],"names":[],"mappings":"AAEA,UAAU,KAAK;IACb,QAAQ,EAAE,OAAO,CAAA;CAClB;AAiDD,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,2CAwBpD"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
const containerStyle = {
|
|
3
|
+
position: 'absolute',
|
|
4
|
+
top: 20,
|
|
5
|
+
left: '50%',
|
|
6
|
+
transform: 'translateX(-50%)',
|
|
7
|
+
zIndex: 1001,
|
|
8
|
+
pointerEvents: 'none',
|
|
9
|
+
};
|
|
10
|
+
const statusBase = {
|
|
11
|
+
display: 'flex',
|
|
12
|
+
alignItems: 'center',
|
|
13
|
+
gap: 8,
|
|
14
|
+
padding: '8px 12px',
|
|
15
|
+
borderRadius: 6,
|
|
16
|
+
fontSize: 12,
|
|
17
|
+
border: '1px solid rgba(255, 255, 255, 0.1)',
|
|
18
|
+
transition: 'all 0.3s ease',
|
|
19
|
+
whiteSpace: 'nowrap',
|
|
20
|
+
fontFamily: 'system-ui, sans-serif',
|
|
21
|
+
fontWeight: 500,
|
|
22
|
+
};
|
|
23
|
+
const kbdStyle = {
|
|
24
|
+
display: 'inline-block',
|
|
25
|
+
padding: '2px 6px',
|
|
26
|
+
background: 'rgba(255, 255, 255, 0.1)',
|
|
27
|
+
border: '1px solid rgba(255, 255, 255, 0.2)',
|
|
28
|
+
borderRadius: 3,
|
|
29
|
+
fontFamily: 'monospace',
|
|
30
|
+
fontSize: 11,
|
|
31
|
+
fontWeight: 'bold',
|
|
32
|
+
margin: '0 2px',
|
|
33
|
+
};
|
|
34
|
+
const lockedStyle = {
|
|
35
|
+
background: 'rgba(34, 197, 94, 0.25)',
|
|
36
|
+
color: '#22c55e',
|
|
37
|
+
borderColor: 'rgba(34, 197, 94, 0.3)',
|
|
38
|
+
};
|
|
39
|
+
const unlockedStyle = {
|
|
40
|
+
background: 'rgba(249, 115, 22, 0.25)',
|
|
41
|
+
color: '#f97316',
|
|
42
|
+
borderColor: 'rgba(249, 115, 22, 0.3)',
|
|
43
|
+
};
|
|
44
|
+
export function PointerLockStatus({ isLocked }) {
|
|
45
|
+
return (_jsx("div", { style: containerStyle, children: _jsxs("div", { style: {
|
|
46
|
+
...statusBase,
|
|
47
|
+
...(isLocked ? lockedStyle : unlockedStyle),
|
|
48
|
+
}, children: [_jsx("span", { style: { fontSize: 14 }, children: isLocked ? '\u{1F512}' : '\u{1F5B1}\uFE0F' }), _jsx("span", { children: isLocked ? (_jsxs(_Fragment, { children: ["\u30DE\u30A6\u30B9\u30ED\u30C3\u30AF\u4E2D - ", _jsx("kbd", { style: kbdStyle, children: "ESC" }), "\u3067\u89E3\u9664"] })) : ('画面をクリックしてマウスロック開始') })] }) }));
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=PointerLockStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PointerLockStatus.js","sourceRoot":"","sources":["../../../../src/components/DevEnvironment/components/PointerLockStatus.tsx"],"names":[],"mappings":";AAMA,MAAM,cAAc,GAAkB;IACpC,QAAQ,EAAE,UAAU;IACpB,GAAG,EAAE,EAAE;IACP,IAAI,EAAE,KAAK;IACX,SAAS,EAAE,kBAAkB;IAC7B,MAAM,EAAE,IAAI;IACZ,aAAa,EAAE,MAAM;CACtB,CAAA;AAED,MAAM,UAAU,GAAkB;IAChC,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,QAAQ;IACpB,GAAG,EAAE,CAAC;IACN,OAAO,EAAE,UAAU;IACnB,YAAY,EAAE,CAAC;IACf,QAAQ,EAAE,EAAE;IACZ,MAAM,EAAE,oCAAoC;IAC5C,UAAU,EAAE,eAAe;IAC3B,UAAU,EAAE,QAAQ;IACpB,UAAU,EAAE,uBAAuB;IACnC,UAAU,EAAE,GAAG;CAChB,CAAA;AAED,MAAM,QAAQ,GAAkB;IAC9B,OAAO,EAAE,cAAc;IACvB,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,0BAA0B;IACtC,MAAM,EAAE,oCAAoC;IAC5C,YAAY,EAAE,CAAC;IACf,UAAU,EAAE,WAAW;IACvB,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,MAAM;IAClB,MAAM,EAAE,OAAO;CAChB,CAAA;AAED,MAAM,WAAW,GAAkB;IACjC,UAAU,EAAE,yBAAyB;IACrC,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,wBAAwB;CACtC,CAAA;AAED,MAAM,aAAa,GAAkB;IACnC,UAAU,EAAE,0BAA0B;IACtC,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,yBAAyB;CACvC,CAAA;AAED,MAAM,UAAU,iBAAiB,CAAC,EAAE,QAAQ,EAAS;IACnD,OAAO,CACL,cAAK,KAAK,EAAE,cAAc,YACxB,eACE,KAAK,EAAE;gBACL,GAAG,UAAU;gBACb,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC;aAC5C,aAED,eAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,YAC1B,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,GACtC,EACP,yBACG,QAAQ,CAAC,CAAC,CAAC,CACV,+EACY,cAAK,KAAK,EAAE,QAAQ,oBAAW,0BACxC,CACJ,CAAC,CAAC,CAAC,CACF,mBAAmB,CACpB,GACI,IACH,GACF,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 物理定数(xrift-frontend 準拠)
|
|
3
|
+
*/
|
|
4
|
+
export declare const PLAYER_HALF_HEIGHT = 0.4;
|
|
5
|
+
export declare const PLAYER_RADIUS = 0.4;
|
|
6
|
+
export declare const MOVE_SPEED = 5;
|
|
7
|
+
export declare const JUMP_VELOCITY = 4.5;
|
|
8
|
+
export declare const LINEAR_DAMPING = 0.2;
|
|
9
|
+
export declare const CAMERA_Y_OFFSET = 0.64;
|
|
10
|
+
export declare const RESPAWN_Y_THRESHOLD = -10;
|
|
11
|
+
export declare const DEFAULT_SPAWN_POSITION: [number, number, number];
|
|
12
|
+
export declare const DEFAULT_GRAVITY = 9.81;
|
|
13
|
+
export declare const DEFAULT_ALLOW_INFINITE_JUMP = true;
|
|
14
|
+
/**
|
|
15
|
+
* クロスヘアスタイル定数
|
|
16
|
+
*/
|
|
17
|
+
export declare const CROSSHAIR_SIZE = 20;
|
|
18
|
+
export declare const CROSSHAIR_THICKNESS = 2;
|
|
19
|
+
export declare const CROSSHAIR_ACTIVE_THICKNESS = 3;
|
|
20
|
+
export declare const HIGHLIGHT_COLOR = "#4dabf7";
|
|
21
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/components/DevEnvironment/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,kBAAkB,MAAM,CAAA;AACrC,eAAO,MAAM,aAAa,MAAM,CAAA;AAChC,eAAO,MAAM,UAAU,IAAM,CAAA;AAC7B,eAAO,MAAM,aAAa,MAAM,CAAA;AAChC,eAAO,MAAM,cAAc,MAAM,CAAA;AACjC,eAAO,MAAM,eAAe,OAAO,CAAA;AACnC,eAAO,MAAM,mBAAmB,MAAM,CAAA;AACtC,eAAO,MAAM,sBAAsB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAqB,CAAA;AACjF,eAAO,MAAM,eAAe,OAAO,CAAA;AACnC,eAAO,MAAM,2BAA2B,OAAO,CAAA;AAE/C;;GAEG;AACH,eAAO,MAAM,cAAc,KAAK,CAAA;AAChC,eAAO,MAAM,mBAAmB,IAAI,CAAA;AACpC,eAAO,MAAM,0BAA0B,IAAI,CAAA;AAC3C,eAAO,MAAM,eAAe,YAAY,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 物理定数(xrift-frontend 準拠)
|
|
3
|
+
*/
|
|
4
|
+
export const PLAYER_HALF_HEIGHT = 0.4;
|
|
5
|
+
export const PLAYER_RADIUS = 0.4;
|
|
6
|
+
export const MOVE_SPEED = 5.0;
|
|
7
|
+
export const JUMP_VELOCITY = 4.5;
|
|
8
|
+
export const LINEAR_DAMPING = 0.2;
|
|
9
|
+
export const CAMERA_Y_OFFSET = 0.64;
|
|
10
|
+
export const RESPAWN_Y_THRESHOLD = -10;
|
|
11
|
+
export const DEFAULT_SPAWN_POSITION = [0.11, 1.6, 7.59];
|
|
12
|
+
export const DEFAULT_GRAVITY = 9.81;
|
|
13
|
+
export const DEFAULT_ALLOW_INFINITE_JUMP = true;
|
|
14
|
+
/**
|
|
15
|
+
* クロスヘアスタイル定数
|
|
16
|
+
*/
|
|
17
|
+
export const CROSSHAIR_SIZE = 20;
|
|
18
|
+
export const CROSSHAIR_THICKNESS = 2;
|
|
19
|
+
export const CROSSHAIR_ACTIVE_THICKNESS = 3;
|
|
20
|
+
export const HIGHLIGHT_COLOR = '#4dabf7';
|
|
21
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/components/DevEnvironment/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAA;AACrC,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAA;AAChC,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAA;AAC7B,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAA;AAChC,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAA;AACjC,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAA;AACnC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAAE,CAAA;AACtC,MAAM,CAAC,MAAM,sBAAsB,GAA6B,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;AACjF,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAA;AACnC,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAA;AAE/C;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAA;AAChC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAA;AACpC,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAA;AAC3C,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Props } from './types';
|
|
2
|
+
export type DevEnvironmentProps = Props;
|
|
3
|
+
export declare function DevEnvironment({ children, camera, moveSpeed, shadows, spawnPosition, respawnThreshold, physicsConfig, }: Props): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/DevEnvironment/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAcpC,MAAM,MAAM,mBAAmB,GAAG,KAAK,CAAA;AAQvC,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,MAAM,EACN,SAAsB,EACtB,OAAc,EACd,aAAsC,EACtC,gBAAsC,EACtC,aAAa,GACd,EAAE,KAAK,2CAmDP"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
3
|
+
import { Canvas } from '@react-three/fiber';
|
|
4
|
+
import { PointerLockControls } from '@react-three/drei';
|
|
5
|
+
import { Physics } from '@react-three/rapier';
|
|
6
|
+
import { PCFShadowMap } from 'three';
|
|
7
|
+
import { DEFAULT_SPAWN_POSITION, DEFAULT_GRAVITY, DEFAULT_ALLOW_INFINITE_JUMP, MOVE_SPEED, RESPAWN_Y_THRESHOLD, } from './constants';
|
|
8
|
+
import { PhysicsPlayer } from './components/PhysicsPlayer';
|
|
9
|
+
import { CenterRaycaster } from './components/CenterRaycaster';
|
|
10
|
+
import { Crosshair } from './components/Crosshair';
|
|
11
|
+
import { PointerLockStatus } from './components/PointerLockStatus';
|
|
12
|
+
import { ControlsHelp } from './components/ControlsHelp';
|
|
13
|
+
const containerStyle = {
|
|
14
|
+
width: '100vw',
|
|
15
|
+
height: '100vh',
|
|
16
|
+
position: 'relative',
|
|
17
|
+
};
|
|
18
|
+
export function DevEnvironment({ children, camera, moveSpeed = MOVE_SPEED, shadows = true, spawnPosition = DEFAULT_SPAWN_POSITION, respawnThreshold = RESPAWN_Y_THRESHOLD, physicsConfig, }) {
|
|
19
|
+
const [isHit, setIsHit] = useState(false);
|
|
20
|
+
const [isPointerLocked, setIsPointerLocked] = useState(false);
|
|
21
|
+
const handleHitChange = useCallback((hit) => setIsHit(hit), []);
|
|
22
|
+
const gravity = physicsConfig?.gravity ?? DEFAULT_GRAVITY;
|
|
23
|
+
const allowInfiniteJump = physicsConfig?.allowInfiniteJump ?? DEFAULT_ALLOW_INFINITE_JUMP;
|
|
24
|
+
const cameraPosition = camera?.position ?? spawnPosition;
|
|
25
|
+
const cameraFov = camera?.fov ?? 50;
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
const handleChange = () => {
|
|
28
|
+
setIsPointerLocked(document.pointerLockElement !== null);
|
|
29
|
+
};
|
|
30
|
+
document.addEventListener('pointerlockchange', handleChange);
|
|
31
|
+
return () => {
|
|
32
|
+
document.removeEventListener('pointerlockchange', handleChange);
|
|
33
|
+
};
|
|
34
|
+
}, []);
|
|
35
|
+
return (_jsxs("div", { style: containerStyle, children: [_jsxs(Canvas, { shadows: shadows ? { type: PCFShadowMap } : false, camera: {
|
|
36
|
+
position: cameraPosition,
|
|
37
|
+
fov: cameraFov,
|
|
38
|
+
near: 0.01,
|
|
39
|
+
far: 1000,
|
|
40
|
+
}, gl: { preserveDrawingBuffer: true }, children: [_jsx(PointerLockControls, {}), _jsx(CenterRaycaster, { onHitChange: handleHitChange }), _jsxs(Physics, { gravity: [0, -gravity, 0], timeStep: "vary", children: [_jsx(PhysicsPlayer, { moveSpeed: moveSpeed, spawnPosition: spawnPosition, respawnThreshold: respawnThreshold, allowInfiniteJump: allowInfiniteJump }), children] })] }), _jsx(Crosshair, { active: isHit }), _jsx(PointerLockStatus, { isLocked: isPointerLocked }), _jsx(ControlsHelp, {})] }));
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/DevEnvironment/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface PhysicsConfig {
|
|
3
|
+
/** 重力加速度(デフォルト: 9.81) */
|
|
4
|
+
gravity?: number;
|
|
5
|
+
/** 無限ジャンプを許可するか(デフォルト: true) */
|
|
6
|
+
allowInfiniteJump?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface Props {
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
/** カメラ設定 */
|
|
11
|
+
camera?: {
|
|
12
|
+
position?: [number, number, number];
|
|
13
|
+
fov?: number;
|
|
14
|
+
};
|
|
15
|
+
/** 移動速度(デフォルト: 5.0) */
|
|
16
|
+
moveSpeed?: number;
|
|
17
|
+
/** シャドウを有効にするか(デフォルト: true) */
|
|
18
|
+
shadows?: boolean;
|
|
19
|
+
/** スポーン位置(デフォルト: [0.11, 1.6, 7.59]) */
|
|
20
|
+
spawnPosition?: [number, number, number];
|
|
21
|
+
/** リスポーンの高さ閾値(デフォルト: -10) */
|
|
22
|
+
respawnThreshold?: number;
|
|
23
|
+
/** 物理設定 */
|
|
24
|
+
physicsConfig?: PhysicsConfig;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/DevEnvironment/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gCAAgC;IAChC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC5B;AAED,MAAM,WAAW,KAAK;IACpB,QAAQ,EAAE,SAAS,CAAA;IACnB,YAAY;IACZ,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9D,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,uCAAuC;IACvC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACxC,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW;IACX,aAAa,CAAC,EAAE,aAAa,CAAA;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/DevEnvironment/types.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
CHANGED
|
@@ -15,8 +15,11 @@ export { SpawnPoint, type SpawnPointProps, } from './components/SpawnPoint';
|
|
|
15
15
|
export { TextInput, type TextInputProps, } from './components/TextInput';
|
|
16
16
|
export { TagBoard, type TagBoardProps, type Tag, } from './components/TagBoard';
|
|
17
17
|
export { Video180Sphere, type Video180SphereProps, } from './components/Video180Sphere';
|
|
18
|
+
export { DevEnvironment, type DevEnvironmentProps, } from './components/DevEnvironment';
|
|
19
|
+
export { type PhysicsConfig } from './components/DevEnvironment/types';
|
|
18
20
|
export { useInstanceState } from './hooks/useInstanceState';
|
|
19
21
|
export { useSpawnPoint } from './hooks/useSpawnPoint';
|
|
20
22
|
export { useWebAudioVolume } from './hooks/useWebAudioVolume';
|
|
23
|
+
export { LAYERS, type LayerName, type LayerNumber } from './constants/layers';
|
|
21
24
|
export { type PlayerMovement, type Position3D, type Rotation3D, type VRTrackingData, type VRMovementDirection, } from './types/movement';
|
|
22
25
|
//# sourceMappingURL=index.d.ts.map
|
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;AAGpC,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,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE7E,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAE9D,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,GAC7B,MAAM,iCAAiC,CAAA;AAExC,OAAO,EACL,UAAU,EACV,KAAK,eAAe,GACrB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,SAAS,EACT,KAAK,cAAc,GACpB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EACL,QAAQ,EACR,KAAK,aAAa,EAClB,KAAK,GAAG,GACT,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,GACzB,MAAM,6BAA6B,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;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;AAGpC,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,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE7E,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAE9D,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,GAC7B,MAAM,iCAAiC,CAAA;AAExC,OAAO,EACL,UAAU,EACV,KAAK,eAAe,GACrB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,SAAS,EACT,KAAK,cAAc,GACpB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EACL,QAAQ,EACR,KAAK,aAAa,EAClB,KAAK,GAAG,GACT,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,GACzB,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,GACzB,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,mCAAmC,CAAA;AAGtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAG7D,OAAO,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAG7E,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,mBAAmB,GACzB,MAAM,kBAAkB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -17,8 +17,11 @@ export { SpawnPoint, } from './components/SpawnPoint';
|
|
|
17
17
|
export { TextInput, } from './components/TextInput';
|
|
18
18
|
export { TagBoard, } from './components/TagBoard';
|
|
19
19
|
export { Video180Sphere, } from './components/Video180Sphere';
|
|
20
|
+
export { DevEnvironment, } from './components/DevEnvironment';
|
|
20
21
|
// Hooks
|
|
21
22
|
export { useInstanceState } from './hooks/useInstanceState';
|
|
22
23
|
export { useSpawnPoint } from './hooks/useSpawnPoint';
|
|
23
24
|
export { useWebAudioVolume } from './hooks/useWebAudioVolume';
|
|
25
|
+
// Constants
|
|
26
|
+
export { LAYERS } from './constants/layers';
|
|
24
27
|
//# 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,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,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,EAAE,WAAW,EAAyB,MAAM,0BAA0B,CAAA;AAE7E,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAE9D,OAAO,EACL,kBAAkB,GAEnB,MAAM,iCAAiC,CAAA;AAExC,OAAO,EACL,UAAU,GAEX,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,SAAS,GAEV,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EACL,QAAQ,GAGT,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,cAAc,GAEf,MAAM,6BAA6B,CAAA;AAEpC,QAAQ;AACR,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,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,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,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,EAAE,WAAW,EAAyB,MAAM,0BAA0B,CAAA;AAE7E,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAE9D,OAAO,EACL,kBAAkB,GAEnB,MAAM,iCAAiC,CAAA;AAExC,OAAO,EACL,UAAU,GAEX,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,SAAS,GAEV,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EACL,QAAQ,GAGT,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EACL,cAAc,GAEf,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EACL,cAAc,GAEf,MAAM,6BAA6B,CAAA;AAIpC,QAAQ;AACR,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAE7D,YAAY;AACZ,OAAO,EAAE,MAAM,EAAoC,MAAM,oBAAoB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xrift/world-components",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.23.0",
|
|
4
4
|
"description": "Shared components and utilities for Xrift worlds",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -33,11 +33,15 @@
|
|
|
33
33
|
"peerDependencies": {
|
|
34
34
|
"@react-three/drei": "^10.0.0",
|
|
35
35
|
"@react-three/fiber": "^9.0.0",
|
|
36
|
+
"@react-three/rapier": "^1.0.0",
|
|
36
37
|
"hls.js": "^1.5.0",
|
|
37
38
|
"react": "^18.0.0 || ^19.0.0",
|
|
38
39
|
"three": ">=0.176.0"
|
|
39
40
|
},
|
|
40
41
|
"peerDependenciesMeta": {
|
|
42
|
+
"@react-three/rapier": {
|
|
43
|
+
"optional": true
|
|
44
|
+
},
|
|
41
45
|
"hls.js": {
|
|
42
46
|
"optional": true
|
|
43
47
|
}
|
|
@@ -45,6 +49,7 @@
|
|
|
45
49
|
"devDependencies": {
|
|
46
50
|
"@react-three/drei": "^10.7.6",
|
|
47
51
|
"@react-three/fiber": "^9.4.0",
|
|
52
|
+
"@react-three/rapier": "^2.2.0",
|
|
48
53
|
"@types/react": "^18.3.12",
|
|
49
54
|
"@types/three": "^0.181.0",
|
|
50
55
|
"jsdom": "^28.0.0",
|