@aura3d/controls 1.4.5 → 1.5.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.
Files changed (39) hide show
  1. package/dist/ControlState.d.ts +1 -1
  2. package/dist/ControlState.d.ts.map +1 -1
  3. package/dist/DragControls.d.ts +21 -1
  4. package/dist/DragControls.d.ts.map +1 -1
  5. package/dist/DragControls.js +24 -2
  6. package/dist/DragControls.js.map +1 -1
  7. package/dist/FirstPersonControls.d.ts +10 -1
  8. package/dist/FirstPersonControls.d.ts.map +1 -1
  9. package/dist/FirstPersonControls.js +18 -2
  10. package/dist/FirstPersonControls.js.map +1 -1
  11. package/dist/FlyControls.d.ts +42 -0
  12. package/dist/FlyControls.d.ts.map +1 -1
  13. package/dist/FlyControls.js +106 -3
  14. package/dist/FlyControls.js.map +1 -1
  15. package/dist/MapControls.d.ts +13 -0
  16. package/dist/MapControls.d.ts.map +1 -1
  17. package/dist/MapControls.js +40 -2
  18. package/dist/MapControls.js.map +1 -1
  19. package/dist/OrbitControls.d.ts +54 -0
  20. package/dist/OrbitControls.d.ts.map +1 -1
  21. package/dist/OrbitControls.js +133 -0
  22. package/dist/OrbitControls.js.map +1 -1
  23. package/dist/PointerLockControls.d.ts +12 -5
  24. package/dist/PointerLockControls.d.ts.map +1 -1
  25. package/dist/PointerLockControls.js +30 -11
  26. package/dist/PointerLockControls.js.map +1 -1
  27. package/dist/SelectionManager.d.ts +22 -1
  28. package/dist/SelectionManager.d.ts.map +1 -1
  29. package/dist/SelectionManager.js +64 -6
  30. package/dist/SelectionManager.js.map +1 -1
  31. package/dist/TransformControls.d.ts +135 -1
  32. package/dist/TransformControls.d.ts.map +1 -1
  33. package/dist/TransformControls.js +534 -10
  34. package/dist/TransformControls.js.map +1 -1
  35. package/dist/index.d.ts +7 -2
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +1 -1
  38. package/dist/index.js.map +1 -1
  39. package/package.json +2 -2
@@ -8,7 +8,7 @@ export interface ThreeCompatControlState {
8
8
  readonly position: ControlVector3;
9
9
  readonly rotation: ControlVector3;
10
10
  readonly zoom: number;
11
- readonly enabled: boolean;
11
+ enabled: boolean;
12
12
  }
13
13
  export declare function createDefaultControlState(): ThreeCompatControlState;
14
14
  //# sourceMappingURL=ControlState.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ControlState.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/ControlState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,yBAAyB,IAAI,uBAAuB,CAQnE"}
1
+ {"version":3,"file":"ControlState.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/ControlState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,yBAAyB,IAAI,uBAAuB,CAQnE"}
@@ -1,6 +1,26 @@
1
- import { type ControlObject3DLike, type Vector3Like } from "./NativeControlTypes";
1
+ import type { ControlObject3DLike, Vector3Like } from "./NativeControlTypes";
2
+ import { TransformControls } from "./TransformControls";
3
+ export interface DragControlsDeprecation {
4
+ readonly status: "deprecated";
5
+ readonly replacement: "@aura3d/input InteractionSystem + @aura3d/editor-runtime transform commands";
6
+ readonly limitation: string;
7
+ }
8
+ export declare const DRAG_CONTROLS_DEPRECATION: DragControlsDeprecation;
9
+ export interface DragControlsOptions {
10
+ readonly transforms?: TransformControls;
11
+ }
12
+ /**
13
+ * A compatibility shim that delegates explicit translation deltas to the real
14
+ * command-backed `TransformControls`.
15
+ *
16
+ * @deprecated This is not a browser/Three.js DragControls implementation. Use
17
+ * `InteractionSystem` from `@aura3d/input` for drag lifecycle events and
18
+ * `TransformControls` for recorded object mutation.
19
+ */
2
20
  export declare class DragControls {
3
21
  dragging: ControlObject3DLike | null;
22
+ readonly transforms: TransformControls;
23
+ constructor(options?: DragControlsOptions);
4
24
  start(object: ControlObject3DLike): void;
5
25
  drag(delta: Vector3Like): void;
6
26
  end(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"DragControls.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/DragControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,mBAAmB,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAE9F,qBAAa,YAAY;IACvB,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAQ;IAE5C,KAAK,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAIxC,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAI9B,GAAG,IAAI,IAAI;CAGZ"}
1
+ {"version":3,"file":"DragControls.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/DragControls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,6EAA6E,CAAC;IACpG,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,yBAAyB,EAAE,uBAItC,CAAC;AAEH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC;CACzC;AAED;;;;;;;GAOG;AACH,qBAAa,YAAY;IACvB,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAQ;IAC5C,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;gBAE3B,OAAO,GAAE,mBAAwB;IAI7C,KAAK,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAMxC,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAK9B,GAAG,IAAI,IAAI;CAIZ"}
@@ -1,14 +1,36 @@
1
- import { addVector3 } from "./NativeControlTypes.js";
1
+ import { TransformControls } from "./TransformControls.js";
2
+ export const DRAG_CONTROLS_DEPRECATION = Object.freeze({
3
+ status: "deprecated",
4
+ replacement: "@aura3d/input InteractionSystem + @aura3d/editor-runtime transform commands",
5
+ limitation: "The compatibility class applies explicit world-space deltas; it does not bind DOM events, raycast draggable objects, or implement Three.js DragControls."
6
+ });
7
+ /**
8
+ * A compatibility shim that delegates explicit translation deltas to the real
9
+ * command-backed `TransformControls`.
10
+ *
11
+ * @deprecated This is not a browser/Three.js DragControls implementation. Use
12
+ * `InteractionSystem` from `@aura3d/input` for drag lifecycle events and
13
+ * `TransformControls` for recorded object mutation.
14
+ */
2
15
  export class DragControls {
3
16
  dragging = null;
17
+ transforms;
18
+ constructor(options = {}) {
19
+ this.transforms = options.transforms ?? new TransformControls();
20
+ }
4
21
  start(object) {
5
22
  this.dragging = object;
23
+ this.transforms.attach(object);
24
+ this.transforms.setMode("translate");
6
25
  }
7
26
  drag(delta) {
8
- addVector3(this.dragging?.position, delta);
27
+ if (!this.dragging)
28
+ return;
29
+ this.transforms.apply(delta);
9
30
  }
10
31
  end() {
11
32
  this.dragging = null;
33
+ this.transforms.detach();
12
34
  }
13
35
  }
14
36
  //# sourceMappingURL=DragControls.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DragControls.js","sourceRoot":"","sources":["../../../../packages/controls/src/DragControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA8C,MAAM,sBAAsB,CAAC;AAE9F,MAAM,OAAO,YAAY;IACvB,QAAQ,GAA+B,IAAI,CAAC;IAE5C,KAAK,CAAC,MAA2B;QAC/B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,KAAkB;QACrB,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,GAAG;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;CACF"}
1
+ {"version":3,"file":"DragControls.js","sourceRoot":"","sources":["../../../../packages/controls/src/DragControls.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAQxD,MAAM,CAAC,MAAM,yBAAyB,GAA4B,MAAM,CAAC,MAAM,CAAC;IAC9E,MAAM,EAAE,YAAY;IACpB,WAAW,EAAE,6EAA6E;IAC1F,UAAU,EAAE,0JAA0J;CACvK,CAAC,CAAC;AAMH;;;;;;;GAOG;AACH,MAAM,OAAO,YAAY;IACvB,QAAQ,GAA+B,IAAI,CAAC;IACnC,UAAU,CAAoB;IAEvC,YAAY,UAA+B,EAAE;QAC3C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,iBAAiB,EAAE,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,MAA2B;QAC/B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,CAAC,KAAkB;QACrB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC3B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,GAAG;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;IAC3B,CAAC;CACF"}
@@ -1,5 +1,14 @@
1
- import { FlyControls } from "./FlyControls";
1
+ import { type FirstPersonControlsOptions } from "@aura3d/input";
2
+ import { FlyControls, type FlyCameraLike } from "./FlyControls";
3
+ export type { FirstPersonControlsOptions };
4
+ /**
5
+ * First-person navigation delegated to `@aura3d/input`.
6
+ *
7
+ * `look()` accepts angular deltas for compatibility; `applyInput()` accepts
8
+ * raw input snapshots and uses the configured input-engine look speed.
9
+ */
2
10
  export declare class FirstPersonControls extends FlyControls {
11
+ constructor(camera?: FlyCameraLike, options?: FirstPersonControlsOptions);
3
12
  look(deltaX: number, deltaY: number): void;
4
13
  }
5
14
  //# sourceMappingURL=FirstPersonControls.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FirstPersonControls.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/FirstPersonControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,qBAAa,mBAAoB,SAAQ,WAAW;IAClD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAI3C"}
1
+ {"version":3,"file":"FirstPersonControls.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/FirstPersonControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAEhE,YAAY,EAAE,0BAA0B,EAAE,CAAC;AAE3C;;;;;GAKG;AACH,qBAAa,mBAAoB,SAAQ,WAAW;gBACtC,MAAM,CAAC,EAAE,aAAa,EAAE,OAAO,GAAE,0BAA+B;IAc5E,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAG3C"}
@@ -1,8 +1,24 @@
1
+ import { FirstPersonControls as InputFirstPersonControls } from "@aura3d/input";
1
2
  import { FlyControls } from "./FlyControls.js";
3
+ /**
4
+ * First-person navigation delegated to `@aura3d/input`.
5
+ *
6
+ * `look()` accepts angular deltas for compatibility; `applyInput()` accepts
7
+ * raw input snapshots and uses the configured input-engine look speed.
8
+ */
2
9
  export class FirstPersonControls extends FlyControls {
10
+ constructor(camera, options = {}) {
11
+ super(camera, {
12
+ movementSpeed: options.moveSpeed,
13
+ lookSpeed: options.lookSpeed
14
+ });
15
+ this.replaceDelegate(new InputFirstPersonControls(this.controlledCamera, {
16
+ ...options,
17
+ moveSpeed: 1
18
+ }), options.lookSpeed ?? 0.002);
19
+ }
3
20
  look(deltaX, deltaY) {
4
- this.state.rotation.y += deltaX;
5
- this.state.rotation.x += deltaY;
21
+ this.lookByRadians(deltaX, deltaY, 0);
6
22
  }
7
23
  }
8
24
  //# sourceMappingURL=FirstPersonControls.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FirstPersonControls.js","sourceRoot":"","sources":["../../../../packages/controls/src/FirstPersonControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,OAAO,mBAAoB,SAAQ,WAAW;IAClD,IAAI,CAAC,MAAc,EAAE,MAAc;QACjC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC;IAClC,CAAC;CACF"}
1
+ {"version":3,"file":"FirstPersonControls.js","sourceRoot":"","sources":["../../../../packages/controls/src/FirstPersonControls.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,IAAI,wBAAwB,EAEhD,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAsB,MAAM,eAAe,CAAC;AAIhE;;;;;GAKG;AACH,MAAM,OAAO,mBAAoB,SAAQ,WAAW;IAClD,YAAY,MAAsB,EAAE,UAAsC,EAAE;QAC1E,KAAK,CAAC,MAAM,EAAE;YACZ,aAAa,EAAE,OAAO,CAAC,SAAS;YAChC,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,CAClB,IAAI,wBAAwB,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAClD,GAAG,OAAO;YACV,SAAS,EAAE,CAAC;SACb,CAAC,EACF,OAAO,CAAC,SAAS,IAAI,KAAK,CAC3B,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAc,EAAE,MAAc;QACjC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;CACF"}
@@ -1,8 +1,50 @@
1
+ import { InputSnapshot, type EditorFlyControlsOptions } from "@aura3d/input";
1
2
  import { type ThreeCompatControlState } from "./ControlState";
3
+ import type { Vector3Like } from "./NativeControlTypes";
4
+ export interface FlyCameraLike {
5
+ readonly position: Vector3Like;
6
+ readonly rotation?: Vector3Like;
7
+ }
8
+ export interface FlyControlsOptions extends Omit<EditorFlyControlsOptions, "baseSpeed"> {
9
+ /**
10
+ * World units per second. The delegated input engine is normalized to one
11
+ * unit per second so this remains mutable for compatibility.
12
+ */
13
+ readonly movementSpeed?: number;
14
+ }
15
+ interface FlyControlsDelegate {
16
+ enabled: boolean;
17
+ update(snapshot: InputSnapshot, deltaSeconds: number): void;
18
+ dispose(): void;
19
+ }
20
+ /**
21
+ * Fly navigation backed by `@aura3d/input`'s real editor-fly implementation.
22
+ *
23
+ * Supplying a camera mutates that camera. The no-argument compatibility form
24
+ * uses `state.position`/`state.rotation` as a small in-memory camera, so it
25
+ * still exercises the same yaw-relative movement and pitch-clamping engine
26
+ * rather than duplicating the camera math path.
27
+ */
2
28
  export declare class FlyControls {
3
29
  readonly state: ThreeCompatControlState;
4
30
  movementSpeed: number;
31
+ protected readonly controlledCamera: FlyCameraLike;
32
+ protected pointerLookSpeed: number;
33
+ private delegate;
34
+ constructor(camera?: FlyCameraLike, options?: FlyControlsOptions);
35
+ /** True for every instance: even the no-camera form owns a delegated state camera. */
36
+ get isDelegated(): true;
37
+ get enabled(): boolean;
38
+ set enabled(value: boolean);
39
+ applyInput(snapshot: InputSnapshot, deltaSeconds: number): void;
5
40
  moveForward(distance: number): void;
6
41
  strafe(distance: number): void;
42
+ lift(distance: number): void;
43
+ dispose(): void;
44
+ protected replaceDelegate(delegate: FlyControlsDelegate, pointerLookSpeed: number): void;
45
+ protected lookByRadians(deltaYaw: number, deltaPitch: number, button: number): void;
46
+ private updateDelegate;
47
+ private syncState;
7
48
  }
49
+ export {};
8
50
  //# sourceMappingURL=FlyControls.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FlyControls.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/FlyControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzF,qBAAa,WAAW;IACtB,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAA+B;IACtE,aAAa,SAAK;IAElB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAInC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;CAG/B"}
1
+ {"version":3,"file":"FlyControls.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/FlyControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EACb,KAAK,wBAAwB,EAC9B,MAAM,eAAe,CAAC;AACvB,OAAO,EAA6B,KAAK,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC;CACjC;AAED,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,wBAAwB,EAAE,WAAW,CAAC;IACrF;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,UAAU,mBAAmB;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5D,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,qBAAa,WAAW;IACtB,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAA+B;IACtE,aAAa,EAAE,MAAM,CAAC;IAEtB,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,aAAa,CAAC;IACnD,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC;IACnC,OAAO,CAAC,QAAQ,CAAsB;gBAE1B,MAAM,CAAC,EAAE,aAAa,EAAE,OAAO,GAAE,kBAAuB;IAepE,sFAAsF;IACtF,IAAI,WAAW,IAAI,IAAI,CAEtB;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAGzB;IAED,UAAU,CAAC,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAI/D,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAYnC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAU9B,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAU5B,OAAO,IAAI,IAAI;IAKf,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAQxF,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAiBnF,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,SAAS;CAKlB"}
@@ -1,12 +1,115 @@
1
+ import { EditorFlyControls as InputFlyControls, InputSnapshot } from "@aura3d/input";
1
2
  import { createDefaultControlState } from "./ControlState.js";
3
+ /**
4
+ * Fly navigation backed by `@aura3d/input`'s real editor-fly implementation.
5
+ *
6
+ * Supplying a camera mutates that camera. The no-argument compatibility form
7
+ * uses `state.position`/`state.rotation` as a small in-memory camera, so it
8
+ * still exercises the same yaw-relative movement and pitch-clamping engine
9
+ * rather than duplicating the camera math path.
10
+ */
2
11
  export class FlyControls {
3
12
  state = createDefaultControlState();
4
- movementSpeed = 1;
13
+ movementSpeed;
14
+ controlledCamera;
15
+ pointerLookSpeed;
16
+ delegate;
17
+ constructor(camera, options = {}) {
18
+ this.movementSpeed = options.movementSpeed ?? 1;
19
+ this.pointerLookSpeed = options.lookSpeed ?? 0.0025;
20
+ this.controlledCamera = camera ?? {
21
+ position: this.state.position,
22
+ rotation: this.state.rotation
23
+ };
24
+ this.delegate = new InputFlyControls(this.controlledCamera, {
25
+ baseSpeed: 1,
26
+ fastMultiplier: options.fastMultiplier,
27
+ lookSpeed: options.lookSpeed
28
+ });
29
+ this.syncState();
30
+ }
31
+ /** True for every instance: even the no-camera form owns a delegated state camera. */
32
+ get isDelegated() {
33
+ return true;
34
+ }
35
+ get enabled() {
36
+ return this.state.enabled;
37
+ }
38
+ set enabled(value) {
39
+ this.state.enabled = value;
40
+ this.delegate.enabled = value;
41
+ }
42
+ applyInput(snapshot, deltaSeconds) {
43
+ this.updateDelegate(snapshot, deltaSeconds * this.movementSpeed);
44
+ }
5
45
  moveForward(distance) {
6
- this.state.position.z -= distance * this.movementSpeed;
46
+ assertFinite(distance, "forward distance");
47
+ const movement = distance * this.movementSpeed;
48
+ if (movement === 0)
49
+ return;
50
+ // The input engine's +Z convention is opposite the historical
51
+ // moveForward helper, so KeyS preserves that helper's -Z contract.
52
+ this.updateDelegate(keySnapshot(movement > 0 ? "KeyS" : "KeyW"), Math.abs(movement));
7
53
  }
8
54
  strafe(distance) {
9
- this.state.position.x += distance * this.movementSpeed;
55
+ assertFinite(distance, "strafe distance");
56
+ const movement = distance * this.movementSpeed;
57
+ if (movement === 0)
58
+ return;
59
+ this.updateDelegate(keySnapshot(movement > 0 ? "KeyD" : "KeyA"), Math.abs(movement));
60
+ }
61
+ lift(distance) {
62
+ assertFinite(distance, "lift distance");
63
+ const movement = distance * this.movementSpeed;
64
+ if (movement === 0)
65
+ return;
66
+ this.updateDelegate(keySnapshot(movement > 0 ? "KeyE" : "KeyQ"), Math.abs(movement));
67
+ }
68
+ dispose() {
69
+ this.state.enabled = false;
70
+ this.delegate.dispose();
10
71
  }
72
+ replaceDelegate(delegate, pointerLookSpeed) {
73
+ this.delegate.dispose();
74
+ this.delegate = delegate;
75
+ this.pointerLookSpeed = pointerLookSpeed;
76
+ this.delegate.enabled = this.state.enabled;
77
+ this.syncState();
78
+ }
79
+ lookByRadians(deltaYaw, deltaPitch, button) {
80
+ assertFinite(deltaYaw, "yaw delta");
81
+ assertFinite(deltaPitch, "pitch delta");
82
+ if (!this.state.enabled || (deltaYaw === 0 && deltaPitch === 0))
83
+ return;
84
+ const speed = Math.abs(this.pointerLookSpeed) > Number.EPSILON ? this.pointerLookSpeed : 1;
85
+ this.updateDelegate(new InputSnapshot({
86
+ pointer: {
87
+ deltaX: -deltaYaw / speed,
88
+ deltaY: -deltaPitch / speed,
89
+ buttons: new Map([[button, { down: true, pressed: true, released: false }]])
90
+ }
91
+ }), 0);
92
+ }
93
+ updateDelegate(snapshot, deltaSeconds) {
94
+ assertFinite(deltaSeconds, "delta seconds");
95
+ if (!this.state.enabled)
96
+ return;
97
+ this.delegate.enabled = true;
98
+ this.delegate.update(snapshot, deltaSeconds);
99
+ this.syncState();
100
+ }
101
+ syncState() {
102
+ const { position, rotation } = this.controlledCamera;
103
+ this.state.position.copy(position);
104
+ if (rotation)
105
+ this.state.rotation.copy(rotation);
106
+ }
107
+ }
108
+ function keySnapshot(code) {
109
+ return new InputSnapshot({ keys: new Set([code]) });
110
+ }
111
+ function assertFinite(value, label) {
112
+ if (!Number.isFinite(value))
113
+ throw new RangeError(`FlyControls ${label} must be finite.`);
11
114
  }
12
115
  //# sourceMappingURL=FlyControls.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FlyControls.js","sourceRoot":"","sources":["../../../../packages/controls/src/FlyControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAgC,MAAM,gBAAgB,CAAC;AAEzF,MAAM,OAAO,WAAW;IACb,KAAK,GAA4B,yBAAyB,EAAE,CAAC;IACtE,aAAa,GAAG,CAAC,CAAC;IAElB,WAAW,CAAC,QAAgB;QAC1B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;IACzD,CAAC;IAED,MAAM,CAAC,QAAgB;QACrB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;IACzD,CAAC;CACF"}
1
+ {"version":3,"file":"FlyControls.js","sourceRoot":"","sources":["../../../../packages/controls/src/FlyControls.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,19 @@
1
+ import { InputSnapshot } from "@aura3d/input";
1
2
  import { OrbitControls } from "./OrbitControls";
3
+ import type { OrbitCameraLike, OrbitControlsOptions } from "./OrbitControls";
2
4
  export declare class MapControls extends OrbitControls {
3
5
  readonly screenSpacePanning = false;
6
+ readonly hasExternalCamera: boolean;
7
+ constructor(camera?: OrbitCameraLike, options?: OrbitControlsOptions);
8
+ /**
9
+ * Apply MapControls mouse semantics through the delegated orbit engine:
10
+ * left pans, right rotates, middle dollies, and the wheel dollies.
11
+ */
12
+ applyInput(snapshot: InputSnapshot): void;
13
+ /**
14
+ * Ground-plane truck. This moves the real delegated orbit target on the XZ
15
+ * plane, including for the state-backed no-camera form.
16
+ */
4
17
  truck(deltaX: number, deltaZ: number): void;
5
18
  }
6
19
  //# sourceMappingURL=MapControls.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MapControls.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/MapControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,qBAAa,WAAY,SAAQ,aAAa;IAC5C,QAAQ,CAAC,kBAAkB,SAAS;IAEpC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAI5C"}
1
+ {"version":3,"file":"MapControls.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/MapControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAG7E,qBAAa,WAAY,SAAQ,aAAa;IAC5C,QAAQ,CAAC,kBAAkB,SAAS;IACpC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;gBAExB,MAAM,CAAC,EAAE,eAAe,EAAE,OAAO,GAAE,oBAAyB;IAQxE;;;OAGG;IACM,UAAU,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAmBlD;;;OAGG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAI5C"}
@@ -1,9 +1,47 @@
1
+ import { InputSnapshot } from "@aura3d/input";
1
2
  import { OrbitControls } from "./OrbitControls.js";
3
+ import { ControlVector3 } from "./NativeControlTypes.js";
2
4
  export class MapControls extends OrbitControls {
3
5
  screenSpacePanning = false;
6
+ hasExternalCamera;
7
+ constructor(camera, options = {}) {
8
+ // Unlike OrbitControls' deliberately retained detached compatibility mode,
9
+ // MapControls always delegates. A no-camera caller receives a state-backed
10
+ // camera so truck/orbit/dolly all use the same spherical engine.
11
+ super(camera ?? { position: new ControlVector3(0, 0, 5) }, options);
12
+ this.hasExternalCamera = camera !== undefined;
13
+ }
14
+ /**
15
+ * Apply MapControls mouse semantics through the delegated orbit engine:
16
+ * left pans, right rotates, middle dollies, and the wheel dollies.
17
+ */
18
+ applyInput(snapshot) {
19
+ const left = snapshot.button(0).down;
20
+ const middle = snapshot.button(1).down;
21
+ const right = snapshot.button(2).down;
22
+ const buttons = new Map();
23
+ if (left)
24
+ buttons.set(2, snapshot.button(0));
25
+ if (right)
26
+ buttons.set(0, snapshot.button(2));
27
+ super.applyInput(new InputSnapshot({
28
+ keys: snapshot.keys,
29
+ pointer: {
30
+ ...snapshot.pointer,
31
+ buttons,
32
+ wheelY: snapshot.pointer.wheelY + (middle ? snapshot.pointer.deltaY : 0)
33
+ },
34
+ gamepads: snapshot.gamepads
35
+ }));
36
+ }
37
+ /**
38
+ * Ground-plane truck. This moves the real delegated orbit target on the XZ
39
+ * plane, including for the state-backed no-camera form.
40
+ */
4
41
  truck(deltaX, deltaZ) {
5
- this.state.target.x += deltaX;
6
- this.state.target.z += deltaZ;
42
+ if (!this.enablePan)
43
+ return;
44
+ this.truckTarget(deltaX, deltaZ);
7
45
  }
8
46
  }
9
47
  //# sourceMappingURL=MapControls.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MapControls.js","sourceRoot":"","sources":["../../../../packages/controls/src/MapControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,OAAO,WAAY,SAAQ,aAAa;IACnC,kBAAkB,GAAG,KAAK,CAAC;IAEpC,KAAK,CAAC,MAAc,EAAE,MAAc;QAClC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC;IAChC,CAAC;CACF"}
1
+ {"version":3,"file":"MapControls.js","sourceRoot":"","sources":["../../../../packages/controls/src/MapControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,OAAO,WAAY,SAAQ,aAAa;IACnC,kBAAkB,GAAG,KAAK,CAAC;IAC3B,iBAAiB,CAAU;IAEpC,YAAY,MAAwB,EAAE,UAAgC,EAAE;QACtE,2EAA2E;QAC3E,2EAA2E;QAC3E,iEAAiE;QACjE,KAAK,CAAC,MAAM,IAAI,EAAE,QAAQ,EAAE,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACpE,IAAI,CAAC,iBAAiB,GAAG,MAAM,KAAK,SAAS,CAAC;IAChD,CAAC;IAED;;;OAGG;IACM,UAAU,CAAC,QAAuB;QACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,GAAG,EAA6F,CAAC;QACrH,IAAI,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9C,KAAK,CAAC,UAAU,CAAC,IAAI,aAAa,CAAC;YACjC,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,OAAO,EAAE;gBACP,GAAG,QAAQ,CAAC,OAAO;gBACnB,OAAO;gBACP,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;aACzE;YACD,QAAQ,EAAE,QAAQ,CAAC,QAAQ;SAC5B,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAc,EAAE,MAAc;QAClC,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAC5B,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;CACF"}
@@ -1,11 +1,65 @@
1
+ import { InputSnapshot, type OrbitControlsOptions } from "@aura3d/input";
1
2
  import { type ThreeCompatControlState } from "./ControlState";
3
+ import type { Vector3Like } from "./NativeControlTypes";
4
+ export type { OrbitControlsOptions };
5
+ export interface OrbitCameraLike {
6
+ position: Vector3Like;
7
+ lookAt?(target: Vector3Like): void;
8
+ }
9
+ /**
10
+ * Three.js-compatible orbit controls.
11
+ *
12
+ * Two modes:
13
+ *
14
+ * - Camera-attached (`new OrbitControls(camera, options)`): all motion is
15
+ * delegated to the `@aura3d/input` orbit implementation, which owns the real
16
+ * spherical camera math, distance/polar clamping, and `saveState`/`reset`.
17
+ * `state` mirrors the camera the engine produced. This is the supported path.
18
+ * - Detached (`new OrbitControls()`): there is no camera to drive, so
19
+ * `rotate`/`pan`/`dolly` only accumulate bookkeeping numbers on `state`.
20
+ * Those numbers are not a camera pose and carry no parity claim. This mode
21
+ * exists so `TrackballControls` and existing detached callers keep working;
22
+ * new code should attach a camera.
23
+ */
2
24
  export declare class OrbitControls {
3
25
  readonly state: ThreeCompatControlState;
4
26
  enablePan: boolean;
5
27
  enableZoom: boolean;
6
28
  enableRotate: boolean;
29
+ private readonly engine;
30
+ private attachedCamera;
31
+ constructor(camera?: OrbitCameraLike, options?: OrbitControlsOptions);
32
+ /** True when a camera is attached and motion is delegated to the real engine. */
33
+ get isCameraAttached(): boolean;
34
+ /**
35
+ * Drive the controls from an input snapshot. Camera-attached only; a detached
36
+ * instance has no camera to move and ignores the snapshot.
37
+ *
38
+ * Named `applyInput` rather than `update` because `TrackballControls`
39
+ * overrides `update(deltaSeconds)` with damping-tick semantics.
40
+ */
41
+ applyInput(snapshot: InputSnapshot): void;
7
42
  rotate(deltaX: number, deltaY: number): void;
8
43
  pan(deltaX: number, deltaY: number): void;
9
44
  dolly(scale: number): void;
45
+ /** Camera-attached only; returns 0 when detached. */
46
+ getAzimuthalAngle(): number;
47
+ /** Camera-attached only; returns 0 when detached. */
48
+ getPolarAngle(): number;
49
+ /** Camera-attached only; returns 0 when detached. */
50
+ getDistance(): number;
51
+ /** Camera-attached only; no-op when detached. */
52
+ saveState(): void;
53
+ /** Camera-attached only; no-op when detached. */
54
+ reset(): void;
55
+ dispose(): void;
56
+ /**
57
+ * Move the orbit target on the XZ ground plane. Camera-attached instances
58
+ * move the engine target (and therefore the camera); detached instances only
59
+ * update `state.target` bookkeeping.
60
+ */
61
+ protected truckTarget(deltaX: number, deltaZ: number): void;
62
+ private pushFlags;
63
+ private syncState;
10
64
  }
11
65
  //# sourceMappingURL=OrbitControls.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OrbitControls.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/OrbitControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzF,qBAAa,aAAa;IACxB,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAA+B;IACtE,SAAS,UAAQ;IACjB,UAAU,UAAQ;IAClB,YAAY,UAAQ;IAEpB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAM5C,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAMzC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAI3B"}
1
+ {"version":3,"file":"OrbitControls.d.ts","sourceRoot":"","sources":["../../../../packages/controls/src/OrbitControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAwC,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC/G,OAAO,EAA6B,KAAK,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAErC,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,CAAC;IACtB,MAAM,CAAC,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;CACpC;AAYD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,aAAa;IACxB,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAA+B;IACtE,SAAS,UAAQ;IACjB,UAAU,UAAQ;IAClB,YAAY,UAAQ;IAEpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,cAAc,CAA8B;gBAExC,MAAM,CAAC,EAAE,eAAe,EAAE,OAAO,GAAE,oBAAyB;IASxE,iFAAiF;IACjF,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED;;;;;;OAMG;IACH,UAAU,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAQzC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAY5C,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAYzC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAW1B,qDAAqD;IACrD,iBAAiB,IAAI,MAAM;IAI3B,qDAAqD;IACrD,aAAa,IAAI,MAAM;IAIvB,qDAAqD;IACrD,WAAW,IAAI,MAAM;IAIrB,iDAAiD;IACjD,SAAS,IAAI,IAAI;IAIjB,iDAAiD;IACjD,KAAK,IAAI,IAAI;IAMb,OAAO,IAAI,IAAI;IAIf;;;;OAIG;IACH,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAa3D,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,SAAS;CAWlB"}