@needle-tools/engine 2.37.0-pre → 2.38.0-pre

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 (82) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/needle-engine.d.ts +80 -13
  3. package/dist/needle-engine.js +349 -349
  4. package/dist/needle-engine.js.map +4 -4
  5. package/dist/needle-engine.min.js +25 -25
  6. package/dist/needle-engine.min.js.map +4 -4
  7. package/lib/engine/engine_addressables.d.ts +3 -1
  8. package/lib/engine/engine_addressables.js +12 -5
  9. package/lib/engine/engine_addressables.js.map +1 -1
  10. package/lib/engine/engine_element.js +3 -2
  11. package/lib/engine/engine_element.js.map +1 -1
  12. package/lib/engine/engine_element_overlay.js +4 -3
  13. package/lib/engine/engine_element_overlay.js.map +1 -1
  14. package/lib/engine/engine_input.d.ts +2 -0
  15. package/lib/engine/engine_input.js +14 -3
  16. package/lib/engine/engine_input.js.map +1 -1
  17. package/lib/engine/engine_physics.d.ts +2 -4
  18. package/lib/engine/engine_physics.js +75 -30
  19. package/lib/engine/engine_physics.js.map +1 -1
  20. package/lib/engine/engine_physics.types.d.ts +7 -0
  21. package/lib/engine/engine_physics.types.js +8 -0
  22. package/lib/engine/engine_physics.types.js.map +1 -1
  23. package/lib/engine/engine_setup.d.ts +7 -1
  24. package/lib/engine/engine_setup.js +10 -2
  25. package/lib/engine/engine_setup.js.map +1 -1
  26. package/lib/engine/engine_types.d.ts +1 -1
  27. package/lib/engine/engine_types.js.map +1 -1
  28. package/lib/engine-components/Animation.d.ts +1 -0
  29. package/lib/engine-components/Animation.js +7 -0
  30. package/lib/engine-components/Animation.js.map +1 -1
  31. package/lib/engine-components/AnimatorController.js +14 -7
  32. package/lib/engine-components/AnimatorController.js.map +1 -1
  33. package/lib/engine-components/Camera.d.ts +1 -0
  34. package/lib/engine-components/Camera.js +20 -5
  35. package/lib/engine-components/Camera.js.map +1 -1
  36. package/lib/engine-components/CharacterController.d.ts +31 -0
  37. package/lib/engine-components/CharacterController.js +167 -0
  38. package/lib/engine-components/CharacterController.js.map +1 -0
  39. package/lib/engine-components/Collider.d.ts +10 -4
  40. package/lib/engine-components/Collider.js +18 -8
  41. package/lib/engine-components/Collider.js.map +1 -1
  42. package/lib/engine-components/Light.d.ts +2 -0
  43. package/lib/engine-components/Light.js +13 -2
  44. package/lib/engine-components/Light.js.map +1 -1
  45. package/lib/engine-components/Renderer.js +4 -0
  46. package/lib/engine-components/Renderer.js.map +1 -1
  47. package/lib/engine-components/RigidBody.d.ts +6 -1
  48. package/lib/engine-components/RigidBody.js +62 -25
  49. package/lib/engine-components/RigidBody.js.map +1 -1
  50. package/lib/engine-components/SmoothFollow.d.ts +2 -1
  51. package/lib/engine-components/SmoothFollow.js +25 -17
  52. package/lib/engine-components/SmoothFollow.js.map +1 -1
  53. package/lib/engine-components/WebXR.js +3 -4
  54. package/lib/engine-components/WebXR.js.map +1 -1
  55. package/lib/engine-components/codegen/components.d.ts +3 -0
  56. package/lib/engine-components/codegen/components.js +3 -0
  57. package/lib/engine-components/codegen/components.js.map +1 -1
  58. package/package.json +1 -1
  59. package/src/engine/codegen/register_types.js +12 -0
  60. package/src/engine/dist/engine_physics.js +739 -0
  61. package/src/engine/dist/engine_setup.js +777 -0
  62. package/src/engine/engine_addressables.ts +18 -8
  63. package/src/engine/engine_element.ts +3 -2
  64. package/src/engine/engine_element_overlay.ts +4 -3
  65. package/src/engine/engine_input.ts +12 -3
  66. package/src/engine/engine_physics.ts +82 -47
  67. package/src/engine/engine_physics.types.ts +9 -0
  68. package/src/engine/engine_setup.ts +26 -17
  69. package/src/engine/engine_types.ts +2 -1
  70. package/src/engine-components/Animation.ts +8 -0
  71. package/src/engine-components/AnimatorController.ts +16 -11
  72. package/src/engine-components/Camera.ts +21 -4
  73. package/src/engine-components/CharacterController.ts +171 -0
  74. package/src/engine-components/Collider.ts +22 -12
  75. package/src/engine-components/Light.ts +17 -3
  76. package/src/engine-components/Renderer.ts +5 -1
  77. package/src/engine-components/RigidBody.ts +63 -29
  78. package/src/engine-components/SmoothFollow.ts +21 -18
  79. package/src/engine-components/WebXR.ts +3 -4
  80. package/src/engine-components/codegen/components.ts +3 -0
  81. package/src/engine-components/dist/CharacterController.js +123 -0
  82. package/src/engine-components/dist/RigidBody.js +458 -0
package/CHANGELOG.md CHANGED
@@ -4,6 +4,27 @@ All notable changes to this package will be documented in this file.
4
4
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5
5
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [2.38.0-pre] - 2022-11-02
8
+ - Add ``context.isInAR`` and ``context.isInVR`` properties
9
+ - Add physics capsule collider support
10
+ - Add basic character controller implementation (experimental)
11
+ - Add ``context.input.getMouseWheelDeltaY()``
12
+ - Add: SmoothFollow option to restrict following on certain axes only for position
13
+ - Add: ``Rigidbody.teleport`` method to properly reset internal state
14
+ - Add: load glbs using build hash (appended as ``?v=123``)
15
+ - Change: Collision event args now exposes contacts array
16
+ - Fix Exit AR (X) button not showing up
17
+ - Fix physics collider center offset
18
+ - Fix removing colliders and rigidbodies throwing error (when trying to access properties for already removed bodies)
19
+ - Fix bug in AnimatorController causing broken animations when the same clip is used in multiple states (caused by ``mixer.uncacheCip``)
20
+ - Fix rigidbody friction allowing for physical bodies being transported on e.g. platforms
21
+ - Fix ``onTriggerStay`` being invoked with the correct collider argument
22
+ - Fix AnimatorController exit time not being used properly
23
+ - Fix AnimatorController not checking all possible transitions if one transition did match conditions but could not be made due to exit time setting
24
+ - Fix ``Renderer.sharedMaterials`` not handling SkinnedMeshRenderer
25
+ - Fix environment blend mode for mozilla XR browser on iOS
26
+ - Fix: Camera now removing self from being set as currently rendering in ``onDisable``
27
+
7
28
  ## [2.37.0-pre] - 2022-10-28
8
29
  - Add: rapier physics backend and overall improved physics system like constraint support, fixed physics collider updates and synchronization between rendering and physics world or animation of physical bodies
9
30
  - Remove: cannon-es
@@ -40,6 +40,13 @@ declare module "engine/engine_physics.types" {
40
40
  FreezeRotation = 112,
41
41
  FreezeAll = 126
42
42
  }
43
+ export enum Axes {
44
+ None = 0,
45
+ X = 2,
46
+ Y = 4,
47
+ Z = 8,
48
+ All = -1
49
+ }
43
50
  }
44
51
  declare module "engine/engine_types" {
45
52
  import { Camera, Color, Material, Object3D, Vector3, Quaternion } from "three";
@@ -167,7 +174,7 @@ declare module "engine/engine_types" {
167
174
  constructor(localPt: Vec3, dist: number, normal: Vec3);
168
175
  }
169
176
  export class Collision {
170
- private readonly contacts;
177
+ readonly contacts: ContactPoint[];
171
178
  constructor(obj: Object3D, otherCollider: ICollider, contacts: ContactPoint[]);
172
179
  readonly me: Object3D;
173
180
  private _collider;
@@ -423,6 +430,7 @@ declare module "engine/engine_input" {
423
430
  getIsTouch(i: number): boolean;
424
431
  getTouchesPressedCount(): number;
425
432
  getMouseWheelChanged(i?: number): boolean;
433
+ getMouseWheelDeltaY(i?: number): number;
426
434
  getPointerEvent(i: number): Event | undefined;
427
435
  private context;
428
436
  private _pointerDown;
@@ -440,6 +448,7 @@ declare module "engine/engine_input" {
440
448
  private _pointerIds;
441
449
  private _pointerTypes;
442
450
  private _mouseWheelChanged;
451
+ private _mouseWheelDeltaY;
443
452
  private _pointerEvent;
444
453
  getKeyDown(): string | null;
445
454
  getKeyPressed(): string | null;
@@ -768,6 +777,7 @@ declare module "engine/engine_physics" {
768
777
  raycast(options?: RaycastOptions | null): Array<Intersection>;
769
778
  private _tempPosition;
770
779
  private _tempQuaternion;
780
+ private _tempScale;
771
781
  private _tempMatrix;
772
782
  private static _didLoadPhysicsEngine;
773
783
  private _isUpdatingPhysicsWorld;
@@ -783,6 +793,7 @@ declare module "engine/engine_physics" {
783
793
  createWorld(): Promise<void>;
784
794
  addBoxCollider(collider: ICollider, center: Vector3, size: Vector3): void;
785
795
  addSphereCollider(collider: ICollider, center: Vector3, radius: number): void;
796
+ addCapsuleCollider(collider: ICollider, center: Vector3, height: number, radius: number): void;
786
797
  addMeshCollider(collider: ICollider, mesh: Mesh, convex: boolean): void;
787
798
  private createCollider;
788
799
  private getRigidbody;
@@ -801,10 +812,6 @@ declare module "engine/engine_physics" {
801
812
  private static _matricesBuffer;
802
813
  private getRigidbodyRelativeMatrix;
803
814
  }
804
- export interface IColliderProvider {
805
- getCollider(obj: Object3D): ICollider;
806
- }
807
- export function registerColliderProvider(prov: IColliderProvider): void;
808
815
  }
809
816
  declare module "engine/engine_time" {
810
817
  export class Time {
@@ -1563,9 +1570,11 @@ declare module "engine/engine_addressables" {
1563
1570
  private _glbRoot?;
1564
1571
  private _uri;
1565
1572
  private _progressListeners;
1573
+ private _hash?;
1574
+ private _hashedUri;
1566
1575
  private _isLoadingRawBinary;
1567
1576
  private _rawBinary?;
1568
- constructor(uri: string);
1577
+ constructor(uri: string, hash?: string);
1569
1578
  private onResolvePrefab;
1570
1579
  private get mustLoad();
1571
1580
  isLoaded(): boolean | ArrayBuffer;
@@ -1666,6 +1675,7 @@ declare module "engine/engine_setup" {
1666
1675
  alias: string | undefined | null;
1667
1676
  domElement: HTMLElement | null;
1668
1677
  renderer?: THREE.WebGLRenderer;
1678
+ hash?: string;
1669
1679
  constructor(domElement: HTMLElement | null);
1670
1680
  }
1671
1681
  export enum FrameEvent {
@@ -1674,7 +1684,8 @@ declare module "engine/engine_setup" {
1674
1684
  LateUpdate = 2,
1675
1685
  OnBeforeRender = 3,
1676
1686
  OnAfterRender = 4,
1677
- PhysicsStep = 10
1687
+ PrePhysicsStep = 9,
1688
+ PostPhysicsStep = 10
1678
1689
  }
1679
1690
  export enum XRSessionMode {
1680
1691
  ImmersiveVR = "immersive-vr",
@@ -1689,6 +1700,8 @@ declare module "engine/engine_setup" {
1689
1700
  name: string;
1690
1701
  alias: string | undefined | null;
1691
1702
  isManagedExternally: boolean;
1703
+ /** used to append to loaded assets */
1704
+ hash?: string;
1692
1705
  domElement: HTMLElement;
1693
1706
  get resolutionScaleFactor(): number;
1694
1707
  /** use to scale the resolution up or down of the renderer. default is 1 */
@@ -1700,6 +1713,8 @@ declare module "engine/engine_setup" {
1700
1713
  get domY(): number;
1701
1714
  get isInXR(): boolean;
1702
1715
  xrSessionMode: XRSessionMode | undefined;
1716
+ get isInVR(): boolean;
1717
+ get isInAR(): boolean;
1703
1718
  get xrSession(): THREE.XRSession | null;
1704
1719
  get arOverlayElement(): HTMLElement;
1705
1720
  scene: THREE.Scene;
@@ -2070,6 +2085,7 @@ declare module "engine-components/Animation" {
2070
2085
  start(): void;
2071
2086
  update(): void;
2072
2087
  getAction(name: string): THREE.AnimationAction | undefined | null;
2088
+ get isPlaying(): boolean;
2073
2089
  play(clipOrNumber: AnimationClip | number | string, options?: PlayOptions): Promise<AnimationAction> | void;
2074
2090
  internalOnPlay(action: AnimationAction, options?: PlayOptions): Promise<AnimationAction>;
2075
2091
  private tryFindHandle;
@@ -2479,6 +2495,7 @@ declare module "engine-components/Camera" {
2479
2495
  get cam(): THREE.PerspectiveCamera | THREE.OrthographicCamera;
2480
2496
  awake(): void;
2481
2497
  onEnable(): void;
2498
+ onDisable(): void;
2482
2499
  buildCamera(): void;
2483
2500
  applyClearFlagsIfIsActiveCamera(): void;
2484
2501
  private environmentIsTransparent;
@@ -2599,8 +2616,13 @@ declare module "engine-components/RigidBody" {
2599
2616
  onDisable(): void;
2600
2617
  onDestroy(): void;
2601
2618
  onValidate(): void;
2602
- earlyUpdate(): void;
2619
+ beforePhysics(): Generator<undefined, void, unknown>;
2603
2620
  private get body();
2621
+ teleport(pt: {
2622
+ x: number;
2623
+ y: number;
2624
+ z: number;
2625
+ }, localspace?: boolean): void;
2604
2626
  resetForces(): void;
2605
2627
  resetTorques(): void;
2606
2628
  resetVelocities(): void;
@@ -2628,7 +2650,7 @@ declare module "engine-components/RigidBody" {
2628
2650
  declare module "engine-components/Collider" {
2629
2651
  import { Behaviour } from "engine-components/Component";
2630
2652
  import { Rigidbody } from "engine-components/RigidBody";
2631
- import { Mesh } from "three";
2653
+ import { Mesh, Vector3 } from "three";
2632
2654
  import { ICollider } from "engine/engine_types";
2633
2655
  export class Collider extends Behaviour implements ICollider {
2634
2656
  get isCollider(): any;
@@ -2641,12 +2663,12 @@ declare module "engine-components/Collider" {
2641
2663
  }
2642
2664
  export class SphereCollider extends Collider {
2643
2665
  radius: number;
2644
- center: THREE.Vector3;
2666
+ center: Vector3;
2645
2667
  onEnable(): void;
2646
2668
  }
2647
2669
  export class BoxCollider extends Collider {
2648
- size: THREE.Vector3;
2649
- center: THREE.Vector3;
2670
+ size: Vector3;
2671
+ center: Vector3;
2650
2672
  onEnable(): void;
2651
2673
  }
2652
2674
  export class MeshCollider extends Collider {
@@ -2655,6 +2677,45 @@ declare module "engine-components/Collider" {
2655
2677
  awake(): void;
2656
2678
  onEnable(): void;
2657
2679
  }
2680
+ export class CapsuleCollider extends Collider {
2681
+ center: Vector3;
2682
+ radius: number;
2683
+ height: number;
2684
+ onEnable(): void;
2685
+ }
2686
+ }
2687
+ declare module "engine-components/CharacterController" {
2688
+ import { Vector3 } from "three";
2689
+ import { Collision } from "engine/engine_types";
2690
+ import { Behaviour } from "engine-components/Component";
2691
+ import { Rigidbody } from "engine-components/RigidBody";
2692
+ import { Animator } from "engine-components/Animator";
2693
+ export class CharacterController extends Behaviour {
2694
+ center: Vector3;
2695
+ radius: number;
2696
+ height: number;
2697
+ private _rigidbody;
2698
+ get rigidbody(): Rigidbody;
2699
+ onEnable(): void;
2700
+ move(vec: Vector3): void;
2701
+ private _activeGroundCollisions;
2702
+ onCollisionEnter(col: Collision): void;
2703
+ onCollisionExit(col: Collision): void;
2704
+ get isGrounded(): boolean;
2705
+ }
2706
+ export class CharacterControllerInput extends Behaviour {
2707
+ controller?: CharacterController;
2708
+ movementSpeed: number;
2709
+ rotationSpeed: number;
2710
+ jumpForce: number;
2711
+ animator?: Animator;
2712
+ private _currentSpeed;
2713
+ private _currentAngularSpeed;
2714
+ private _temp;
2715
+ private _jumpCount;
2716
+ update(): void;
2717
+ private _raycastOptions;
2718
+ }
2658
2719
  }
2659
2720
  declare module "engine-components/ui/PointerEvents" {
2660
2721
  export interface IInputEventArgs {
@@ -3871,6 +3932,8 @@ declare module "engine-components/Light" {
3871
3932
  set shadowNormalBias(val: number);
3872
3933
  get shadowNormalBias(): number;
3873
3934
  private _shadowNormalBias;
3935
+ /** when enabled this will remove the multiplication when setting the shadow bias settings initially */
3936
+ private _overrideShadowBiasSettings;
3874
3937
  set shadows(val: LightShadows);
3875
3938
  get shadows(): LightShadows;
3876
3939
  private _shadows;
@@ -4308,14 +4371,15 @@ declare module "engine-components/Skybox" {
4308
4371
  declare module "engine-components/SmoothFollow" {
4309
4372
  import { Behaviour } from "engine-components/Component";
4310
4373
  import * as THREE from "three";
4374
+ import { Axes } from "engine/engine_physics.types";
4311
4375
  export class SmoothFollow extends Behaviour {
4312
4376
  target: THREE.Object3D | null;
4313
4377
  followFactor: number;
4314
4378
  rotateFactor: number;
4379
+ positionAxes: Axes;
4315
4380
  flipForward: boolean;
4316
4381
  private static _invertForward;
4317
4382
  private _firstUpdate;
4318
- onEnable(): void;
4319
4383
  onBeforeRender(): void;
4320
4384
  updateNow(hard: boolean): void;
4321
4385
  }
@@ -5332,10 +5396,13 @@ declare module "engine-components/codegen/components" {
5332
5396
  export { BasicIKConstraint } from "engine-components/BasicIKConstraint";
5333
5397
  export { BoxHelperComponent } from "engine-components/BoxHelperComponent";
5334
5398
  export { Camera } from "engine-components/Camera";
5399
+ export { CharacterController } from "engine-components/CharacterController";
5400
+ export { CharacterControllerInput } from "engine-components/CharacterController";
5335
5401
  export { Collider } from "engine-components/Collider";
5336
5402
  export { SphereCollider } from "engine-components/Collider";
5337
5403
  export { BoxCollider } from "engine-components/Collider";
5338
5404
  export { MeshCollider } from "engine-components/Collider";
5405
+ export { CapsuleCollider } from "engine-components/Collider";
5339
5406
  export { DeleteBox } from "engine-components/DeleteBox";
5340
5407
  export { Deletable } from "engine-components/DeleteBox";
5341
5408
  export { DeviceFlag } from "engine-components/DeviceFlag";