@cavegiant/cave-world-r3f 1.0.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/CHANGELOG.md +25 -0
- package/LICENSE +21 -0
- package/README.md +189 -0
- package/dist/core/connector-label/readiness.d.ts +11 -0
- package/dist/core/connector-label/readiness.d.ts.map +1 -0
- package/dist/core/connector-label/readiness.js +31 -0
- package/dist/core/connector-label/readiness.js.map +1 -0
- package/dist/core/connector-label/types.d.ts +64 -0
- package/dist/core/connector-label/types.d.ts.map +1 -0
- package/dist/core/connector-label/types.js +47 -0
- package/dist/core/connector-label/types.js.map +1 -0
- package/dist/core/context/cave-world-context.d.ts +96 -0
- package/dist/core/context/cave-world-context.d.ts.map +1 -0
- package/dist/core/context/cave-world-context.js +100 -0
- package/dist/core/context/cave-world-context.js.map +1 -0
- package/dist/core/errors.d.ts +34 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +17 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/events/event-bus.d.ts +122 -0
- package/dist/core/events/event-bus.d.ts.map +1 -0
- package/dist/core/events/event-bus.js +62 -0
- package/dist/core/events/event-bus.js.map +1 -0
- package/dist/core/hooks/use-cave-event.d.ts +13 -0
- package/dist/core/hooks/use-cave-event.d.ts.map +1 -0
- package/dist/core/hooks/use-cave-event.js +12 -0
- package/dist/core/hooks/use-cave-event.js.map +1 -0
- package/dist/core/i18n/messages.d.ts +82 -0
- package/dist/core/i18n/messages.d.ts.map +1 -0
- package/dist/core/i18n/messages.js +131 -0
- package/dist/core/i18n/messages.js.map +1 -0
- package/dist/core/index.d.ts +11 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +47 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/logging/logger.d.ts +29 -0
- package/dist/core/logging/logger.d.ts.map +1 -0
- package/dist/core/logging/logger.js +47 -0
- package/dist/core/logging/logger.js.map +1 -0
- package/dist/core/registry/component-registry.d.ts +41 -0
- package/dist/core/registry/component-registry.d.ts.map +1 -0
- package/dist/core/registry/component-registry.js +34 -0
- package/dist/core/registry/component-registry.js.map +1 -0
- package/dist/core/registry/object-registry.d.ts +38 -0
- package/dist/core/registry/object-registry.d.ts.map +1 -0
- package/dist/core/registry/object-registry.js +32 -0
- package/dist/core/registry/object-registry.js.map +1 -0
- package/dist/explore/cave-explore.d.ts +85 -0
- package/dist/explore/cave-explore.d.ts.map +1 -0
- package/dist/explore/cave-explore.js +204 -0
- package/dist/explore/cave-explore.js.map +1 -0
- package/dist/explore/cave-orbit-viewer.d.ts +76 -0
- package/dist/explore/cave-orbit-viewer.d.ts.map +1 -0
- package/dist/explore/cave-orbit-viewer.js +123 -0
- package/dist/explore/cave-orbit-viewer.js.map +1 -0
- package/dist/explore/characters/character-configs.d.ts +38 -0
- package/dist/explore/characters/character-configs.d.ts.map +1 -0
- package/dist/explore/characters/character-configs.js +45 -0
- package/dist/explore/characters/character-configs.js.map +1 -0
- package/dist/explore/characters/character-controls.d.ts +44 -0
- package/dist/explore/characters/character-controls.d.ts.map +1 -0
- package/dist/explore/characters/character-pose.d.ts +19 -0
- package/dist/explore/characters/character-pose.d.ts.map +1 -0
- package/dist/explore/characters/character-pose.js +13 -0
- package/dist/explore/characters/character-pose.js.map +1 -0
- package/dist/explore/characters/local-character-model.d.ts +53 -0
- package/dist/explore/characters/local-character-model.d.ts.map +1 -0
- package/dist/explore/characters/local-character-model.js +36 -0
- package/dist/explore/characters/local-character-model.js.map +1 -0
- package/dist/explore/characters/mixamo-style-bone-map.d.ts +9 -0
- package/dist/explore/characters/mixamo-style-bone-map.d.ts.map +1 -0
- package/dist/explore/characters/mixamo-style-bone-map.js +28 -0
- package/dist/explore/characters/mixamo-style-bone-map.js.map +1 -0
- package/dist/explore/characters/remote-character-controller.d.ts +38 -0
- package/dist/explore/characters/remote-character-controller.d.ts.map +1 -0
- package/dist/explore/characters/remote-character-controller.js +135 -0
- package/dist/explore/characters/remote-character-controller.js.map +1 -0
- package/dist/explore/characters/remote-character.d.ts +19 -0
- package/dist/explore/characters/remote-character.d.ts.map +1 -0
- package/dist/explore/characters/remote-character.js +63 -0
- package/dist/explore/characters/remote-character.js.map +1 -0
- package/dist/explore/connected-spaces-renderer.d.ts +16 -0
- package/dist/explore/connected-spaces-renderer.d.ts.map +1 -0
- package/dist/explore/connected-spaces-renderer.js +103 -0
- package/dist/explore/connected-spaces-renderer.js.map +1 -0
- package/dist/explore/hooks/use-action-shortcuts.d.ts +16 -0
- package/dist/explore/hooks/use-action-shortcuts.d.ts.map +1 -0
- package/dist/explore/hooks/use-action-shortcuts.js +23 -0
- package/dist/explore/hooks/use-action-shortcuts.js.map +1 -0
- package/dist/explore/hooks/use-active-space-notify.d.ts +11 -0
- package/dist/explore/hooks/use-active-space-notify.d.ts.map +1 -0
- package/dist/explore/hooks/use-active-space-notify.js +17 -0
- package/dist/explore/hooks/use-active-space-notify.js.map +1 -0
- package/dist/explore/hooks/use-character-sync.d.ts +46 -0
- package/dist/explore/hooks/use-character-sync.d.ts.map +1 -0
- package/dist/explore/hooks/use-character-sync.js +72 -0
- package/dist/explore/hooks/use-character-sync.js.map +1 -0
- package/dist/explore/hooks/use-connector-preloader.d.ts +20 -0
- package/dist/explore/hooks/use-connector-preloader.d.ts.map +1 -0
- package/dist/explore/hooks/use-connector-preloader.js +78 -0
- package/dist/explore/hooks/use-connector-preloader.js.map +1 -0
- package/dist/explore/hooks/use-connector-transitions.d.ts +31 -0
- package/dist/explore/hooks/use-connector-transitions.d.ts.map +1 -0
- package/dist/explore/hooks/use-connector-transitions.js +63 -0
- package/dist/explore/hooks/use-connector-transitions.js.map +1 -0
- package/dist/explore/hooks/use-explore-actions.d.ts +17 -0
- package/dist/explore/hooks/use-explore-actions.d.ts.map +1 -0
- package/dist/explore/hooks/use-explore-actions.js +134 -0
- package/dist/explore/hooks/use-explore-actions.js.map +1 -0
- package/dist/explore/hooks/use-load-error-notify.d.ts +11 -0
- package/dist/explore/hooks/use-load-error-notify.d.ts.map +1 -0
- package/dist/explore/hooks/use-load-error-notify.js +18 -0
- package/dist/explore/hooks/use-load-error-notify.js.map +1 -0
- package/dist/explore/hooks/use-primary-space-loader.d.ts +24 -0
- package/dist/explore/hooks/use-primary-space-loader.d.ts.map +1 -0
- package/dist/explore/hooks/use-primary-space-loader.js +29 -0
- package/dist/explore/hooks/use-primary-space-loader.js.map +1 -0
- package/dist/explore/index.d.ts +37 -0
- package/dist/explore/index.d.ts.map +1 -0
- package/dist/explore/index.js +107 -0
- package/dist/explore/index.js.map +1 -0
- package/dist/explore/loaders/cave-loader.d.ts +58 -0
- package/dist/explore/loaders/cave-loader.d.ts.map +1 -0
- package/dist/explore/loaders/cave-loader.js +79 -0
- package/dist/explore/loaders/cave-loader.js.map +1 -0
- package/dist/explore/math/space-transforms.d.ts +49 -0
- package/dist/explore/math/space-transforms.d.ts.map +1 -0
- package/dist/explore/math/space-transforms.js +54 -0
- package/dist/explore/math/space-transforms.js.map +1 -0
- package/dist/explore/overlays/action-bubble.d.ts +8 -0
- package/dist/explore/overlays/action-bubble.d.ts.map +1 -0
- package/dist/explore/overlays/action-bubble.js +18 -0
- package/dist/explore/overlays/action-bubble.js.map +1 -0
- package/dist/explore/overlays/action-panel.d.ts +12 -0
- package/dist/explore/overlays/action-panel.d.ts.map +1 -0
- package/dist/explore/overlays/action-panel.js +69 -0
- package/dist/explore/overlays/action-panel.js.map +1 -0
- package/dist/explore/overlays/connector-label-beacon.d.ts +11 -0
- package/dist/explore/overlays/connector-label-beacon.d.ts.map +1 -0
- package/dist/explore/overlays/connector-label-beacon.js +38 -0
- package/dist/explore/overlays/connector-label-beacon.js.map +1 -0
- package/dist/explore/overlays/connector-label-tag-shell.d.ts +16 -0
- package/dist/explore/overlays/connector-label-tag-shell.d.ts.map +1 -0
- package/dist/explore/overlays/connector-label-tag-shell.js +18 -0
- package/dist/explore/overlays/connector-label-tag-shell.js.map +1 -0
- package/dist/explore/overlays/detail-window.d.ts +9 -0
- package/dist/explore/overlays/detail-window.d.ts.map +1 -0
- package/dist/explore/overlays/detail-window.js +92 -0
- package/dist/explore/overlays/detail-window.js.map +1 -0
- package/dist/explore/overlays/explore-helper.d.ts +44 -0
- package/dist/explore/overlays/explore-helper.d.ts.map +1 -0
- package/dist/explore/overlays/explore-helper.js +57 -0
- package/dist/explore/overlays/explore-helper.js.map +1 -0
- package/dist/explore/overlays/icons.d.ts +16 -0
- package/dist/explore/overlays/icons.d.ts.map +1 -0
- package/dist/explore/overlays/icons.js +34 -0
- package/dist/explore/overlays/icons.js.map +1 -0
- package/dist/explore/overlays/space-load-error-overlay.d.ts +27 -0
- package/dist/explore/overlays/space-load-error-overlay.d.ts.map +1 -0
- package/dist/explore/overlays/space-load-error-overlay.js +24 -0
- package/dist/explore/overlays/space-load-error-overlay.js.map +1 -0
- package/dist/explore/services/websocket.service.d.ts +180 -0
- package/dist/explore/services/websocket.service.d.ts.map +1 -0
- package/dist/explore/services/websocket.service.js +187 -0
- package/dist/explore/services/websocket.service.js.map +1 -0
- package/dist/explore/simple-character.d.ts +46 -0
- package/dist/explore/simple-character.d.ts.map +1 -0
- package/dist/explore/simple-character.js +119 -0
- package/dist/explore/simple-character.js.map +1 -0
- package/dist/explore/stores/action-prompt.store.d.ts +27 -0
- package/dist/explore/stores/action-prompt.store.d.ts.map +1 -0
- package/dist/explore/stores/action-prompt.store.js +14 -0
- package/dist/explore/stores/action-prompt.store.js.map +1 -0
- package/dist/explore/stores/cave-explore.store.d.ts +77 -0
- package/dist/explore/stores/cave-explore.store.d.ts.map +1 -0
- package/dist/explore/stores/cave-explore.store.js +66 -0
- package/dist/explore/stores/cave-explore.store.js.map +1 -0
- package/dist/explore/stores/explore-context.d.ts +35 -0
- package/dist/explore/stores/explore-context.d.ts.map +1 -0
- package/dist/explore/stores/explore-context.js +43 -0
- package/dist/explore/stores/explore-context.js.map +1 -0
- package/dist/explore/styles/cave-world-css.d.ts +10 -0
- package/dist/explore/styles/cave-world-css.d.ts.map +1 -0
- package/dist/explore/styles/cave-world-css.js +935 -0
- package/dist/explore/styles/cave-world-css.js.map +1 -0
- package/dist/explore/styles/inject.d.ts +32 -0
- package/dist/explore/styles/inject.d.ts.map +1 -0
- package/dist/explore/styles/inject.js +40 -0
- package/dist/explore/styles/inject.js.map +1 -0
- package/dist/explore/utils/schedule-idle.d.ts +12 -0
- package/dist/explore/utils/schedule-idle.d.ts.map +1 -0
- package/dist/explore/utils/schedule-idle.js +16 -0
- package/dist/explore/utils/schedule-idle.js.map +1 -0
- package/dist/explore/viewer-shared.d.ts +56 -0
- package/dist/explore/viewer-shared.d.ts.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +78 -0
- package/dist/index.js.map +1 -0
- package/dist/space/cave-base-layer.d.ts +42 -0
- package/dist/space/cave-base-layer.d.ts.map +1 -0
- package/dist/space/cave-base-layer.js +221 -0
- package/dist/space/cave-base-layer.js.map +1 -0
- package/dist/space/cave-custom-layer.d.ts +12 -0
- package/dist/space/cave-custom-layer.d.ts.map +1 -0
- package/dist/space/cave-custom-layer.js +17 -0
- package/dist/space/cave-custom-layer.js.map +1 -0
- package/dist/space/cave-env.d.ts +6 -0
- package/dist/space/cave-env.d.ts.map +1 -0
- package/dist/space/cave-env.js +23 -0
- package/dist/space/cave-env.js.map +1 -0
- package/dist/space/cave-space.d.ts +46 -0
- package/dist/space/cave-space.d.ts.map +1 -0
- package/dist/space/cave-space.js +37 -0
- package/dist/space/cave-space.js.map +1 -0
- package/dist/space/connector-label-host.d.ts +21 -0
- package/dist/space/connector-label-host.d.ts.map +1 -0
- package/dist/space/connector-label-host.js +65 -0
- package/dist/space/connector-label-host.js.map +1 -0
- package/dist/space/index.d.ts +18 -0
- package/dist/space/index.d.ts.map +1 -0
- package/dist/space/index.js +47 -0
- package/dist/space/index.js.map +1 -0
- package/dist/space/objects/builtin-registrar.d.ts +17 -0
- package/dist/space/objects/builtin-registrar.d.ts.map +1 -0
- package/dist/space/objects/builtin-registrar.js +19 -0
- package/dist/space/objects/builtin-registrar.js.map +1 -0
- package/dist/space/objects/custom-object.d.ts +9 -0
- package/dist/space/objects/custom-object.d.ts.map +1 -0
- package/dist/space/objects/custom-object.js +56 -0
- package/dist/space/objects/custom-object.js.map +1 -0
- package/dist/space/objects/image-object.d.ts +7 -0
- package/dist/space/objects/image-object.d.ts.map +1 -0
- package/dist/space/objects/image-object.js +14 -0
- package/dist/space/objects/image-object.js.map +1 -0
- package/dist/space/objects/model-object/fbx-object.d.ts +8 -0
- package/dist/space/objects/model-object/fbx-object.d.ts.map +1 -0
- package/dist/space/objects/model-object/fbx-object.js +26 -0
- package/dist/space/objects/model-object/fbx-object.js.map +1 -0
- package/dist/space/objects/model-object/gltf-object.d.ts +9 -0
- package/dist/space/objects/model-object/gltf-object.d.ts.map +1 -0
- package/dist/space/objects/model-object/gltf-object.js +66 -0
- package/dist/space/objects/model-object/gltf-object.js.map +1 -0
- package/dist/space/objects/model-object/index.d.ts +9 -0
- package/dist/space/objects/model-object/index.d.ts.map +1 -0
- package/dist/space/objects/model-object/index.js +12 -0
- package/dist/space/objects/model-object/index.js.map +1 -0
- package/dist/space/objects/model-object/splat-object.d.ts +9 -0
- package/dist/space/objects/model-object/splat-object.d.ts.map +1 -0
- package/dist/space/objects/model-object/splat-object.js +19 -0
- package/dist/space/objects/model-object/splat-object.js.map +1 -0
- package/dist/space/objects/object-components/windows/index.d.ts +5 -0
- package/dist/space/objects/object-components/windows/index.d.ts.map +1 -0
- package/dist/space/objects/object-components/windows/index.js +20 -0
- package/dist/space/objects/object-components/windows/index.js.map +1 -0
- package/dist/space/objects/placeholder-object.d.ts +7 -0
- package/dist/space/objects/placeholder-object.d.ts.map +1 -0
- package/dist/space/objects/placeholder-object.js +12 -0
- package/dist/space/objects/placeholder-object.js.map +1 -0
- package/dist/space/objects/poi-object.d.ts +7 -0
- package/dist/space/objects/poi-object.d.ts.map +1 -0
- package/dist/space/objects/poi-object.js +38 -0
- package/dist/space/objects/poi-object.js.map +1 -0
- package/dist/space/objects/portal-object.d.ts +7 -0
- package/dist/space/objects/portal-object.d.ts.map +1 -0
- package/dist/space/objects/portal-object.js +84 -0
- package/dist/space/objects/portal-object.js.map +1 -0
- package/dist/space/objects/video-object.d.ts +7 -0
- package/dist/space/objects/video-object.d.ts.map +1 -0
- package/dist/space/objects/video-object.js +32 -0
- package/dist/space/objects/video-object.js.map +1 -0
- package/dist/space/polygon-boundary.d.ts +10 -0
- package/dist/space/polygon-boundary.d.ts.map +1 -0
- package/dist/space/polygon-boundary.js +205 -0
- package/dist/space/polygon-boundary.js.map +1 -0
- package/dist/space/splats/spark/robust-splat-mesh.d.ts +59 -0
- package/dist/space/splats/spark/robust-splat-mesh.d.ts.map +1 -0
- package/dist/space/splats/spark/robust-splat-mesh.js +105 -0
- package/dist/space/splats/spark/robust-splat-mesh.js.map +1 -0
- package/dist/space/splats/spark/splat-mesh.d.ts +5 -0
- package/dist/space/splats/spark/splat-mesh.d.ts.map +1 -0
- package/dist/space/splats/spark/splat-mesh.js +7 -0
- package/dist/space/splats/spark/splat-mesh.js.map +1 -0
- package/dist/space/splats/spark/splat-spread-reveal.d.ts +14 -0
- package/dist/space/splats/spark/splat-spread-reveal.d.ts.map +1 -0
- package/dist/space/splats/spark/splat-spread-reveal.js +45 -0
- package/dist/space/splats/spark/splat-spread-reveal.js.map +1 -0
- package/dist/space/utils/cave-world-player.d.ts +3 -0
- package/dist/space/utils/cave-world-player.d.ts.map +1 -0
- package/dist/space/utils/cave-world-player.js +5 -0
- package/dist/space/utils/cave-world-player.js.map +1 -0
- package/dist/space/utils/configure-canvas.d.ts +20 -0
- package/dist/space/utils/configure-canvas.d.ts.map +1 -0
- package/dist/space/utils/configure-canvas.js +12 -0
- package/dist/space/utils/configure-canvas.js.map +1 -0
- package/dist/space/utils/polygon-boundary-geometry.d.ts +8 -0
- package/dist/space/utils/polygon-boundary-geometry.d.ts.map +1 -0
- package/dist/space/utils/polygon-boundary-geometry.js +20 -0
- package/dist/space/utils/polygon-boundary-geometry.js.map +1 -0
- package/dist/space/utils/polygon-boundary-segments.d.ts +50 -0
- package/dist/space/utils/polygon-boundary-segments.d.ts.map +1 -0
- package/dist/space/utils/polygon-boundary-segments.js +64 -0
- package/dist/space/utils/polygon-boundary-segments.js.map +1 -0
- package/dist/space/utils/rotation-compat.d.ts +4 -0
- package/dist/space/utils/rotation-compat.d.ts.map +1 -0
- package/dist/space/utils/rotation-compat.js +9 -0
- package/dist/space/utils/rotation-compat.js.map +1 -0
- package/dist/space/utils/select-splat-level.d.ts +52 -0
- package/dist/space/utils/select-splat-level.d.ts.map +1 -0
- package/dist/space/utils/select-splat-level.js +43 -0
- package/dist/space/utils/select-splat-level.js.map +1 -0
- package/dist/space/utils/spark-performance.d.ts +10 -0
- package/dist/space/utils/spark-performance.d.ts.map +1 -0
- package/dist/space/utils/spark-performance.js +10 -0
- package/dist/space/utils/spark-performance.js.map +1 -0
- package/dist/space/utils/splat-collider-helper.d.ts +5 -0
- package/dist/space/utils/splat-collider-helper.d.ts.map +1 -0
- package/dist/space/utils/splat-collider-helper.js +162 -0
- package/dist/space/utils/splat-collider-helper.js.map +1 -0
- package/dist/space/utils/touch-primary-device.d.ts +16 -0
- package/dist/space/utils/touch-primary-device.d.ts.map +1 -0
- package/dist/space/utils/touch-primary-device.js +52 -0
- package/dist/space/utils/touch-primary-device.js.map +1 -0
- package/dist/space/utils/use-visibility-frameloop.d.ts +20 -0
- package/dist/space/utils/use-visibility-frameloop.d.ts.map +1 -0
- package/dist/space/utils/use-visibility-frameloop.js +18 -0
- package/dist/space/utils/use-visibility-frameloop.js.map +1 -0
- package/dist/styles.css +930 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/space-types.d.ts +404 -0
- package/dist/types/space-types.d.ts.map +1 -0
- package/doc/API.md +617 -0
- package/doc/ARCHITECTURE.md +264 -0
- package/doc/multiplayer-protocol.md +757 -0
- package/doc/scene-json-structure.md +567 -0
- package/package.json +131 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { CustomObject } from '../../../types/index.js';
|
|
2
|
+
import type { ThreeEvent } from '@react-three/fiber';
|
|
3
|
+
export default function FbxObject(props: {
|
|
4
|
+
object: CustomObject;
|
|
5
|
+
onClick?: (event: ThreeEvent<MouseEvent>) => void;
|
|
6
|
+
static?: boolean;
|
|
7
|
+
}): import("react").JSX.Element | null;
|
|
8
|
+
//# sourceMappingURL=fbx-object.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fbx-object.d.ts","sourceRoot":"","sources":["../../../../space/objects/model-object/fbx-object.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAElD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAIpD,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAK,EAAE;IACvC,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;IACjD,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,sCAkCA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as u } from "react/jsx-runtime";
|
|
2
|
+
import { useFBX as f, useAnimations as l, Clone as a } from "@react-three/drei";
|
|
3
|
+
import { useRef as m, useEffect as p } from "react";
|
|
4
|
+
function d(i) {
|
|
5
|
+
const { object: c, onClick: s } = i, r = m(null), e = f(c.model?.url || ""), t = l(e?.animations, r);
|
|
6
|
+
return p(() => {
|
|
7
|
+
if (i.static || !e || !t)
|
|
8
|
+
return;
|
|
9
|
+
const n = r.current, o = t.clips?.[0];
|
|
10
|
+
return o && n && t.mixer.clipAction(o, n).reset().fadeIn(0.2).play(), () => {
|
|
11
|
+
o && n && t.mixer.clipAction(o, n).fadeOut(0.2);
|
|
12
|
+
};
|
|
13
|
+
}, [t, t.clips, t.mixer, e, i.static]), e ? /* @__PURE__ */ u(
|
|
14
|
+
a,
|
|
15
|
+
{
|
|
16
|
+
ref: r,
|
|
17
|
+
object: e,
|
|
18
|
+
onPointerDown: s,
|
|
19
|
+
userData: { customObject: c }
|
|
20
|
+
}
|
|
21
|
+
) : null;
|
|
22
|
+
}
|
|
23
|
+
export {
|
|
24
|
+
d as default
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=fbx-object.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fbx-object.js","sources":["../../../../space/objects/model-object/fbx-object.tsx"],"sourcesContent":["import type { CustomObject } from '../../../types'\nimport { Clone, useAnimations, useFBX } from '@react-three/drei'\nimport type { ThreeEvent } from '@react-three/fiber'\nimport { useEffect, useRef } from 'react'\nimport type { Group } from 'three'\n\nexport default function FbxObject(props: {\n object: CustomObject\n onClick?: (event: ThreeEvent<MouseEvent>) => void\n static?: boolean\n}) {\n const { object, onClick } = props\n const group = useRef<Group>(null)\n const fbx = useFBX(object.model?.url || '')\n const animations = useAnimations(fbx?.animations, group)\n\n useEffect(() => {\n if (props.static || !fbx || !animations) {\n return\n }\n\n const root = group.current\n const clip = animations.clips?.[0]\n if (clip && root) {\n animations.mixer.clipAction(clip, root).reset().fadeIn(0.2).play()\n }\n\n return () => {\n if (clip && root) {\n animations.mixer.clipAction(clip, root).fadeOut(0.2)\n }\n }\n }, [animations, animations.clips, animations.mixer, fbx, props.static])\n\n if (!fbx) return null\n\n return (\n <Clone\n ref={group}\n object={fbx}\n onPointerDown={onClick}\n userData={{ customObject: object }}\n ></Clone>\n )\n}\n"],"names":["FbxObject","props","object","onClick","group","useRef","fbx","useFBX","animations","useAnimations","useEffect","root","clip","jsx","Clone"],"mappings":";;;AAMA,SAAwBA,EAAUC,GAI/B;AACD,QAAM,EAAE,QAAAC,GAAQ,SAAAC,EAAA,IAAYF,GACtBG,IAAQC,EAAc,IAAI,GAC1BC,IAAMC,EAAOL,EAAO,OAAO,OAAO,EAAE,GACpCM,IAAaC,EAAcH,GAAK,YAAYF,CAAK;AAoBvD,SAlBAM,EAAU,MAAM;AACd,QAAIT,EAAM,UAAU,CAACK,KAAO,CAACE;AAC3B;AAGF,UAAMG,IAAOP,EAAM,SACbQ,IAAOJ,EAAW,QAAQ,CAAC;AACjC,WAAII,KAAQD,KACVH,EAAW,MAAM,WAAWI,GAAMD,CAAI,EAAE,QAAQ,OAAO,GAAG,EAAE,KAAA,GAGvD,MAAM;AACX,MAAIC,KAAQD,KACVH,EAAW,MAAM,WAAWI,GAAMD,CAAI,EAAE,QAAQ,GAAG;AAAA,IAEvD;AAAA,EACF,GAAG,CAACH,GAAYA,EAAW,OAAOA,EAAW,OAAOF,GAAKL,EAAM,MAAM,CAAC,GAEjEK,IAGH,gBAAAO;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAKV;AAAA,MACL,QAAQE;AAAA,MACR,eAAeH;AAAA,MACf,UAAU,EAAE,cAAcD,EAAA;AAAA,IAAO;AAAA,EAAA,IAPpB;AAUnB;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CustomObject } from '../../../types/index.js';
|
|
2
|
+
import type { ThreeEvent } from '@react-three/fiber';
|
|
3
|
+
export default function GltfObject(props: {
|
|
4
|
+
object: CustomObject;
|
|
5
|
+
onClick?: (event: ThreeEvent<MouseEvent>) => void;
|
|
6
|
+
static?: boolean;
|
|
7
|
+
physics?: boolean;
|
|
8
|
+
}): import("react").JSX.Element | null;
|
|
9
|
+
//# sourceMappingURL=gltf-object.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gltf-object.d.ts","sourceRoot":"","sources":["../../../../space/objects/model-object/gltf-object.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAsDpD,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,KAAK,EAAE;IACxC,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;IACjD,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,sCAiDA"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { jsx as f } from "react/jsx-runtime";
|
|
2
|
+
import { useGLTF as b, useAnimations as h, Clone as l } from "@react-three/drei";
|
|
3
|
+
import { useRef as y, useEffect as g, useMemo as p } from "react";
|
|
4
|
+
import { Mesh as j } from "three";
|
|
5
|
+
import { BvhPhysicsBody as A } from "@react-three/viverse";
|
|
6
|
+
const O = (c) => {
|
|
7
|
+
const e = [];
|
|
8
|
+
if (c.traverse((s) => {
|
|
9
|
+
s instanceof j && e.push(s);
|
|
10
|
+
}), e.length === 0) return { isCompatible: !0 };
|
|
11
|
+
const m = Object.keys(e[0].geometry.attributes).sort();
|
|
12
|
+
for (let s = 0; s < e.length; s++) {
|
|
13
|
+
const i = e[s], o = Object.keys(i.geometry.attributes).sort();
|
|
14
|
+
if (JSON.stringify(m) !== JSON.stringify(o))
|
|
15
|
+
return {
|
|
16
|
+
isCompatible: !1
|
|
17
|
+
// reason: `Mesh [${mesh.name}] 属性不一致。期望: [${referenceAttrs}], 实际: [${currentAttrs}]`
|
|
18
|
+
};
|
|
19
|
+
const t = i.geometry;
|
|
20
|
+
if (t.morphAttributes && Object.keys(t.morphAttributes).length > 0) {
|
|
21
|
+
const r = t.attributes.position.count;
|
|
22
|
+
for (const a in t.morphAttributes)
|
|
23
|
+
if (t.morphAttributes[a].some(
|
|
24
|
+
(n) => n.count !== r
|
|
25
|
+
))
|
|
26
|
+
return { isCompatible: !1 };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return { isCompatible: !0 };
|
|
30
|
+
};
|
|
31
|
+
function D(c) {
|
|
32
|
+
const { object: e, onClick: m, physics: s } = c, i = y(null), o = b(e.model?.url || ""), t = h(o?.animations, i);
|
|
33
|
+
g(() => {
|
|
34
|
+
if (c.static || !o || !t)
|
|
35
|
+
return;
|
|
36
|
+
const u = i.current, n = t.clips?.[0];
|
|
37
|
+
return n && u && t.mixer.clipAction(n, u).reset().fadeIn(0.2).play(), () => {
|
|
38
|
+
n && u && t.mixer.clipAction(n, u).fadeOut(0.2);
|
|
39
|
+
};
|
|
40
|
+
}, [t, t.clips, t.mixer, o, c.static]);
|
|
41
|
+
const r = p(() => o.scene ? o.scene.clone() : null, [o.scene]), a = p(
|
|
42
|
+
() => r ? O(r).isCompatible : !1,
|
|
43
|
+
[r]
|
|
44
|
+
);
|
|
45
|
+
return r ? s && a ? /* @__PURE__ */ f(A, { children: /* @__PURE__ */ f(
|
|
46
|
+
l,
|
|
47
|
+
{
|
|
48
|
+
ref: i,
|
|
49
|
+
object: r,
|
|
50
|
+
onPointerDown: m,
|
|
51
|
+
userData: { customObject: e }
|
|
52
|
+
}
|
|
53
|
+
) }) : /* @__PURE__ */ f(
|
|
54
|
+
l,
|
|
55
|
+
{
|
|
56
|
+
ref: i,
|
|
57
|
+
object: r,
|
|
58
|
+
onPointerDown: m,
|
|
59
|
+
userData: { customObject: e }
|
|
60
|
+
}
|
|
61
|
+
) : null;
|
|
62
|
+
}
|
|
63
|
+
export {
|
|
64
|
+
D as default
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=gltf-object.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gltf-object.js","sources":["../../../../space/objects/model-object/gltf-object.tsx"],"sourcesContent":["import type { CustomObject } from '../../../types'\nimport type { ThreeEvent } from '@react-three/fiber'\nimport { Clone, useAnimations, useGLTF } from '@react-three/drei'\nimport { useEffect, useRef, useMemo } from 'react'\nimport type { Group } from 'three'\nimport { Mesh, type Object3D, type BufferAttribute } from 'three'\nimport { BvhPhysicsBody } from '@react-three/viverse'\n\n/**\n * 判断模型是否符合 BvhPhysicsBody 的合并要求\n * @returns { isCompatible: boolean, reason?: string }\n */\nconst validateForBvh = (scene: Group | Object3D) => {\n const meshes: Mesh[] = []\n scene.traverse((child) => {\n if (child instanceof Mesh) meshes.push(child)\n })\n\n if (meshes.length === 0) return { isCompatible: true }\n\n // 1. 获取第一个 Mesh 的属性列表作为基准\n const referenceAttrs = Object.keys(meshes[0].geometry.attributes).sort()\n\n for (let i = 0; i < meshes.length; i++) {\n const mesh = meshes[i]\n const currentAttrs = Object.keys(mesh.geometry.attributes).sort()\n\n // 2. 检查基础属性种类是否完全一致\n if (JSON.stringify(referenceAttrs) !== JSON.stringify(currentAttrs)) {\n return {\n isCompatible: false\n // reason: `Mesh [${mesh.name}] 属性不一致。期望: [${referenceAttrs}], 实际: [${currentAttrs}]`\n }\n }\n\n // 3. 检查 Morph Targets 是否合法\n const geom = mesh.geometry\n if (geom.morphAttributes && Object.keys(geom.morphAttributes).length > 0) {\n const baseCount = geom.attributes.position.count\n for (const key in geom.morphAttributes) {\n // @ts-expect-error: Three.js morphAttributes lacks a string index signature\n const hasMismatch = geom.morphAttributes[key].some(\n (attr: BufferAttribute) => attr.count !== baseCount\n )\n if (hasMismatch) {\n // reason: `Mesh [${mesh.name}] 的 MorphTarget 顶点数不匹配`\n return { isCompatible: false }\n }\n }\n }\n }\n\n return { isCompatible: true }\n}\n\nexport default function GltfObject(props: {\n object: CustomObject\n onClick?: (event: ThreeEvent<MouseEvent>) => void\n static?: boolean\n physics?: boolean\n}) {\n const { object, onClick, physics } = props\n const group = useRef<Group>(null)\n const gltf = useGLTF(object.model?.url || '')\n const animations = useAnimations(gltf?.animations, group)\n\n useEffect(() => {\n if (props.static || !gltf || !animations) {\n return\n }\n\n const root = group.current\n const clip = animations.clips?.[0]\n if (clip && root) {\n animations.mixer.clipAction(clip, root).reset().fadeIn(0.2).play()\n }\n\n return () => {\n if (clip && root) {\n animations.mixer.clipAction(clip, root).fadeOut(0.2)\n }\n }\n }, [animations, animations.clips, animations.mixer, gltf, props.static])\n\n const simplifiedScene = useMemo(() => (gltf.scene ? gltf.scene.clone() : null), [gltf.scene])\n const supportPhysics = useMemo(\n () => (simplifiedScene ? validateForBvh(simplifiedScene).isCompatible : false),\n [simplifiedScene]\n )\n\n if (!simplifiedScene) return null\n\n return physics && supportPhysics ? (\n <BvhPhysicsBody>\n <Clone\n ref={group}\n object={simplifiedScene}\n onPointerDown={onClick}\n userData={{ customObject: object }}\n ></Clone>\n </BvhPhysicsBody>\n ) : (\n <Clone\n ref={group}\n object={simplifiedScene}\n onPointerDown={onClick}\n userData={{ customObject: object }}\n ></Clone>\n )\n}\n"],"names":["validateForBvh","scene","meshes","child","Mesh","referenceAttrs","i","mesh","currentAttrs","geom","baseCount","key","attr","GltfObject","props","object","onClick","physics","group","useRef","gltf","useGLTF","animations","useAnimations","useEffect","root","clip","simplifiedScene","useMemo","supportPhysics","jsx","BvhPhysicsBody","Clone"],"mappings":";;;;;AAYA,MAAMA,IAAiB,CAACC,MAA4B;AAClD,QAAMC,IAAiB,CAAA;AAKvB,MAJAD,EAAM,SAAS,CAACE,MAAU;AACxB,IAAIA,aAAiBC,KAAMF,EAAO,KAAKC,CAAK;AAAA,EAC9C,CAAC,GAEGD,EAAO,WAAW,EAAG,QAAO,EAAE,cAAc,GAAA;AAGhD,QAAMG,IAAiB,OAAO,KAAKH,EAAO,CAAC,EAAE,SAAS,UAAU,EAAE,KAAA;AAElE,WAASI,IAAI,GAAGA,IAAIJ,EAAO,QAAQI,KAAK;AACtC,UAAMC,IAAOL,EAAOI,CAAC,GACfE,IAAe,OAAO,KAAKD,EAAK,SAAS,UAAU,EAAE,KAAA;AAG3D,QAAI,KAAK,UAAUF,CAAc,MAAM,KAAK,UAAUG,CAAY;AAChE,aAAO;AAAA,QACL,cAAc;AAAA;AAAA,MAAA;AAMlB,UAAMC,IAAOF,EAAK;AAClB,QAAIE,EAAK,mBAAmB,OAAO,KAAKA,EAAK,eAAe,EAAE,SAAS,GAAG;AACxE,YAAMC,IAAYD,EAAK,WAAW,SAAS;AAC3C,iBAAWE,KAAOF,EAAK;AAKrB,YAHoBA,EAAK,gBAAgBE,CAAG,EAAE;AAAA,UAC5C,CAACC,MAA0BA,EAAK,UAAUF;AAAA,QAAA;AAI1C,iBAAO,EAAE,cAAc,GAAA;AAAA,IAG7B;AAAA,EACF;AAEA,SAAO,EAAE,cAAc,GAAA;AACzB;AAEA,SAAwBG,EAAWC,GAKhC;AACD,QAAM,EAAE,QAAAC,GAAQ,SAAAC,GAAS,SAAAC,EAAA,IAAYH,GAC/BI,IAAQC,EAAc,IAAI,GAC1BC,IAAOC,EAAQN,EAAO,OAAO,OAAO,EAAE,GACtCO,IAAaC,EAAcH,GAAM,YAAYF,CAAK;AAExD,EAAAM,EAAU,MAAM;AACd,QAAIV,EAAM,UAAU,CAACM,KAAQ,CAACE;AAC5B;AAGF,UAAMG,IAAOP,EAAM,SACbQ,IAAOJ,EAAW,QAAQ,CAAC;AACjC,WAAII,KAAQD,KACVH,EAAW,MAAM,WAAWI,GAAMD,CAAI,EAAE,QAAQ,OAAO,GAAG,EAAE,KAAA,GAGvD,MAAM;AACX,MAAIC,KAAQD,KACVH,EAAW,MAAM,WAAWI,GAAMD,CAAI,EAAE,QAAQ,GAAG;AAAA,IAEvD;AAAA,EACF,GAAG,CAACH,GAAYA,EAAW,OAAOA,EAAW,OAAOF,GAAMN,EAAM,MAAM,CAAC;AAEvE,QAAMa,IAAkBC,EAAQ,MAAOR,EAAK,QAAQA,EAAK,MAAM,MAAA,IAAU,MAAO,CAACA,EAAK,KAAK,CAAC,GACtFS,IAAiBD;AAAA,IACrB,MAAOD,IAAkB3B,EAAe2B,CAAe,EAAE,eAAe;AAAA,IACxE,CAACA,CAAe;AAAA,EAAA;AAGlB,SAAKA,IAEEV,KAAWY,IAChB,gBAAAC,EAACC,GAAA,EACC,UAAA,gBAAAD;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,KAAKd;AAAA,MACL,QAAQS;AAAA,MACR,eAAeX;AAAA,MACf,UAAU,EAAE,cAAcD,EAAA;AAAA,IAAO;AAAA,EAAA,GAErC,IAEA,gBAAAe;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,KAAKd;AAAA,MACL,QAAQS;AAAA,MACR,eAAeX;AAAA,MACf,UAAU,EAAE,cAAcD,EAAA;AAAA,IAAO;AAAA,EAAA,IAhBR;AAmB/B;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CustomObject } from '../../../types/index.js';
|
|
2
|
+
import type { ThreeEvent } from '@react-three/fiber';
|
|
3
|
+
export default function ModelObject(props: {
|
|
4
|
+
object: CustomObject;
|
|
5
|
+
physics?: boolean;
|
|
6
|
+
static?: boolean;
|
|
7
|
+
onClick?: (event: ThreeEvent<MouseEvent>) => void;
|
|
8
|
+
}): import("react").JSX.Element | null;
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../space/objects/model-object/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAGlD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAGpD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,KAAK,EAAE;IACzC,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;CAClD,sCAoBA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import o from "./gltf-object.js";
|
|
3
|
+
import r from "./fbx-object.js";
|
|
4
|
+
import { BvhPhysicsBody as n } from "@react-three/viverse";
|
|
5
|
+
function d(i) {
|
|
6
|
+
const { object: t, physics: c, onClick: l } = i;
|
|
7
|
+
return t.model?.url ? t.model.url.endsWith(".gltf") || t.model.url.endsWith(".glb") ? /* @__PURE__ */ e(o, { object: t, onClick: l, static: i.static }) : t.model.url.endsWith(".fbx") ? c ? /* @__PURE__ */ e(n, { children: /* @__PURE__ */ e(r, { object: t, onClick: l, static: i.static }) }) : /* @__PURE__ */ e(r, { object: t, onClick: l, static: i.static }) : null : null;
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
d as default
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../space/objects/model-object/index.tsx"],"sourcesContent":["import type { CustomObject } from '../../../types'\nimport GltfObject from './gltf-object'\nimport FbxObject from './fbx-object'\nimport type { ThreeEvent } from '@react-three/fiber'\nimport { BvhPhysicsBody } from '@react-three/viverse'\n\nexport default function ModelObject(props: {\n object: CustomObject\n physics?: boolean\n static?: boolean\n onClick?: (event: ThreeEvent<MouseEvent>) => void\n}) {\n const { object, physics, onClick } = props\n\n if (!object.model?.url) return null\n\n if (object.model.url.endsWith('.gltf') || object.model.url.endsWith('.glb')) {\n return <GltfObject object={object} onClick={onClick} static={props.static} />\n }\n\n if (object.model.url.endsWith('.fbx')) {\n return physics ? (\n <BvhPhysicsBody>\n <FbxObject object={object} onClick={onClick} static={props.static} />\n </BvhPhysicsBody>\n ) : (\n <FbxObject object={object} onClick={onClick} static={props.static} />\n )\n }\n\n return null\n}\n"],"names":["ModelObject","props","object","physics","onClick","GltfObject","jsx","BvhPhysicsBody","FbxObject"],"mappings":";;;;AAMA,SAAwBA,EAAYC,GAKjC;AACD,QAAM,EAAE,QAAAC,GAAQ,SAAAC,GAAS,SAAAC,EAAA,IAAYH;AAErC,SAAKC,EAAO,OAAO,MAEfA,EAAO,MAAM,IAAI,SAAS,OAAO,KAAKA,EAAO,MAAM,IAAI,SAAS,MAAM,sBAChEG,GAAA,EAAW,QAAAH,GAAgB,SAAAE,GAAkB,QAAQH,EAAM,QAAQ,IAGzEC,EAAO,MAAM,IAAI,SAAS,MAAM,IAC3BC,IACL,gBAAAG,EAACC,GAAA,EACC,4BAACC,GAAA,EAAU,QAAAN,GAAgB,SAAAE,GAAkB,QAAQH,EAAM,OAAA,CAAQ,EAAA,CACrE,IAEA,gBAAAK,EAACE,GAAA,EAAU,QAAAN,GAAgB,SAAAE,GAAkB,QAAQH,EAAM,QAAQ,IAIhE,OAhBwB;AAiBjC;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CustomObject } from '../../../types/index.js';
|
|
2
|
+
import type { ThreeEvent } from '@react-three/fiber';
|
|
3
|
+
export default function SplatObject(props: {
|
|
4
|
+
object: CustomObject;
|
|
5
|
+
onClick?: (event: ThreeEvent<MouseEvent>) => void;
|
|
6
|
+
static?: boolean;
|
|
7
|
+
ref?: undefined;
|
|
8
|
+
}): import("react").JSX.Element | null;
|
|
9
|
+
//# sourceMappingURL=splat-object.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"splat-object.d.ts","sourceRoot":"","sources":["../../../../space/objects/model-object/splat-object.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAKpD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,KAAK,EAAE;IACzC,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;IACjD,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,SAAS,CAAA;CAChB,sCAcA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import l from "../../splats/spark/robust-splat-mesh.js";
|
|
3
|
+
const u = [1, 0, 0, 0];
|
|
4
|
+
function a(r) {
|
|
5
|
+
const { object: t, onClick: n } = r, o = t?.model?.url;
|
|
6
|
+
return o ? /* @__PURE__ */ e(
|
|
7
|
+
l,
|
|
8
|
+
{
|
|
9
|
+
url: o,
|
|
10
|
+
quaternion: u,
|
|
11
|
+
onPointerDown: n,
|
|
12
|
+
userData: { customObject: t }
|
|
13
|
+
}
|
|
14
|
+
) : null;
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
a as default
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=splat-object.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"splat-object.js","sources":["../../../../space/objects/model-object/splat-object.tsx"],"sourcesContent":["import type { CustomObject } from '../../../types'\nimport type { ThreeEvent } from '@react-three/fiber'\nimport RobustSplatMesh from '../../splats/spark/robust-splat-mesh'\n\nconst INIT_QUATERNION: [number, number, number, number] = [1, 0, 0, 0]\n\nexport default function SplatObject(props: {\n object: CustomObject\n onClick?: (event: ThreeEvent<MouseEvent>) => void\n static?: boolean\n ref?: undefined\n}) {\n const { object, onClick } = props\n const splatUrl = object?.model?.url\n\n if (!splatUrl) return null\n\n return (\n <RobustSplatMesh\n url={splatUrl}\n quaternion={INIT_QUATERNION}\n onPointerDown={onClick}\n userData={{ customObject: object }}\n />\n )\n}\n"],"names":["INIT_QUATERNION","SplatObject","props","object","onClick","splatUrl","jsx","RobustSplatMesh"],"mappings":";;AAIA,MAAMA,IAAoD,CAAC,GAAG,GAAG,GAAG,CAAC;AAErE,SAAwBC,EAAYC,GAKjC;AACD,QAAM,EAAE,QAAAC,GAAQ,SAAAC,EAAA,IAAYF,GACtBG,IAAWF,GAAQ,OAAO;AAEhC,SAAKE,IAGH,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAKF;AAAA,MACL,YAAYL;AAAA,MACZ,eAAeI;AAAA,MACf,UAAU,EAAE,cAAcD,EAAA;AAAA,IAAO;AAAA,EAAA,IAPf;AAUxB;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../space/objects/object-components/windows/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGrD,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,sCA6B3E"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as r, jsxs as c } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback as m } from "react";
|
|
3
|
+
import { BvhPhysicsSensor as l } from "@react-three/viverse";
|
|
4
|
+
import { useCaveEventBus as h, useCaveWorldStore as u } from "../../../../core/context/cave-world-context.js";
|
|
5
|
+
function C({ object: e }) {
|
|
6
|
+
const t = h(), s = u((n) => n.setActiveObject), o = e.components?.Window?.contents, i = Array.isArray(o) && o.length > 0, a = m(
|
|
7
|
+
(n) => {
|
|
8
|
+
n ? (s(e), t.emit("object:enter", { object: e })) : t.emit("object:leave", { object: e });
|
|
9
|
+
},
|
|
10
|
+
[t, e, s]
|
|
11
|
+
);
|
|
12
|
+
return i ? /* @__PURE__ */ r(l, { onIntersectedChanged: a, children: /* @__PURE__ */ c("mesh", { children: [
|
|
13
|
+
/* @__PURE__ */ r("boxGeometry", {}),
|
|
14
|
+
/* @__PURE__ */ r("meshBasicMaterial", { transparent: !0, depthWrite: !1, opacity: 0 })
|
|
15
|
+
] }) }) : null;
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
C as default
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../space/objects/object-components/windows/index.tsx"],"sourcesContent":["import { useCallback } from 'react'\nimport { BvhPhysicsSensor } from '@react-three/viverse'\nimport type { CustomObject } from '../../../../types'\nimport { useCaveEventBus, useCaveWorldStore } from '../../../../core'\n\nexport default function WindowComponent({ object }: { object: CustomObject }) {\n const eventBus = useCaveEventBus()\n const setActiveObject = useCaveWorldStore((s) => s.setActiveObject)\n\n const contents = object.components?.Window?.contents\n const hasContent = Array.isArray(contents) && contents.length > 0\n\n const handleProximityChange = useCallback(\n (intersected: boolean) => {\n if (intersected) {\n setActiveObject(object)\n eventBus.emit('object:enter', { object })\n } else {\n eventBus.emit('object:leave', { object })\n }\n },\n [eventBus, object, setActiveObject]\n )\n\n if (!hasContent) return null\n\n return (\n <BvhPhysicsSensor onIntersectedChanged={handleProximityChange}>\n <mesh>\n <boxGeometry />\n <meshBasicMaterial transparent depthWrite={false} opacity={0} />\n </mesh>\n </BvhPhysicsSensor>\n )\n}\n"],"names":["WindowComponent","object","eventBus","useCaveEventBus","setActiveObject","useCaveWorldStore","s","contents","hasContent","handleProximityChange","useCallback","intersected","jsx","BvhPhysicsSensor"],"mappings":";;;;AAKA,SAAwBA,EAAgB,EAAE,QAAAC,KAAoC;AAC5E,QAAMC,IAAWC,EAAA,GACXC,IAAkBC,EAAkB,CAACC,MAAMA,EAAE,eAAe,GAE5DC,IAAWN,EAAO,YAAY,QAAQ,UACtCO,IAAa,MAAM,QAAQD,CAAQ,KAAKA,EAAS,SAAS,GAE1DE,IAAwBC;AAAA,IAC5B,CAACC,MAAyB;AACxB,MAAIA,KACFP,EAAgBH,CAAM,GACtBC,EAAS,KAAK,gBAAgB,EAAE,QAAAD,EAAA,CAAQ,KAExCC,EAAS,KAAK,gBAAgB,EAAE,QAAAD,EAAA,CAAQ;AAAA,IAE5C;AAAA,IACA,CAACC,GAAUD,GAAQG,CAAe;AAAA,EAAA;AAGpC,SAAKI,IAGH,gBAAAI,EAACC,GAAA,EAAiB,sBAAsBJ,GACtC,4BAAC,QAAA,EACC,UAAA;AAAA,IAAA,gBAAAG,EAAC,eAAA,EAAY;AAAA,sBACZ,qBAAA,EAAkB,aAAW,IAAC,YAAY,IAAO,SAAS,EAAA,CAAG;AAAA,EAAA,EAAA,CAChE,EAAA,CACF,IARsB;AAU1B;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CustomObject } from '../../types/index.js';
|
|
2
|
+
import type { ThreeEvent } from '@react-three/fiber';
|
|
3
|
+
export default function PlaceholderObject(props: {
|
|
4
|
+
object: CustomObject;
|
|
5
|
+
onClick?: (event: ThreeEvent<MouseEvent>) => void;
|
|
6
|
+
}): import("react").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=placeholder-object.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placeholder-object.d.ts","sourceRoot":"","sources":["../../../space/objects/placeholder-object.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAEpD,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,KAAK,EAAE;IAC/C,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;CAClD,+BAQA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsxs as s, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
function a(r) {
|
|
3
|
+
const { object: t, onClick: o } = r;
|
|
4
|
+
return /* @__PURE__ */ s("mesh", { onClick: o, userData: { customObject: t }, children: [
|
|
5
|
+
/* @__PURE__ */ e("boxGeometry", { args: [1, 1, 1] }),
|
|
6
|
+
/* @__PURE__ */ e("meshBasicMaterial", { color: "red", visible: !0 })
|
|
7
|
+
] });
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
a as default
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=placeholder-object.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placeholder-object.js","sources":["../../../space/objects/placeholder-object.tsx"],"sourcesContent":["import type { CustomObject } from '../../types'\nimport type { ThreeEvent } from '@react-three/fiber'\n\nexport default function PlaceholderObject(props: {\n object: CustomObject\n onClick?: (event: ThreeEvent<MouseEvent>) => void\n}) {\n const { object, onClick } = props\n return (\n <mesh onClick={onClick} userData={{ customObject: object }}>\n <boxGeometry args={[1, 1, 1]} />\n <meshBasicMaterial color=\"red\" visible={true} />\n </mesh>\n )\n}\n"],"names":["PlaceholderObject","props","object","onClick","jsx"],"mappings":";AAGA,SAAwBA,EAAkBC,GAGvC;AACD,QAAM,EAAE,QAAAC,GAAQ,SAAAC,EAAA,IAAYF;AAC5B,2BACG,QAAA,EAAK,SAAAE,GAAkB,UAAU,EAAE,cAAcD,KAChD,UAAA;AAAA,IAAA,gBAAAE,EAAC,iBAAY,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG;AAAA,IAC9B,gBAAAA,EAAC,qBAAA,EAAkB,OAAM,OAAM,SAAS,GAAA,CAAM;AAAA,EAAA,GAChD;AAEJ;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CustomObject } from '../../types/index.js';
|
|
2
|
+
import type { ThreeEvent } from '@react-three/fiber';
|
|
3
|
+
export default function PoiObject(props: {
|
|
4
|
+
object: CustomObject;
|
|
5
|
+
onClick?: (event: ThreeEvent<MouseEvent>) => void;
|
|
6
|
+
}): import("react").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=poi-object.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poi-object.d.ts","sourceRoot":"","sources":["../../../space/objects/poi-object.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAIpD,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAK,EAAE;IACvC,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;CAClD,+BAiCA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsxs as r, Fragment as i, jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import { Billboard as n, Text as l } from "@react-three/drei";
|
|
3
|
+
import { useCaveWorldMessages as m } from "../../core/context/cave-world-context.js";
|
|
4
|
+
function f(s) {
|
|
5
|
+
const { object: e, onClick: o } = s, a = m(), c = e?.text?.content || a.poi.defaultLabel;
|
|
6
|
+
return /* @__PURE__ */ r(i, { children: [
|
|
7
|
+
/* @__PURE__ */ t("mesh", { visible: !1, children: /* @__PURE__ */ t("circleGeometry", { args: [e?.radius || 3, 32] }) }),
|
|
8
|
+
/* @__PURE__ */ r(n, { children: [
|
|
9
|
+
/* @__PURE__ */ r("mesh", { castShadow: !0, receiveShadow: !0, onClick: o, userData: { customObject: e }, children: [
|
|
10
|
+
/* @__PURE__ */ t("circleGeometry", { args: [0.2, 32] }),
|
|
11
|
+
/* @__PURE__ */ t(
|
|
12
|
+
"meshStandardMaterial",
|
|
13
|
+
{
|
|
14
|
+
color: e.text?.color,
|
|
15
|
+
transparent: !0,
|
|
16
|
+
opacity: 1,
|
|
17
|
+
roughness: 0.5,
|
|
18
|
+
metalness: 0.3
|
|
19
|
+
}
|
|
20
|
+
)
|
|
21
|
+
] }),
|
|
22
|
+
/* @__PURE__ */ t(
|
|
23
|
+
l,
|
|
24
|
+
{
|
|
25
|
+
onClick: o,
|
|
26
|
+
fontSize: e?.text?.fontSize || 0.2,
|
|
27
|
+
userData: { customObject: e },
|
|
28
|
+
position: [0, -0.2 - 0.1 - 0.05, 0],
|
|
29
|
+
children: c
|
|
30
|
+
}
|
|
31
|
+
)
|
|
32
|
+
] })
|
|
33
|
+
] });
|
|
34
|
+
}
|
|
35
|
+
export {
|
|
36
|
+
f as default
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=poi-object.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poi-object.js","sources":["../../../space/objects/poi-object.tsx"],"sourcesContent":["import type { CustomObject } from '../../types'\nimport type { ThreeEvent } from '@react-three/fiber'\nimport { Billboard, Text as DreiText } from '@react-three/drei'\nimport { useCaveWorldMessages } from '../../core'\n\nexport default function PoiObject(props: {\n object: CustomObject\n onClick?: (event: ThreeEvent<MouseEvent>) => void\n}) {\n const { object, onClick } = props\n const messages = useCaveWorldMessages()\n const content = object?.text?.content || messages.poi.defaultLabel\n\n return (\n <>\n <mesh visible={false}>\n <circleGeometry args={[object?.radius || 3, 32]} />\n </mesh>\n\n <Billboard>\n <mesh castShadow receiveShadow onClick={onClick} userData={{ customObject: object }}>\n <circleGeometry args={[0.2, 32]} />\n <meshStandardMaterial\n color={object.text?.color}\n transparent\n opacity={1}\n roughness={0.5}\n metalness={0.3}\n />\n </mesh>\n <DreiText\n onClick={onClick}\n fontSize={object?.text?.fontSize || 0.2}\n userData={{ customObject: object }}\n position={[0, -0.2 - 0.1 - 0.05, 0]}\n >\n {content}\n </DreiText>\n </Billboard>\n </>\n )\n}\n"],"names":["PoiObject","props","object","onClick","messages","useCaveWorldMessages","content","jsxs","Fragment","jsx","Billboard","DreiText"],"mappings":";;;AAKA,SAAwBA,EAAUC,GAG/B;AACD,QAAM,EAAE,QAAAC,GAAQ,SAAAC,EAAA,IAAYF,GACtBG,IAAWC,EAAA,GACXC,IAAUJ,GAAQ,MAAM,WAAWE,EAAS,IAAI;AAEtD,SACE,gBAAAG,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAC,EAAC,QAAA,EAAK,SAAS,IACb,UAAA,gBAAAA,EAAC,kBAAA,EAAe,MAAM,CAACP,GAAQ,UAAU,GAAG,EAAE,EAAA,CAAG,GACnD;AAAA,sBAECQ,GAAA,EACC,UAAA;AAAA,MAAA,gBAAAH,EAAC,QAAA,EAAK,YAAU,IAAC,eAAa,IAAC,SAAAJ,GAAkB,UAAU,EAAE,cAAcD,EAAA,GACzE,UAAA;AAAA,QAAA,gBAAAO,EAAC,kBAAA,EAAe,MAAM,CAAC,KAAK,EAAE,GAAG;AAAA,QACjC,gBAAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAOP,EAAO,MAAM;AAAA,YACpB,aAAW;AAAA,YACX,SAAS;AAAA,YACT,WAAW;AAAA,YACX,WAAW;AAAA,UAAA;AAAA,QAAA;AAAA,MACb,GACF;AAAA,MACA,gBAAAO;AAAA,QAACE;AAAAA,QAAA;AAAA,UACC,SAAAR;AAAA,UACA,UAAUD,GAAQ,MAAM,YAAY;AAAA,UACpC,UAAU,EAAE,cAAcA,EAAA;AAAA,UAC1B,UAAU,CAAC,GAAG,OAAO,MAAM,MAAM,CAAC;AAAA,UAEjC,UAAAI;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CustomObject } from '../../types/index.js';
|
|
2
|
+
import type { ThreeEvent } from '@react-three/fiber';
|
|
3
|
+
export default function PortalObject(props: {
|
|
4
|
+
object: CustomObject;
|
|
5
|
+
onClick?: (event: ThreeEvent<MouseEvent>) => void;
|
|
6
|
+
}): import("react").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=portal-object.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portal-object.d.ts","sourceRoot":"","sources":["../../../space/objects/portal-object.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAiFpD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,KAAK,EAAE;IAC1C,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;CAClD,+BAsBA"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { jsx as o, jsxs as a } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback as d, useRef as l } from "react";
|
|
3
|
+
import { BvhPhysicsSensor as c } from "@react-three/viverse";
|
|
4
|
+
import { useFrame as h } from "@react-three/fiber";
|
|
5
|
+
import { Text as m } from "@react-three/drei";
|
|
6
|
+
import { ShaderMaterial as u, DoubleSide as v } from "three";
|
|
7
|
+
import { useCaveEventBus as f } from "../../core/context/cave-world-context.js";
|
|
8
|
+
const p = new u({
|
|
9
|
+
uniforms: {},
|
|
10
|
+
vertexShader: `
|
|
11
|
+
varying vec2 vUv;
|
|
12
|
+
void main() {
|
|
13
|
+
vUv = uv;
|
|
14
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
15
|
+
}
|
|
16
|
+
`,
|
|
17
|
+
fragmentShader: `
|
|
18
|
+
varying vec2 vUv;
|
|
19
|
+
void main() {
|
|
20
|
+
vec2 center = vec2(0.5, 0.5);
|
|
21
|
+
float dist = distance(vUv, center);
|
|
22
|
+
float borderWidth = 0.02;
|
|
23
|
+
float radius = 0.5;
|
|
24
|
+
if (dist > radius - borderWidth) {
|
|
25
|
+
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
|
|
26
|
+
} else {
|
|
27
|
+
vec3 topBlue = vec3(0.290, 0.600, 0.886);
|
|
28
|
+
vec3 bottomLightBlue = vec3(0.867, 0.902, 0.961);
|
|
29
|
+
float gradientFactor = vUv.y;
|
|
30
|
+
vec3 baseColor = mix(bottomLightBlue, topBlue, gradientFactor);
|
|
31
|
+
float shadowWidth = 0.05;
|
|
32
|
+
float shadowStart = radius - borderWidth - shadowWidth;
|
|
33
|
+
float shadowEnd = radius - borderWidth;
|
|
34
|
+
float shadowIntensity = 0.0;
|
|
35
|
+
if (dist > shadowStart) {
|
|
36
|
+
shadowIntensity = smoothstep(shadowStart, shadowEnd, dist);
|
|
37
|
+
shadowIntensity *= 0.15;
|
|
38
|
+
}
|
|
39
|
+
vec3 finalColor = baseColor * (1.0 - shadowIntensity);
|
|
40
|
+
gl_FragColor = vec4(finalColor, 1.0);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
`,
|
|
44
|
+
side: v
|
|
45
|
+
});
|
|
46
|
+
function g(t, e = 10) {
|
|
47
|
+
return t ? t.length <= e ? t : t.substring(0, e) + "..." : "";
|
|
48
|
+
}
|
|
49
|
+
function b({ text: t }) {
|
|
50
|
+
const e = l(null), i = t ? g(t, 10) : "";
|
|
51
|
+
return h((r) => {
|
|
52
|
+
e.current?.lookAt(r.camera.position);
|
|
53
|
+
}), /* @__PURE__ */ a("group", { ref: e, children: [
|
|
54
|
+
/* @__PURE__ */ a("mesh", { position: [0, 0, 0.01], children: [
|
|
55
|
+
/* @__PURE__ */ o("circleGeometry", { args: [1, 128] }),
|
|
56
|
+
/* @__PURE__ */ o("primitive", { object: p, attach: "material" })
|
|
57
|
+
] }),
|
|
58
|
+
i && /* @__PURE__ */ o(
|
|
59
|
+
m,
|
|
60
|
+
{
|
|
61
|
+
position: [0, 0, 0.02],
|
|
62
|
+
fontSize: 0.3,
|
|
63
|
+
color: "#333333",
|
|
64
|
+
anchorX: "center",
|
|
65
|
+
anchorY: "middle",
|
|
66
|
+
maxWidth: 1.5,
|
|
67
|
+
children: i
|
|
68
|
+
}
|
|
69
|
+
)
|
|
70
|
+
] });
|
|
71
|
+
}
|
|
72
|
+
function W(t) {
|
|
73
|
+
const { object: e, onClick: i } = t, r = f(), n = d(
|
|
74
|
+
(s) => {
|
|
75
|
+
s ? r.emit("object:enter", { object: e }) : r.emit("object:leave", { object: e });
|
|
76
|
+
},
|
|
77
|
+
[r, e]
|
|
78
|
+
);
|
|
79
|
+
return /* @__PURE__ */ o(c, { onIntersectedChanged: n, children: /* @__PURE__ */ o("group", { onClick: i, userData: { customObject: e }, children: /* @__PURE__ */ o(b, { text: e.portal?.url || e.portal?.internalScene?.name }) }) });
|
|
80
|
+
}
|
|
81
|
+
export {
|
|
82
|
+
W as default
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=portal-object.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portal-object.js","sources":["../../../space/objects/portal-object.tsx"],"sourcesContent":["import { useRef, useCallback } from 'react'\nimport { BvhPhysicsSensor } from '@react-three/viverse'\nimport type { CustomObject } from '../../types'\nimport type { ThreeEvent } from '@react-three/fiber'\nimport { useFrame } from '@react-three/fiber'\nimport { Text } from '@react-three/drei'\nimport type { Group } from 'three'\nimport { DoubleSide, ShaderMaterial } from 'three'\nimport { useCaveEventBus } from '../../core'\n\nconst portalGradientMaterial = new ShaderMaterial({\n uniforms: {},\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n varying vec2 vUv;\n void main() {\n vec2 center = vec2(0.5, 0.5);\n float dist = distance(vUv, center);\n float borderWidth = 0.02;\n float radius = 0.5;\n if (dist > radius - borderWidth) {\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n } else {\n vec3 topBlue = vec3(0.290, 0.600, 0.886);\n vec3 bottomLightBlue = vec3(0.867, 0.902, 0.961);\n float gradientFactor = vUv.y;\n vec3 baseColor = mix(bottomLightBlue, topBlue, gradientFactor);\n float shadowWidth = 0.05;\n float shadowStart = radius - borderWidth - shadowWidth;\n float shadowEnd = radius - borderWidth;\n float shadowIntensity = 0.0;\n if (dist > shadowStart) {\n shadowIntensity = smoothstep(shadowStart, shadowEnd, dist);\n shadowIntensity *= 0.15;\n }\n vec3 finalColor = baseColor * (1.0 - shadowIntensity);\n gl_FragColor = vec4(finalColor, 1.0);\n }\n }\n `,\n side: DoubleSide\n})\n\nfunction truncateText(text: string, maxLength: number = 10): string {\n if (!text) return ''\n return text.length <= maxLength ? text : text.substring(0, maxLength) + '...'\n}\n\nfunction PortalMarker({ text }: { text?: string }) {\n const groupRef = useRef<Group>(null)\n const displayText = text ? truncateText(text, 10) : ''\n\n useFrame((state) => {\n groupRef.current?.lookAt(state.camera.position)\n })\n\n return (\n <group ref={groupRef}>\n <mesh position={[0, 0, 0.01]}>\n <circleGeometry args={[1, 128]} />\n <primitive object={portalGradientMaterial} attach=\"material\" />\n </mesh>\n {displayText && (\n <Text\n position={[0, 0, 0.02]}\n fontSize={0.3}\n color=\"#333333\"\n anchorX=\"center\"\n anchorY=\"middle\"\n maxWidth={1.5}\n >\n {displayText}\n </Text>\n )}\n </group>\n )\n}\n\nexport default function PortalObject(props: {\n object: CustomObject\n onClick?: (event: ThreeEvent<MouseEvent>) => void\n}) {\n const { object, onClick } = props\n const eventBus = useCaveEventBus()\n\n const handleProximityChange = useCallback(\n (intersected: boolean) => {\n if (intersected) {\n eventBus.emit('object:enter', { object })\n } else {\n eventBus.emit('object:leave', { object })\n }\n },\n [eventBus, object]\n )\n\n return (\n <BvhPhysicsSensor onIntersectedChanged={handleProximityChange}>\n <group onClick={onClick} userData={{ customObject: object }}>\n <PortalMarker text={object.portal?.url || object.portal?.internalScene?.name} />\n </group>\n </BvhPhysicsSensor>\n )\n}\n"],"names":["portalGradientMaterial","ShaderMaterial","DoubleSide","truncateText","text","maxLength","PortalMarker","groupRef","useRef","displayText","useFrame","state","jsxs","jsx","Text","PortalObject","props","object","onClick","eventBus","useCaveEventBus","handleProximityChange","useCallback","intersected","BvhPhysicsSensor"],"mappings":";;;;;;;AAUA,MAAMA,IAAyB,IAAIC,EAAe;AAAA,EAChD,UAAU,CAAA;AAAA,EACV,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOd,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2BhB,MAAMC;AACR,CAAC;AAED,SAASC,EAAaC,GAAcC,IAAoB,IAAY;AAClE,SAAKD,IACEA,EAAK,UAAUC,IAAYD,IAAOA,EAAK,UAAU,GAAGC,CAAS,IAAI,QADtD;AAEpB;AAEA,SAASC,EAAa,EAAE,MAAAF,KAA2B;AACjD,QAAMG,IAAWC,EAAc,IAAI,GAC7BC,IAAcL,IAAOD,EAAaC,GAAM,EAAE,IAAI;AAEpD,SAAAM,EAAS,CAACC,MAAU;AAClB,IAAAJ,EAAS,SAAS,OAAOI,EAAM,OAAO,QAAQ;AAAA,EAChD,CAAC,GAGC,gBAAAC,EAAC,SAAA,EAAM,KAAKL,GACV,UAAA;AAAA,IAAA,gBAAAK,EAAC,UAAK,UAAU,CAAC,GAAG,GAAG,IAAI,GACzB,UAAA;AAAA,MAAA,gBAAAC,EAAC,kBAAA,EAAe,MAAM,CAAC,GAAG,GAAG,GAAG;AAAA,MAChC,gBAAAA,EAAC,aAAA,EAAU,QAAQb,GAAwB,QAAO,WAAA,CAAW;AAAA,IAAA,GAC/D;AAAA,IACCS,KACC,gBAAAI;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,UAAU,CAAC,GAAG,GAAG,IAAI;AAAA,QACrB,UAAU;AAAA,QACV,OAAM;AAAA,QACN,SAAQ;AAAA,QACR,SAAQ;AAAA,QACR,UAAU;AAAA,QAET,UAAAL;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GAEJ;AAEJ;AAEA,SAAwBM,EAAaC,GAGlC;AACD,QAAM,EAAE,QAAAC,GAAQ,SAAAC,EAAA,IAAYF,GACtBG,IAAWC,EAAA,GAEXC,IAAwBC;AAAA,IAC5B,CAACC,MAAyB;AACxB,MAAIA,IACFJ,EAAS,KAAK,gBAAgB,EAAE,QAAAF,EAAA,CAAQ,IAExCE,EAAS,KAAK,gBAAgB,EAAE,QAAAF,EAAA,CAAQ;AAAA,IAE5C;AAAA,IACA,CAACE,GAAUF,CAAM;AAAA,EAAA;AAGnB,SACE,gBAAAJ,EAACW,KAAiB,sBAAsBH,GACtC,4BAAC,SAAA,EAAM,SAAAH,GAAkB,UAAU,EAAE,cAAcD,EAAA,GACjD,UAAA,gBAAAJ,EAACP,GAAA,EAAa,MAAMW,EAAO,QAAQ,OAAOA,EAAO,QAAQ,eAAe,KAAA,CAAM,EAAA,CAChF,EAAA,CACF;AAEJ;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ThreeEvent } from '@react-three/fiber';
|
|
2
|
+
import type { CustomObject } from '../../types/index.js';
|
|
3
|
+
export default function VideoObject(props: {
|
|
4
|
+
object: CustomObject;
|
|
5
|
+
onClick?: (event: ThreeEvent<MouseEvent>) => void;
|
|
6
|
+
}): import("react").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=video-object.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video-object.d.ts","sourceRoot":"","sources":["../../../space/objects/video-object.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AA0C/C,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,KAAK,EAAE;IACzC,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;CAClD,+BAQA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as t, jsxs as a } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect as u } from "react";
|
|
3
|
+
import { DoubleSide as s } from "three";
|
|
4
|
+
import { useVideoTexture as c } from "@react-three/drei";
|
|
5
|
+
function n(o) {
|
|
6
|
+
const { object: e, onClick: i } = o, r = c(e.video?.url || "", {
|
|
7
|
+
muted: e.video?.muted ?? !0,
|
|
8
|
+
autoplay: e.video?.autoplay ?? !0,
|
|
9
|
+
loop: e.video?.loop ?? !0,
|
|
10
|
+
controls: e.video?.controls ?? !1
|
|
11
|
+
});
|
|
12
|
+
return u(() => () => {
|
|
13
|
+
r.source.data?.pause(), r.dispose();
|
|
14
|
+
}, [r]), /* @__PURE__ */ a("mesh", { onClick: i, userData: { customObject: e }, children: [
|
|
15
|
+
/* @__PURE__ */ t("planeGeometry", { args: [1.6, 0.9] }),
|
|
16
|
+
/* @__PURE__ */ t("meshBasicMaterial", { map: r, toneMapped: !1, side: s })
|
|
17
|
+
] });
|
|
18
|
+
}
|
|
19
|
+
function d(o) {
|
|
20
|
+
const { object: e, onClick: i } = o;
|
|
21
|
+
return /* @__PURE__ */ a("mesh", { castShadow: !0, receiveShadow: !0, userData: { customObject: e }, onClick: i, children: [
|
|
22
|
+
/* @__PURE__ */ t("planeGeometry", { args: [1, 1] }),
|
|
23
|
+
/* @__PURE__ */ t("meshBasicMaterial", { color: "#333", side: s })
|
|
24
|
+
] });
|
|
25
|
+
}
|
|
26
|
+
function b(o) {
|
|
27
|
+
return o.object.video?.url?.match(/\.(mp4|webm|ogg)$/i) ? /* @__PURE__ */ t(n, { ...o }) : /* @__PURE__ */ t(d, { ...o });
|
|
28
|
+
}
|
|
29
|
+
export {
|
|
30
|
+
b as default
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=video-object.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video-object.js","sources":["../../../space/objects/video-object.tsx"],"sourcesContent":["import { useEffect } from 'react'\nimport { DoubleSide } from 'three'\nimport type { ThreeEvent } from '@react-three/fiber'\nimport { useVideoTexture } from '@react-three/drei'\nimport type { CustomObject } from '../../types'\n\nfunction VideoElement(props: {\n object: CustomObject\n onClick?: (event: ThreeEvent<MouseEvent>) => void\n}) {\n const { object, onClick } = props\n const videoTexture = useVideoTexture(object.video?.url || '', {\n muted: object.video?.muted ?? true,\n autoplay: object.video?.autoplay ?? true,\n loop: object.video?.loop ?? true,\n controls: object.video?.controls ?? false\n })\n\n useEffect(() => {\n return () => {\n videoTexture.source.data?.pause()\n videoTexture.dispose()\n }\n }, [videoTexture])\n\n return (\n <mesh onClick={onClick} userData={{ customObject: object }}>\n <planeGeometry args={[1.6, 0.9]} />\n <meshBasicMaterial map={videoTexture} toneMapped={false} side={DoubleSide} />\n </mesh>\n )\n}\n\nfunction FallbackElement(props: {\n object: CustomObject\n onClick?: (event: ThreeEvent<MouseEvent>) => void\n}) {\n const { object, onClick } = props\n return (\n <mesh castShadow receiveShadow userData={{ customObject: object }} onClick={onClick}>\n <planeGeometry args={[1, 1]} />\n <meshBasicMaterial color=\"#333\" side={DoubleSide} />\n </mesh>\n )\n}\n\nexport default function VideoObject(props: {\n object: CustomObject\n onClick?: (event: ThreeEvent<MouseEvent>) => void\n}) {\n const isVideo = props.object.video?.url?.match(/\\.(mp4|webm|ogg)$/i)\n\n if (!isVideo) {\n return <FallbackElement {...props} />\n }\n\n return <VideoElement {...props} />\n}\n"],"names":["VideoElement","props","object","onClick","videoTexture","useVideoTexture","useEffect","jsx","DoubleSide","FallbackElement","jsxs","VideoObject"],"mappings":";;;;AAMA,SAASA,EAAaC,GAGnB;AACD,QAAM,EAAE,QAAAC,GAAQ,SAAAC,EAAA,IAAYF,GACtBG,IAAeC,EAAgBH,EAAO,OAAO,OAAO,IAAI;AAAA,IAC5D,OAAOA,EAAO,OAAO,SAAS;AAAA,IAC9B,UAAUA,EAAO,OAAO,YAAY;AAAA,IACpC,MAAMA,EAAO,OAAO,QAAQ;AAAA,IAC5B,UAAUA,EAAO,OAAO,YAAY;AAAA,EAAA,CACrC;AAED,SAAAI,EAAU,MACD,MAAM;AACX,IAAAF,EAAa,OAAO,MAAM,MAAA,GAC1BA,EAAa,QAAA;AAAA,EACf,GACC,CAACA,CAAY,CAAC,qBAGd,QAAA,EAAK,SAAAD,GAAkB,UAAU,EAAE,cAAcD,KAChD,UAAA;AAAA,IAAA,gBAAAK,EAAC,iBAAA,EAAc,MAAM,CAAC,KAAK,GAAG,GAAG;AAAA,sBAChC,qBAAA,EAAkB,KAAKH,GAAc,YAAY,IAAO,MAAMI,EAAA,CAAY;AAAA,EAAA,GAC7E;AAEJ;AAEA,SAASC,EAAgBR,GAGtB;AACD,QAAM,EAAE,QAAAC,GAAQ,SAAAC,EAAA,IAAYF;AAC5B,SACE,gBAAAS,EAAC,QAAA,EAAK,YAAU,IAAC,eAAa,IAAC,UAAU,EAAE,cAAcR,EAAA,GAAU,SAAAC,GACjE,UAAA;AAAA,IAAA,gBAAAI,EAAC,iBAAA,EAAc,MAAM,CAAC,GAAG,CAAC,GAAG;AAAA,IAC7B,gBAAAA,EAAC,qBAAA,EAAkB,OAAM,QAAO,MAAMC,EAAA,CAAY;AAAA,EAAA,GACpD;AAEJ;AAEA,SAAwBG,EAAYV,GAGjC;AAGD,SAFgBA,EAAM,OAAO,OAAO,KAAK,MAAM,oBAAoB,IAM5D,gBAAAM,EAACP,GAAA,EAAc,GAAGC,EAAA,CAAO,IAHvB,gBAAAM,EAACE,GAAA,EAAiB,GAAGR,EAAA,CAAO;AAIvC;"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { PolygonBoundaryDef } from '../types/index.js';
|
|
2
|
+
/** Single merged collider mesh — mount inside `<BvhPhysicsBody>`. */
|
|
3
|
+
export declare function PolygonBoundaryColliders({ boundary }: {
|
|
4
|
+
boundary: PolygonBoundaryDef;
|
|
5
|
+
}): import("react").JSX.Element | null;
|
|
6
|
+
export declare function PolygonBoundaryFence({ boundary, active }: {
|
|
7
|
+
boundary: PolygonBoundaryDef;
|
|
8
|
+
active: boolean;
|
|
9
|
+
}): import("react").JSX.Element | null;
|
|
10
|
+
//# sourceMappingURL=polygon-boundary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polygon-boundary.d.ts","sourceRoot":"","sources":["../../space/polygon-boundary.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAkJlD,qEAAqE;AACrE,wBAAgB,wBAAwB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,kBAAkB,CAAA;CAAE,sCAoBtF;AAED,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,MAAM,EACP,EAAE;IACD,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,MAAM,EAAE,OAAO,CAAA;CAChB,sCA2KA"}
|