cubeforge 0.5.2 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/index.d.ts +372 -2
  2. package/dist/index.js +1109 -475
  3. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -503,7 +503,48 @@ interface SquashStretchProps {
503
503
  }
504
504
  declare function SquashStretch({ intensity, recovery }: SquashStretchProps): null;
505
505
 
506
- type ParticlePreset = 'explosion' | 'spark' | 'smoke' | 'coinPickup' | 'jumpDust';
506
+ type ParticlePreset = 'explosion' | 'spark' | 'smoke' | 'coinPickup' | 'jumpDust' | 'fire' | 'magic' | 'rain' | 'snow' | 'confetti' | 'sparkle' | 'heal' | 'damage' | 'pickup' | 'fountain' | 'trail';
507
+ interface ParticleEmitterConfig {
508
+ rate?: number;
509
+ speed?: number;
510
+ spread?: number;
511
+ angle?: number;
512
+ particleLife?: number;
513
+ particleSize?: number;
514
+ color?: string;
515
+ gravity?: number;
516
+ maxParticles?: number;
517
+ /** Colors to interpolate through over particle lifetime. */
518
+ colorOverLife?: string[];
519
+ /** Start/end size ratios for per-particle size curve (end is multiplier of particleSize). */
520
+ sizeOverLife?: {
521
+ start: number;
522
+ end: number;
523
+ };
524
+ /** Blend mode for the emitter (additive for glows, normal for solid). */
525
+ blendMode?: 'normal' | 'additive';
526
+ /** Particle shape: 'soft' gradient, 'circle' hard disc, 'square' quad. */
527
+ particleShape?: 'soft' | 'circle' | 'square';
528
+ }
529
+ /**
530
+ * Ready-made particle configurations. Pass via the `preset` prop on
531
+ * `<ParticleEmitter>`:
532
+ *
533
+ * ```tsx
534
+ * <ParticleEmitter preset="fire" />
535
+ * <ParticleEmitter preset="explosion" color="#8bc34a" /> // overrides
536
+ * ```
537
+ *
538
+ * Individual props always override preset values — presets are defaults.
539
+ *
540
+ * ## Catalog
541
+ *
542
+ * Action / combat: `explosion`, `spark`, `damage`, `heal`, `magic`
543
+ * Environment: `fire`, `smoke`, `rain`, `snow`, `fountain`
544
+ * UI / reward: `coinPickup`, `pickup`, `sparkle`, `confetti`
545
+ * Character: `jumpDust`, `trail`
546
+ */
547
+ declare const PARTICLE_PRESETS: Record<ParticlePreset, ParticleEmitterConfig>;
507
548
 
508
549
  interface ParticleEmitterProps {
509
550
  active?: boolean;
@@ -876,6 +917,100 @@ interface CameraZoneProps {
876
917
  */
877
918
  declare function CameraZone({ x, y, width, height, watchTag, targetX, targetY, children }: CameraZoneProps): react_jsx_runtime.JSX.Element;
878
919
 
920
+ interface VirtualCameraConfig {
921
+ /** Unique identifier for this virtual camera. */
922
+ id: string;
923
+ /** Higher-priority cameras take control when active. Default 0. */
924
+ priority: number;
925
+ /** Whether this camera is currently contending for control. Default true. */
926
+ active: boolean;
927
+ /** Entity ID string to follow (same as Camera2D.followEntityId). */
928
+ followEntityId?: string;
929
+ /** Static world-space X when not following an entity. */
930
+ x?: number;
931
+ /** Static world-space Y when not following an entity. */
932
+ y?: number;
933
+ /** Zoom level. Default 1. */
934
+ zoom?: number;
935
+ /** Follow smoothing (0 = instant, 0.85 = smooth). Inherits Camera2D value when omitted. */
936
+ smoothing?: number;
937
+ /** World-space camera bounds clamp. */
938
+ bounds?: {
939
+ x: number;
940
+ y: number;
941
+ width: number;
942
+ height: number;
943
+ };
944
+ /** How long (seconds) to blend when transitioning to this camera. Default 0.4. */
945
+ blendDuration: number;
946
+ }
947
+ interface VirtualCameraProps {
948
+ /** Unique ID used to identify and blend between cameras. */
949
+ id: string;
950
+ /**
951
+ * Higher values win when multiple virtual cameras are active simultaneously.
952
+ * Default 0.
953
+ */
954
+ priority?: number;
955
+ /** Whether this camera is currently competing for control. Default true. */
956
+ active?: boolean;
957
+ /**
958
+ * Entity string ID to follow (same semantics as `<Camera2D followEntity>`).
959
+ * Takes precedence over x/y when set.
960
+ */
961
+ followEntity?: string;
962
+ /** Static world-space X to center on (when not following an entity). */
963
+ x?: number;
964
+ /** Static world-space Y to center on (when not following an entity). */
965
+ y?: number;
966
+ /** Zoom level applied while this camera is active. Default 1. */
967
+ zoom?: number;
968
+ /**
969
+ * Follow-smoothing factor (0 = instant snap, 0.85 = very smooth).
970
+ * When omitted, inherits the current Camera2D smoothing.
971
+ */
972
+ smoothing?: number;
973
+ /** World-space bounds clamping while this camera is active. */
974
+ bounds?: {
975
+ x: number;
976
+ y: number;
977
+ width: number;
978
+ height: number;
979
+ };
980
+ /**
981
+ * Blend-in duration in seconds when transitioning to this camera.
982
+ * Use 0 for an instant cut. Default 0.4.
983
+ */
984
+ blendDuration?: number;
985
+ }
986
+ /**
987
+ * Declares a virtual camera that competes for control of the scene's
988
+ * `Camera2D`. The active virtual camera with the highest `priority` wins.
989
+ * Transitions between cameras blend smoothly over `blendDuration` seconds.
990
+ *
991
+ * Multiple `<VirtualCamera>` components can coexist. Toggle `active` to hand
992
+ * off camera control — ideal for cutscenes, boss arenas, and split focus.
993
+ *
994
+ * Must be placed inside `<Game>` alongside a `<Camera2D>`.
995
+ *
996
+ * @example
997
+ * ```tsx
998
+ * // Normal gameplay: follow the player
999
+ * <VirtualCamera id="main" priority={0} followEntity={playerId} zoom={1} active />
1000
+ *
1001
+ * // Boss fight: zoom out to show the arena
1002
+ * <VirtualCamera
1003
+ * id="boss"
1004
+ * priority={10}
1005
+ * x={arenaX} y={arenaY}
1006
+ * zoom={0.7}
1007
+ * blendDuration={0.8}
1008
+ * active={bossActive}
1009
+ * />
1010
+ * ```
1011
+ */
1012
+ declare function VirtualCamera({ id, priority, active, followEntity, x, y, zoom, smoothing, bounds, blendDuration, }: VirtualCameraProps): null;
1013
+
879
1014
  interface TrailProps {
880
1015
  /** Maximum number of trail points (default 20) */
881
1016
  length?: number;
@@ -1276,6 +1411,104 @@ interface CameraLookaheadOptions {
1276
1411
  */
1277
1412
  declare function useCameraLookahead(entityId: EntityId, opts?: CameraLookaheadOptions): void;
1278
1413
 
1414
+ interface CameraBlendControls {
1415
+ /**
1416
+ * Activate a registered virtual camera by id.
1417
+ * If the camera has a lower priority than the current one, raising its
1418
+ * priority temporarily is more ergonomic — but activating it is the
1419
+ * simplest way to hand off control from code.
1420
+ */
1421
+ activate(id: string): void;
1422
+ /**
1423
+ * Deactivate a registered virtual camera by id.
1424
+ * The next highest-priority active camera takes over automatically.
1425
+ */
1426
+ deactivate(id: string): void;
1427
+ /**
1428
+ * Force a specific virtual camera to take over immediately, regardless of
1429
+ * priority, by temporarily setting its priority to a very high value and
1430
+ * activating it. Call `restore()` to return to normal priority-based control.
1431
+ */
1432
+ override(id: string): void;
1433
+ /**
1434
+ * Remove any priority override set by `override()`, restoring the camera's
1435
+ * original priority.
1436
+ */
1437
+ restore(id: string): void;
1438
+ /**
1439
+ * Returns the id of the virtual camera currently in control, or null if
1440
+ * no virtual cameras are active.
1441
+ */
1442
+ getActiveId(): string | null;
1443
+ }
1444
+ /**
1445
+ * Imperative controls for the virtual camera system. Lets you activate,
1446
+ * deactivate, and force-override virtual cameras from game logic.
1447
+ *
1448
+ * Must be used inside `<Game>`.
1449
+ *
1450
+ * @example
1451
+ * ```tsx
1452
+ * function BossEncounter() {
1453
+ * const cam = useCameraBlend()
1454
+ *
1455
+ * useEffect(() => {
1456
+ * cam.override('bossArena')
1457
+ * return () => cam.restore('bossArena')
1458
+ * }, [])
1459
+ * }
1460
+ * ```
1461
+ */
1462
+ declare function useCameraBlend(): CameraBlendControls;
1463
+
1464
+ interface CinematicStep {
1465
+ /** ID of the virtual camera to activate for this step. */
1466
+ cameraId: string;
1467
+ /**
1468
+ * How long to hold this camera in seconds before advancing.
1469
+ * Use `Infinity` to hold until `stop()` is called or the sequence is unmounted.
1470
+ */
1471
+ holdFor: number;
1472
+ /**
1473
+ * Override the virtual camera's `blendDuration` for this specific step.
1474
+ * When omitted, uses the camera's configured `blendDuration`.
1475
+ */
1476
+ blendDuration?: number;
1477
+ }
1478
+ interface CinematicSequenceControls {
1479
+ /** Start the sequence from the beginning. */
1480
+ play(): void;
1481
+ /** Stop the sequence and deactivate the current camera step. */
1482
+ stop(): void;
1483
+ /** Whether the sequence is currently playing. */
1484
+ readonly isPlaying: boolean;
1485
+ /** Zero-based index of the current step, or -1 when stopped. */
1486
+ readonly currentStep: number;
1487
+ }
1488
+ /**
1489
+ * Plays an ordered sequence of virtual camera shots inside the engine loop.
1490
+ * Each step activates a named `<VirtualCamera>` for `holdFor` seconds, then
1491
+ * automatically advances to the next step. Respects engine pause.
1492
+ *
1493
+ * The virtual cameras referenced in the steps must be mounted in the scene
1494
+ * tree via `<VirtualCamera>` before calling `play()`.
1495
+ *
1496
+ * @example
1497
+ * ```tsx
1498
+ * const { play, stop, isPlaying } = useCinematicSequence([
1499
+ * { cameraId: 'intro', holdFor: 2, blendDuration: 0 },
1500
+ * { cameraId: 'overview', holdFor: 3, blendDuration: 1 },
1501
+ * { cameraId: 'mainFollow', holdFor: Infinity, blendDuration: 0.5 },
1502
+ * ], { onComplete: () => console.log('cutscene done') })
1503
+ *
1504
+ * // Trigger on mount:
1505
+ * useEffect(() => { play() }, [])
1506
+ * ```
1507
+ */
1508
+ declare function useCinematicSequence(steps: CinematicStep[], opts?: {
1509
+ onComplete?: () => void;
1510
+ }): CinematicSequenceControls;
1511
+
1279
1512
  interface SnapshotControls {
1280
1513
  /**
1281
1514
  * Capture a full serialisable snapshot of all ECS entity/component data.
@@ -3100,6 +3333,143 @@ declare function deleteSavedScene(key: string): boolean;
3100
3333
  */
3101
3334
  declare function listSavedScenes(prefix?: string): string[];
3102
3335
 
3336
+ type HUDPosition = 'topLeft' | 'topCenter' | 'topRight' | 'centerLeft' | 'center' | 'centerRight' | 'bottomLeft' | 'bottomCenter' | 'bottomRight';
3337
+ interface HUDProps {
3338
+ /**
3339
+ * Whether the HUD fades out during scene transitions. Default true. When a
3340
+ * `SceneTransitionOverlay` is active or `usePause` is paused, the HUD will
3341
+ * dim to `dimmedOpacity` to get out of the way.
3342
+ */
3343
+ dimDuringTransitions?: boolean;
3344
+ /** Opacity when dimmed. Default 0.25. */
3345
+ dimmedOpacity?: number;
3346
+ /** Whether the HUD is currently visible. Default true. */
3347
+ visible?: boolean;
3348
+ /** Whether to apply CSS `env(safe-area-inset-*)` padding. Default true on touch. */
3349
+ safeArea?: boolean;
3350
+ /** Extra padding around all zones in CSS pixels. Default 12. */
3351
+ padding?: number;
3352
+ /** Additional style for the HUD root. */
3353
+ style?: CSSProperties;
3354
+ /** Additional CSS class. */
3355
+ className?: string;
3356
+ children?: ReactNode;
3357
+ }
3358
+ /**
3359
+ * Heads-up-display root. Positions a full-screen overlay over the game canvas
3360
+ * and provides layout zones via {@link HUDZone}. Integrates automatically with
3361
+ * CubeForge primitives:
3362
+ *
3363
+ * - Fades out during scene transitions (via `dimDuringTransitions`)
3364
+ * - Respects `prefers-reduced-motion` for fade timing
3365
+ * - Honors mobile safe-area insets when `safeArea` is on
3366
+ *
3367
+ * @example
3368
+ * ```tsx
3369
+ * <Stage>
3370
+ * <HUD>
3371
+ * <HUDZone position="topLeft">
3372
+ * <HUDBar value={hp} max={100} label="HP" color="#ef5350" />
3373
+ * </HUDZone>
3374
+ * <HUDZone position="topRight">
3375
+ * <span>Score: {score}</span>
3376
+ * </HUDZone>
3377
+ * <HUDZone position="bottomCenter">
3378
+ * <button onClick={onJump}>Jump</button>
3379
+ * </HUDZone>
3380
+ * </HUD>
3381
+ * </Stage>
3382
+ * ```
3383
+ */
3384
+ declare function HUD({ dimDuringTransitions, dimmedOpacity, visible, safeArea, padding, style, className, children, }: HUDProps): react_jsx_runtime.JSX.Element;
3385
+ interface HUDZoneProps {
3386
+ /** Where to anchor this zone. Default 'topLeft'. */
3387
+ position?: HUDPosition;
3388
+ /** Direction children lay out. Default 'row' for top/bottom, 'column' for left/right/center. */
3389
+ direction?: 'row' | 'column';
3390
+ /** Gap between children in CSS pixels. Default 8. */
3391
+ gap?: number;
3392
+ /** Allow pointer events on zone contents (buttons, sliders). Default true for this zone. */
3393
+ interactive?: boolean;
3394
+ /** Override style for the zone. */
3395
+ style?: CSSProperties;
3396
+ /** Additional CSS class. */
3397
+ className?: string;
3398
+ children?: ReactNode;
3399
+ }
3400
+ /**
3401
+ * Positioned content zone inside a {@link HUD}. Nine anchors available
3402
+ * (topLeft, topCenter, topRight, centerLeft, center, centerRight, bottomLeft,
3403
+ * bottomCenter, bottomRight). Honors the parent HUD's padding and safe-area.
3404
+ */
3405
+ declare function HUDZone({ position, direction, gap, interactive, style, className, children, }: HUDZoneProps): react_jsx_runtime.JSX.Element;
3406
+ interface HUDBarProps {
3407
+ /** Current value. */
3408
+ value: number;
3409
+ /** Maximum value. */
3410
+ max: number;
3411
+ /** Optional label shown on top of the bar. */
3412
+ label?: string;
3413
+ /** Bar color. Default '#4fc3f7'. */
3414
+ color?: string;
3415
+ /** Track (empty) color. Default 'rgba(255,255,255,0.08)'. */
3416
+ trackColor?: string;
3417
+ /** Bar width in CSS pixels. Default 180. */
3418
+ width?: number;
3419
+ /** Bar height in CSS pixels. Default 14. */
3420
+ height?: number;
3421
+ /** Show numeric value as "value / max". Default true. */
3422
+ showValue?: boolean;
3423
+ /** Reverse direction: fills right→left. Default false. */
3424
+ rtl?: boolean;
3425
+ /** Round the bar corners. Default true. */
3426
+ rounded?: boolean;
3427
+ /** Smooth transition when value changes. Default true. */
3428
+ animated?: boolean;
3429
+ /** Additional style. */
3430
+ style?: CSSProperties;
3431
+ }
3432
+ /**
3433
+ * A simple value bar for HP, stamina, XP, progress, etc. Meant to be dropped
3434
+ * inside a {@link HUDZone} without any extra styling. Animates smoothly by
3435
+ * default; respects `prefers-reduced-motion` transparently via CSS.
3436
+ *
3437
+ * @example
3438
+ * ```tsx
3439
+ * <HUDZone position="topLeft">
3440
+ * <HUDBar value={hp} max={100} label="HP" color="#ef5350" />
3441
+ * <HUDBar value={mana} max={50} label="MP" color="#4fc3f7" />
3442
+ * </HUDZone>
3443
+ * ```
3444
+ */
3445
+ declare function HUDBar({ value, max, label, color, trackColor, width, height, showValue, rtl, rounded, animated, style, }: HUDBarProps): react_jsx_runtime.JSX.Element;
3446
+ interface HUDCounterProps {
3447
+ /** Numeric value to display. */
3448
+ value: number;
3449
+ /** Optional icon or emoji shown before the value. */
3450
+ icon?: ReactNode;
3451
+ /** Optional label shown after the value. */
3452
+ label?: string;
3453
+ /** Flash briefly when the value changes. Default true. */
3454
+ pulse?: boolean;
3455
+ /** Value color. Default '#fff'. */
3456
+ color?: string;
3457
+ /** Font size in CSS pixels. Default 18. */
3458
+ fontSize?: number;
3459
+ style?: CSSProperties;
3460
+ }
3461
+ /**
3462
+ * A numeric counter widget for score, coins, ammo, etc.
3463
+ *
3464
+ * @example
3465
+ * ```tsx
3466
+ * <HUDZone position="topRight">
3467
+ * <HUDCounter icon="🪙" value={coins} />
3468
+ * </HUDZone>
3469
+ * ```
3470
+ */
3471
+ declare function HUDCounter({ value, icon, label, pulse, color, fontSize, style, }: HUDCounterProps): react_jsx_runtime.JSX.Element;
3472
+
3103
3473
  declare function playClip(world: ECSWorld, entityId: EntityId, clipName: string): void;
3104
3474
  declare function setAnimationState(world: ECSWorld, entityId: EntityId, stateName: string): void;
3105
3475
  declare function setAnimatorParam(world: ECSWorld, entityId: EntityId, name: string, value: AnimatorParamValue): void;
@@ -3206,4 +3576,4 @@ declare function useRemotePlayer(config: {
3206
3576
  opts?: RemotePlayerOptions;
3207
3577
  }): RemotePlayerControls;
3208
3578
 
3209
- export { A11yNode, type A11yNodeProps, type AccessibilityControls, AnimatedSprite, type AnimatedSpriteProps, Animation, type AnimationSet, Animator, AssetLoader, type BoundInputMap, BoxCollider, Camera2D, type CameraControls, type CameraLookaheadOptions, CameraZone, CapsuleCollider, Checkpoint, Circle, CircleCollider, type ComboDetectorResult, CompoundCollider, ConvexCollider, type CoordinateHelpers, type CoroutineControls, type CoroutineFactory, type CoroutineYield, type DraggableControls, type DraggableOptions, type DroppableControls, type DroppableOptions, EditableText, type EditableTextProps, Entity, type ExportOptions, FocusRing, type FocusRingProps, type FocusableOptions, Game, type GameControls, type GamepadState, type GestureHandlers, type GestureOptions, Gradient, type GridCell, type GridControls, type GridOptions, type HMRControls, HalfSpaceCollider, HeightFieldCollider, type HistoryControls, type HistoryOptions, type HoverableControls, type HoverableOptions, type InputContextControls, Joint, type KeyboardFocusControls, Line, Mask, MovingPlatform, type NetworkSyncOptions, NineSlice, ParallaxLayer, ParticleEmitter, type ParticlePreset, type PauseControls, type PinchEvent, Polygon, type PreloadState, type ProfilerData, type RemotePlayerControls, type RemotePlayerOptions, RigidBody, type SceneManagerControls, type SceneSaveOptions, type SceneTransitionControls, SceneTransitionOverlay, ScreenFlash, type ScreenFlashHandle, Script, SegmentCollider, type SelectOptions, Selection, type SelectionControls, type SelectionProps, type SnapControls, type SnapOptions, type SnapResult, type SnapshotControls, Sprite, type SpriteAtlas, SquashStretch, type SquashStretchControls, Stage, type SwipeEvent, Text, type TiledLayer, type TiledObject, Tilemap, type TimerControls, type TouchControls, Trail, Transform, TransformHandles, type TransformHandlesProps, type TransitionEffect, TriMeshCollider, TriangleCollider, type TurnSystemControls, type TurnSystemOptions, VectorPath, type VectorPathProps, type VirtualInputState, VirtualJoystick, type VirtualJoystickProps, type Waypoint, World, createAtlas, defineAnimations, definePrefab, deleteSavedScene, downloadCanvas, exportToBlob, exportToDataURL, listSavedScenes, loadScene, loadSceneFromLocalStorage, playClip, saveScene, saveSceneToLocalStorage, setAnimationState, setAnimatorParam, useAccessibility, useAudioListener, useCamera, useCameraLookahead, useComboDetector, useCoordinates, useCoroutine, useDestroyEntity, useDraggable, useDroppable, useEntity, useEvent, useEvents, useFocusable, useGame, useGamepad, useGamepadHaptics, useGestures, useGrid, useHMR, useHistory, useHitstop, useHoverable, useInput, useInputBuffer, useInputContext, useInputMap, useInputRecorder, useKeyboardFocus, useLocalMultiplayer, useNetworkSync, useParent, usePause, usePlayerInput, usePostProcess, usePreload, useProfiler, useRemotePlayer, useSceneManager, useSceneTransition, useSelection, useSnap, useSnapshot, useSquashStretch, useTimer, useTouch, useTurnSystem, useVirtualInput, useWebGLPostProcess, useWorldQuery, wait, waitFrames, waitUntil };
3579
+ export { A11yNode, type A11yNodeProps, type AccessibilityControls, AnimatedSprite, type AnimatedSpriteProps, Animation, type AnimationSet, Animator, AssetLoader, type BoundInputMap, BoxCollider, Camera2D, type CameraBlendControls, type CameraControls, type CameraLookaheadOptions, CameraZone, CapsuleCollider, Checkpoint, type CinematicSequenceControls, type CinematicStep, Circle, CircleCollider, type ComboDetectorResult, CompoundCollider, ConvexCollider, type CoordinateHelpers, type CoroutineControls, type CoroutineFactory, type CoroutineYield, type DraggableControls, type DraggableOptions, type DroppableControls, type DroppableOptions, EditableText, type EditableTextProps, Entity, type ExportOptions, FocusRing, type FocusRingProps, type FocusableOptions, Game, type GameControls, type GamepadState, type GestureHandlers, type GestureOptions, Gradient, type GridCell, type GridControls, type GridOptions, type HMRControls, HUD, HUDBar, type HUDBarProps, HUDCounter, type HUDCounterProps, type HUDPosition, type HUDProps, HUDZone, type HUDZoneProps, HalfSpaceCollider, HeightFieldCollider, type HistoryControls, type HistoryOptions, type HoverableControls, type HoverableOptions, type InputContextControls, Joint, type KeyboardFocusControls, Line, Mask, MovingPlatform, type NetworkSyncOptions, NineSlice, PARTICLE_PRESETS, ParallaxLayer, ParticleEmitter, type ParticleEmitterConfig, type ParticlePreset, type PauseControls, type PinchEvent, Polygon, type PreloadState, type ProfilerData, type RemotePlayerControls, type RemotePlayerOptions, RigidBody, type SceneManagerControls, type SceneSaveOptions, type SceneTransitionControls, SceneTransitionOverlay, ScreenFlash, type ScreenFlashHandle, Script, SegmentCollider, type SelectOptions, Selection, type SelectionControls, type SelectionProps, type SnapControls, type SnapOptions, type SnapResult, type SnapshotControls, Sprite, type SpriteAtlas, SquashStretch, type SquashStretchControls, Stage, type SwipeEvent, Text, type TiledLayer, type TiledObject, Tilemap, type TimerControls, type TouchControls, Trail, Transform, TransformHandles, type TransformHandlesProps, type TransitionEffect, TriMeshCollider, TriangleCollider, type TurnSystemControls, type TurnSystemOptions, VectorPath, type VectorPathProps, VirtualCamera, type VirtualCameraConfig, type VirtualCameraProps, type VirtualInputState, VirtualJoystick, type VirtualJoystickProps, type Waypoint, World, createAtlas, defineAnimations, definePrefab, deleteSavedScene, downloadCanvas, exportToBlob, exportToDataURL, listSavedScenes, loadScene, loadSceneFromLocalStorage, playClip, saveScene, saveSceneToLocalStorage, setAnimationState, setAnimatorParam, useAccessibility, useAudioListener, useCamera, useCameraBlend, useCameraLookahead, useCinematicSequence, useComboDetector, useCoordinates, useCoroutine, useDestroyEntity, useDraggable, useDroppable, useEntity, useEvent, useEvents, useFocusable, useGame, useGamepad, useGamepadHaptics, useGestures, useGrid, useHMR, useHistory, useHitstop, useHoverable, useInput, useInputBuffer, useInputContext, useInputMap, useInputRecorder, useKeyboardFocus, useLocalMultiplayer, useNetworkSync, useParent, usePause, usePlayerInput, usePostProcess, usePreload, useProfiler, useRemotePlayer, useSceneManager, useSceneTransition, useSelection, useSnap, useSnapshot, useSquashStretch, useTimer, useTouch, useTurnSystem, useVirtualInput, useWebGLPostProcess, useWorldQuery, wait, waitFrames, waitUntil };