@gg-web-engine/core 0.0.28 → 0.0.30

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 (67) hide show
  1. package/dist/2d/components/physics/i-physics-world-2d.component.d.ts +2 -3
  2. package/dist/2d/components/physics/i-rigid-body-2d.component.d.ts +2 -2
  3. package/dist/2d/components/physics/i-trigger-2d.component.d.ts +4 -5
  4. package/dist/2d/components/rendering/i-display-object-2d.component.d.ts +2 -2
  5. package/dist/2d/components/rendering/i-renderer-2d.component.d.ts +2 -2
  6. package/dist/2d/components/rendering/i-visual-scene-2d.component.d.ts +3 -5
  7. package/dist/2d/entities/controllers/entity-2d-positioning.animator.d.ts +2 -2
  8. package/dist/2d/entities/entity-2d.d.ts +6 -9
  9. package/dist/2d/entities/i-renderable-2d.entity.d.ts +2 -3
  10. package/dist/2d/entities/renderer-2d.entity.d.ts +2 -3
  11. package/dist/2d/entities/trigger-2d.entity.d.ts +4 -3
  12. package/dist/2d/factories.d.ts +13 -10
  13. package/dist/2d/factories.js +8 -5
  14. package/dist/2d/gg-2d-world.d.ts +22 -6
  15. package/dist/2d/gg-2d-world.js +2 -2
  16. package/dist/3d/components/physics/i-physics-world-3d.component.d.ts +3 -5
  17. package/dist/3d/components/physics/i-raycast-vehicle.component.d.ts +3 -2
  18. package/dist/3d/components/physics/i-rigid-body-3d.component.d.ts +2 -2
  19. package/dist/3d/components/physics/i-trigger-3d.component.d.ts +4 -5
  20. package/dist/3d/components/rendering/i-camera.component.d.ts +2 -2
  21. package/dist/3d/components/rendering/i-display-object-3d.component.d.ts +2 -2
  22. package/dist/3d/components/rendering/i-renderer-3d.component.d.ts +3 -4
  23. package/dist/3d/components/rendering/i-visual-scene-3d.component.d.ts +4 -8
  24. package/dist/3d/entities/controllers/animators/camera-3d.animator.d.ts +6 -6
  25. package/dist/3d/entities/controllers/animators/entity-3d-positioning.animator.d.ts +2 -2
  26. package/dist/3d/entities/controllers/input/free-camera.controller.d.ts +1 -1
  27. package/dist/3d/entities/controllers/input/free-camera.controller.js +1 -1
  28. package/dist/3d/entities/controllers/input/orbit-camera.controller.d.ts +1 -1
  29. package/dist/3d/entities/controllers/input/orbit-camera.controller.js +1 -1
  30. package/dist/3d/entities/entity-3d.d.ts +5 -6
  31. package/dist/3d/entities/gg-car/gg-car.entity.d.ts +9 -8
  32. package/dist/3d/entities/gg-car/gg-car.entity.js +20 -8
  33. package/dist/3d/entities/i-renderable-3d.entity.d.ts +2 -3
  34. package/dist/3d/entities/map-graph-3d.entity.d.ts +20 -14
  35. package/dist/3d/entities/raycast-vehicle-3d.entity.d.ts +4 -4
  36. package/dist/3d/entities/raycast-vehicle-3d.entity.js +0 -1
  37. package/dist/3d/entities/renderer-3d.entity.d.ts +3 -5
  38. package/dist/3d/entities/trigger-3d.entity.d.ts +4 -3
  39. package/dist/3d/factories.d.ts +29 -13
  40. package/dist/3d/factories.js +12 -6
  41. package/dist/3d/gg-3d-world.d.ts +28 -7
  42. package/dist/3d/gg-3d-world.js +2 -2
  43. package/dist/3d/loader.d.ts +12 -14
  44. package/dist/3d/loaders.d.ts +5 -6
  45. package/dist/3d/models/shapes.d.ts +2 -0
  46. package/dist/base/components/i-world-component.d.ts +4 -6
  47. package/dist/base/components/physics/i-body.component.d.ts +10 -7
  48. package/dist/base/components/physics/i-physics-world.component.d.ts +6 -3
  49. package/dist/base/components/physics/i-rigid-body.component.d.ts +3 -3
  50. package/dist/base/components/physics/i-trigger.component.d.ts +5 -5
  51. package/dist/base/components/rendering/i-display-object.component.d.ts +6 -6
  52. package/dist/base/components/rendering/i-renderer.component.d.ts +7 -7
  53. package/dist/base/components/rendering/i-visual-scene.component.d.ts +4 -3
  54. package/dist/base/data-structures/bitmask.d.ts +30 -0
  55. package/dist/base/data-structures/bitmask.js +55 -0
  56. package/dist/base/entities/controllers/animation-mixer.d.ts +3 -3
  57. package/dist/base/entities/i-entity.d.ts +8 -10
  58. package/dist/base/entities/i-renderable.entity.d.ts +2 -3
  59. package/dist/base/entities/i-renderer.entity.d.ts +6 -7
  60. package/dist/base/gg-world.d.ts +17 -6
  61. package/dist/base/index.d.ts +1 -0
  62. package/dist/base/index.js +1 -0
  63. package/dist/base/interfaces/i-debug-physics-drawer.d.ts +2 -2
  64. package/dist/base/math/quaternion.d.ts +14 -0
  65. package/dist/base/math/quaternion.js +18 -0
  66. package/dist/base/models/body-options.d.ts +3 -0
  67. package/package.json +1 -1
@@ -1,5 +1,4 @@
1
1
  import { IPhysicsWorldComponent, Point2 } from '../../../base';
2
- import { IPhysicsBody2dComponentFactory } from '../../factories';
3
- export interface IPhysicsWorld2dComponent extends IPhysicsWorldComponent<Point2, number> {
4
- readonly factory: IPhysicsBody2dComponentFactory;
2
+ import { PhysicsTypeDocRepo2D } from '../../gg-2d-world';
3
+ export interface IPhysicsWorld2dComponent<TypeDoc extends PhysicsTypeDocRepo2D = PhysicsTypeDocRepo2D> extends IPhysicsWorldComponent<Point2, number, TypeDoc> {
5
4
  }
@@ -1,5 +1,5 @@
1
1
  import { IRigidBodyComponent, Point2 } from '../../../base';
2
- import { IPhysicsWorld2dComponent } from './i-physics-world-2d.component';
3
- export interface IRigidBody2dComponent<PW extends IPhysicsWorld2dComponent = IPhysicsWorld2dComponent> extends IRigidBodyComponent<Point2, number, PW> {
2
+ import { PhysicsTypeDocRepo2D } from '../../gg-2d-world';
3
+ export interface IRigidBody2dComponent<TypeDoc extends PhysicsTypeDocRepo2D = PhysicsTypeDocRepo2D> extends IRigidBodyComponent<Point2, number, TypeDoc> {
4
4
  angularVelocity: number;
5
5
  }
@@ -1,8 +1,7 @@
1
1
  import { ITriggerComponent, Point2 } from '../../../base';
2
2
  import { Observable } from 'rxjs';
3
- import { IPhysicsWorld2dComponent } from './i-physics-world-2d.component';
4
- import { IRigidBody2dComponent } from './i-rigid-body-2d.component';
5
- export interface ITrigger2dComponent<PW extends IPhysicsWorld2dComponent = IPhysicsWorld2dComponent> extends ITriggerComponent<Point2, number, PW> {
6
- get onEntityEntered(): Observable<IRigidBody2dComponent>;
7
- get onEntityLeft(): Observable<IRigidBody2dComponent | null>;
3
+ import { PhysicsTypeDocRepo2D } from '../../gg-2d-world';
4
+ export interface ITrigger2dComponent<TypeDoc extends PhysicsTypeDocRepo2D = PhysicsTypeDocRepo2D> extends ITriggerComponent<Point2, number, TypeDoc> {
5
+ get onEntityEntered(): Observable<TypeDoc['rigidBody']>;
6
+ get onEntityLeft(): Observable<TypeDoc['rigidBody'] | null>;
8
7
  }
@@ -1,4 +1,4 @@
1
1
  import { IDisplayObjectComponent, Point2 } from '../../../base';
2
- import { IVisualScene2dComponent } from './i-visual-scene-2d.component';
3
- export interface IDisplayObject2dComponent<VS extends IVisualScene2dComponent = IVisualScene2dComponent> extends IDisplayObjectComponent<Point2, number, VS> {
2
+ import { VisualTypeDocRepo2D } from '../../gg-2d-world';
3
+ export interface IDisplayObject2dComponent<TypeDoc extends VisualTypeDocRepo2D = VisualTypeDocRepo2D> extends IDisplayObjectComponent<Point2, number, TypeDoc> {
4
4
  }
@@ -1,4 +1,4 @@
1
1
  import { IRendererComponent, Point2 } from '../../../base';
2
- import { IVisualScene2dComponent } from './i-visual-scene-2d.component';
3
- export declare abstract class IRenderer2dComponent<VS extends IVisualScene2dComponent = IVisualScene2dComponent> extends IRendererComponent<Point2, number, VS> {
2
+ import { VisualTypeDocRepo2D } from '../../gg-2d-world';
3
+ export declare abstract class IRenderer2dComponent<TypeDoc extends VisualTypeDocRepo2D = VisualTypeDocRepo2D> extends IRendererComponent<Point2, number, TypeDoc> {
4
4
  }
@@ -1,7 +1,5 @@
1
1
  import { IVisualSceneComponent, Point2, RendererOptions } from '../../../base';
2
- import { IGg2dObjectFactory } from '../../factories';
3
- import { IRenderer2dComponent } from './i-renderer-2d.component';
4
- export interface IVisualScene2dComponent extends IVisualSceneComponent<Point2, number> {
5
- readonly factory: IGg2dObjectFactory;
6
- createRenderer(canvas?: HTMLCanvasElement, rendererOptions?: Partial<RendererOptions>): IRenderer2dComponent;
2
+ import { VisualTypeDocRepo2D } from '../../gg-2d-world';
3
+ export interface IVisualScene2dComponent<TypeDoc extends VisualTypeDocRepo2D = VisualTypeDocRepo2D> extends IVisualSceneComponent<Point2, number, TypeDoc> {
4
+ createRenderer(canvas?: HTMLCanvasElement, rendererOptions?: Partial<RendererOptions>): TypeDoc['renderer'];
7
5
  }
@@ -1,11 +1,11 @@
1
1
  import { AnimationFunction, AnimationMixer, Point2 } from '../../../base';
2
- import { Gg2dWorld } from '../../gg-2d-world';
2
+ import { Gg2dWorld, PhysicsTypeDocRepo2D, VisualTypeDocRepo2D } from '../../gg-2d-world';
3
3
  import { Entity2d } from '../entity-2d';
4
4
  declare type Positioning2d = {
5
5
  position: Point2;
6
6
  rotation: number;
7
7
  };
8
- export declare class Entity2dPositioningAnimator<T extends Entity2d = Entity2d> extends AnimationMixer<Positioning2d> {
8
+ export declare class Entity2dPositioningAnimator<T extends Entity2d = Entity2d> extends AnimationMixer<Positioning2d, Point2, number, VisualTypeDocRepo2D, PhysicsTypeDocRepo2D> {
9
9
  entity: T;
10
10
  protected _animationFunction: AnimationFunction<Positioning2d>;
11
11
  constructor(entity: T, _animationFunction: AnimationFunction<Positioning2d>);
@@ -1,13 +1,10 @@
1
1
  import { Point2, TickOrder } from '../../base';
2
- import { IRigidBody2dComponent } from '../components/physics/i-rigid-body-2d.component';
3
- import { IDisplayObject2dComponent } from '../components/rendering/i-display-object-2d.component';
4
2
  import { IPositionable2d } from '../interfaces/i-positionable-2d';
5
3
  import { IRenderable2dEntity } from './i-renderable-2d.entity';
6
- import { IVisualScene2dComponent } from '../components/rendering/i-visual-scene-2d.component';
7
- import { IPhysicsWorld2dComponent } from '../components/physics/i-physics-world-2d.component';
8
- export declare class Entity2d<VS extends IVisualScene2dComponent = IVisualScene2dComponent, PW extends IPhysicsWorld2dComponent = IPhysicsWorld2dComponent> extends IRenderable2dEntity<VS, PW> implements IPositionable2d {
9
- readonly object2D: IDisplayObject2dComponent | null;
10
- readonly objectBody: IRigidBody2dComponent | null;
4
+ import { PhysicsTypeDocRepo2D, VisualTypeDocRepo2D } from '../gg-2d-world';
5
+ export declare class Entity2d<VTypeDoc extends VisualTypeDocRepo2D = VisualTypeDocRepo2D, PTypeDoc extends PhysicsTypeDocRepo2D = PhysicsTypeDocRepo2D> extends IRenderable2dEntity<VTypeDoc, PTypeDoc> implements IPositionable2d {
6
+ readonly object2D: VTypeDoc['displayObject'] | null;
7
+ readonly objectBody: PTypeDoc['rigidBody'] | null;
11
8
  readonly tickOrder = TickOrder.OBJECTS_BINDING;
12
9
  private _position;
13
10
  get position(): Point2;
@@ -19,6 +16,6 @@ export declare class Entity2d<VS extends IVisualScene2dComponent = IVisualScene2
19
16
  /**
20
17
  * Synchronize physics body transform with entity (and object2d if defined)
21
18
  * */
22
- protected runTransformBinding(objectBody: IRigidBody2dComponent, object2D: IDisplayObject2dComponent | null): void;
23
- constructor(object2D: IDisplayObject2dComponent | null, objectBody: IRigidBody2dComponent | null);
19
+ protected runTransformBinding(objectBody: PTypeDoc['rigidBody'], object2D: VTypeDoc['displayObject'] | null): void;
20
+ constructor(object2D: VTypeDoc['displayObject'] | null, objectBody: PTypeDoc['rigidBody'] | null);
24
21
  }
@@ -1,5 +1,4 @@
1
1
  import { IRenderableEntity, Point2 } from '../../base';
2
- import { IVisualScene2dComponent } from '../components/rendering/i-visual-scene-2d.component';
3
- import { IPhysicsWorld2dComponent } from '../components/physics/i-physics-world-2d.component';
4
- export declare abstract class IRenderable2dEntity<VS extends IVisualScene2dComponent = IVisualScene2dComponent, PW extends IPhysicsWorld2dComponent = IPhysicsWorld2dComponent> extends IRenderableEntity<Point2, number, VS, PW> {
2
+ import { PhysicsTypeDocRepo2D, VisualTypeDocRepo2D } from '../gg-2d-world';
3
+ export declare abstract class IRenderable2dEntity<TypeDoc extends VisualTypeDocRepo2D = VisualTypeDocRepo2D, PTypeDoc extends PhysicsTypeDocRepo2D = PhysicsTypeDocRepo2D> extends IRenderableEntity<Point2, number, TypeDoc, PTypeDoc> {
5
4
  }
@@ -1,5 +1,4 @@
1
1
  import { IRendererEntity, Point2 } from '../../base';
2
- import { IRenderer2dComponent } from '../components/rendering/i-renderer-2d.component';
3
- import { IVisualScene2dComponent } from '../components/rendering/i-visual-scene-2d.component';
4
- export declare class Renderer2dEntity<RC extends IRenderer2dComponent = IRenderer2dComponent> extends IRendererEntity<Point2, number, IVisualScene2dComponent, RC> {
2
+ import { VisualTypeDocRepo2D } from '../gg-2d-world';
3
+ export declare class Renderer2dEntity<TypeDoc extends VisualTypeDocRepo2D = VisualTypeDocRepo2D> extends IRendererEntity<Point2, number, TypeDoc> {
5
4
  }
@@ -2,11 +2,12 @@ import { Observable } from 'rxjs';
2
2
  import { ITrigger2dComponent } from '../components/physics/i-trigger-2d.component';
3
3
  import { IEntity, Point2, TickOrder } from '../../base';
4
4
  import { IPositionable2d } from '../interfaces/i-positionable-2d';
5
- export declare class Trigger2dEntity extends IEntity<Point2, number> implements IPositionable2d {
5
+ import { PhysicsTypeDocRepo2D, VisualTypeDocRepo2D } from '../gg-2d-world';
6
+ export declare class Trigger2dEntity<TypeDoc extends PhysicsTypeDocRepo2D = PhysicsTypeDocRepo2D> extends IEntity<Point2, number, VisualTypeDocRepo2D, TypeDoc> implements IPositionable2d {
6
7
  readonly objectBody: ITrigger2dComponent;
7
8
  readonly tickOrder = TickOrder.OBJECTS_BINDING;
8
- get onEntityEntered(): Observable<IEntity & IPositionable2d>;
9
- get onEntityLeft(): Observable<(IEntity & IPositionable2d) | null>;
9
+ get onEntityEntered(): Observable<IEntity<Point2, number, VisualTypeDocRepo2D, TypeDoc> & IPositionable2d>;
10
+ get onEntityLeft(): Observable<(IEntity<Point2, number, VisualTypeDocRepo2D, TypeDoc> & IPositionable2d) | null>;
10
11
  private _position;
11
12
  get position(): Point2;
12
13
  set position(value: Point2);
@@ -1,20 +1,23 @@
1
1
  import { Point2 } from '../base';
2
2
  import { BodyShape2DDescriptor, Shape2DDescriptor } from './models/shapes';
3
- import { IRigidBody2dComponent } from './components/physics/i-rigid-body-2d.component';
4
- import { ITrigger2dComponent } from './components/physics/i-trigger-2d.component';
5
- import { IDisplayObject2dComponent } from './components/rendering/i-display-object-2d.component';
6
- export declare abstract class IGg2dObjectFactory<T extends IDisplayObject2dComponent = IDisplayObject2dComponent> {
7
- abstract createPrimitive(descriptor: Shape2DDescriptor): T;
8
- createSquare(dimensions: Point2): T;
9
- createCircle(radius: number): T;
3
+ import { PhysicsTypeDocRepo2D, VisualTypeDocRepo2D } from './gg-2d-world';
4
+ export declare type DisplayObject2dOpts<Tex> = {
5
+ color?: number;
6
+ texture?: Tex;
7
+ };
8
+ export declare abstract class IDisplayObject2dComponentFactory<TypeDoc extends VisualTypeDocRepo2D = VisualTypeDocRepo2D> {
9
+ abstract createPrimitive(descriptor: Shape2DDescriptor, material?: DisplayObject2dOpts<TypeDoc['texture']>): TypeDoc['displayObject'];
10
+ randomColor(): number;
11
+ createSquare(dimensions: Point2, material?: DisplayObject2dOpts<TypeDoc['texture']>): TypeDoc['displayObject'];
12
+ createCircle(radius: number, material?: DisplayObject2dOpts<TypeDoc['texture']>): TypeDoc['displayObject'];
10
13
  }
11
- export interface IPhysicsBody2dComponentFactory<T extends IRigidBody2dComponent = IRigidBody2dComponent, K extends ITrigger2dComponent = ITrigger2dComponent> {
14
+ export interface IPhysicsBody2dComponentFactory<TypeDoc extends PhysicsTypeDocRepo2D = PhysicsTypeDocRepo2D> {
12
15
  createRigidBody(descriptor: BodyShape2DDescriptor, transform?: {
13
16
  position?: Point2;
14
17
  rotation?: number;
15
- }): T;
18
+ }): TypeDoc['rigidBody'];
16
19
  createTrigger(descriptor: Shape2DDescriptor, transform?: {
17
20
  position?: Point2;
18
21
  rotation?: number;
19
- }): K;
22
+ }): TypeDoc['trigger'];
20
23
  }
@@ -1,9 +1,12 @@
1
- export class IGg2dObjectFactory {
1
+ export class IDisplayObject2dComponentFactory {
2
+ randomColor() {
3
+ return ((Math.floor(Math.random() * 256) << 16) | (Math.floor(Math.random() * 256) << 8) | Math.floor(Math.random() * 256));
4
+ }
2
5
  // shortcuts
3
- createSquare(dimensions) {
4
- return this.createPrimitive({ shape: 'SQUARE', dimensions });
6
+ createSquare(dimensions, material = {}) {
7
+ return this.createPrimitive({ shape: 'SQUARE', dimensions }, material);
5
8
  }
6
- createCircle(radius) {
7
- return this.createPrimitive({ shape: 'CIRCLE', radius });
9
+ createCircle(radius, material = {}) {
10
+ return this.createPrimitive({ shape: 'CIRCLE', radius }, material);
8
11
  }
9
12
  }
@@ -4,10 +4,26 @@ import { Entity2d } from './entities/entity-2d';
4
4
  import { IPhysicsWorld2dComponent } from './components/physics/i-physics-world-2d.component';
5
5
  import { IVisualScene2dComponent } from './components/rendering/i-visual-scene-2d.component';
6
6
  import { Renderer2dEntity } from './entities/renderer-2d.entity';
7
- export declare class Gg2dWorld<V extends IVisualScene2dComponent = IVisualScene2dComponent, P extends IPhysicsWorld2dComponent = IPhysicsWorld2dComponent> extends GgWorld<Point2, number, V, P> {
8
- readonly visualScene: V;
9
- readonly physicsWorld: P;
10
- constructor(visualScene: V, physicsWorld: P);
11
- addPrimitiveRigidBody(descr: BodyShape2DDescriptor, position?: Point2, rotation?: number): Entity2d<V, P>;
12
- addRenderer(canvas?: HTMLCanvasElement, rendererOptions?: Partial<RendererOptions>): Renderer2dEntity;
7
+ import { DisplayObject2dOpts, IDisplayObject2dComponentFactory, IPhysicsBody2dComponentFactory } from './factories';
8
+ import { IRenderer2dComponent } from './components/rendering/i-renderer-2d.component';
9
+ import { IDisplayObject2dComponent } from './components/rendering/i-display-object-2d.component';
10
+ import { ITrigger2dComponent } from './components/physics/i-trigger-2d.component';
11
+ import { IRigidBody2dComponent } from './components/physics/i-rigid-body-2d.component';
12
+ export declare type VisualTypeDocRepo2D = {
13
+ factory: IDisplayObject2dComponentFactory;
14
+ displayObject: IDisplayObject2dComponent;
15
+ renderer: IRenderer2dComponent;
16
+ texture: unknown;
17
+ };
18
+ export declare type PhysicsTypeDocRepo2D = {
19
+ factory: IPhysicsBody2dComponentFactory;
20
+ rigidBody: IRigidBody2dComponent;
21
+ trigger: ITrigger2dComponent;
22
+ };
23
+ export declare class Gg2dWorld<VTypeDoc extends VisualTypeDocRepo2D = VisualTypeDocRepo2D, PTypeDoc extends PhysicsTypeDocRepo2D = PhysicsTypeDocRepo2D, VS extends IVisualScene2dComponent<VTypeDoc> = IVisualScene2dComponent<VTypeDoc>, PW extends IPhysicsWorld2dComponent<PTypeDoc> = IPhysicsWorld2dComponent<PTypeDoc>> extends GgWorld<Point2, number, VTypeDoc, PTypeDoc, VS, PW> {
24
+ readonly visualScene: VS;
25
+ readonly physicsWorld: PW;
26
+ constructor(visualScene: VS, physicsWorld: PW);
27
+ addPrimitiveRigidBody(descr: BodyShape2DDescriptor, position?: Point2, rotation?: number, material?: DisplayObject2dOpts<VTypeDoc['texture']>): Entity2d<VTypeDoc, PTypeDoc>;
28
+ addRenderer(canvas?: HTMLCanvasElement, rendererOptions?: Partial<RendererOptions>): Renderer2dEntity<VTypeDoc>;
13
29
  }
@@ -28,8 +28,8 @@ export class Gg2dWorld extends GgWorld {
28
28
  '{x: 0, y: value}, 2 arguments set the whole vector. Default value is "9.82" or "0 9.82"');
29
29
  }
30
30
  }
31
- addPrimitiveRigidBody(descr, position = Pnt2.O, rotation = 0) {
32
- const entity = new Entity2d(this.visualScene.factory.createPrimitive(descr.shape), this.physicsWorld.factory.createRigidBody(descr));
31
+ addPrimitiveRigidBody(descr, position = Pnt2.O, rotation = 0, material = {}) {
32
+ const entity = new Entity2d(this.visualScene.factory.createPrimitive(descr.shape, material), this.physicsWorld.factory.createRigidBody(descr));
33
33
  entity.position = position;
34
34
  entity.rotation = rotation;
35
35
  this.addEntity(entity);
@@ -1,7 +1,5 @@
1
1
  import { IPhysicsWorldComponent, Point3, Point4 } from '../../../base';
2
- import { IPhysicsBody3dComponentFactory } from '../../factories';
3
- import { IPhysicsBody3dComponentLoader } from '../../loaders';
4
- export interface IPhysicsWorld3dComponent extends IPhysicsWorldComponent<Point3, Point4> {
5
- readonly factory: IPhysicsBody3dComponentFactory;
6
- readonly loader: IPhysicsBody3dComponentLoader;
2
+ import { PhysicsTypeDocRepo3D } from '../../gg-3d-world';
3
+ export interface IPhysicsWorld3dComponent<TypeDoc extends PhysicsTypeDocRepo3D = PhysicsTypeDocRepo3D> extends IPhysicsWorldComponent<Point3, Point4, TypeDoc> {
4
+ readonly loader: TypeDoc['loader'];
7
5
  }
@@ -1,6 +1,6 @@
1
1
  import { Point3, Point4 } from '../../../base';
2
2
  import { IRigidBody3dComponent } from './i-rigid-body-3d.component';
3
- import { IPhysicsWorld3dComponent } from './i-physics-world-3d.component';
3
+ import { PhysicsTypeDocRepo3D } from '../../gg-3d-world';
4
4
  export declare type SuspensionOptions = {
5
5
  stiffness: number;
6
6
  damping: number;
@@ -17,7 +17,7 @@ export declare type WheelOptions = {
17
17
  rollInfluence: number;
18
18
  maxTravel: number;
19
19
  };
20
- export interface IRaycastVehicleComponent<PW extends IPhysicsWorld3dComponent = IPhysicsWorld3dComponent> extends IRigidBody3dComponent<PW> {
20
+ export interface IRaycastVehicleComponent<TypeDoc extends PhysicsTypeDocRepo3D = PhysicsTypeDocRepo3D> extends IRigidBody3dComponent<TypeDoc> {
21
21
  /** Return speed in m/s, calculated by car itself (which should be shown on the speedometer) */
22
22
  get wheelSpeed(): number;
23
23
  addWheel(options: WheelOptions, suspensionOptions: SuspensionOptions): void;
@@ -33,4 +33,5 @@ export interface IRaycastVehicleComponent<PW extends IPhysicsWorld3dComponent =
33
33
  rotation: Point4;
34
34
  };
35
35
  resetSuspension(): void;
36
+ clone(): IRaycastVehicleComponent;
36
37
  }
@@ -1,5 +1,5 @@
1
1
  import { IRigidBodyComponent, Point3, Point4 } from '../../../base';
2
- import { IPhysicsWorld3dComponent } from './i-physics-world-3d.component';
3
- export interface IRigidBody3dComponent<PW extends IPhysicsWorld3dComponent = IPhysicsWorld3dComponent> extends IRigidBodyComponent<Point3, Point4, PW> {
2
+ import { PhysicsTypeDocRepo3D } from '../../gg-3d-world';
3
+ export interface IRigidBody3dComponent<TypeDoc extends PhysicsTypeDocRepo3D = PhysicsTypeDocRepo3D> extends IRigidBodyComponent<Point3, Point4, TypeDoc> {
4
4
  angularVelocity: Point3;
5
5
  }
@@ -1,8 +1,7 @@
1
1
  import { ITriggerComponent, Point3, Point4 } from '../../../base';
2
2
  import { Observable } from 'rxjs';
3
- import { IPhysicsWorld3dComponent } from './i-physics-world-3d.component';
4
- import { IRigidBody3dComponent } from './i-rigid-body-3d.component';
5
- export interface ITrigger3dComponent<PW extends IPhysicsWorld3dComponent = IPhysicsWorld3dComponent> extends ITriggerComponent<Point3, Point4, PW> {
6
- get onEntityEntered(): Observable<IRigidBody3dComponent>;
7
- get onEntityLeft(): Observable<IRigidBody3dComponent | null>;
3
+ import { PhysicsTypeDocRepo3D } from '../../gg-3d-world';
4
+ export interface ITrigger3dComponent<TypeDoc extends PhysicsTypeDocRepo3D = PhysicsTypeDocRepo3D> extends ITriggerComponent<Point3, Point4, TypeDoc> {
5
+ get onEntityEntered(): Observable<TypeDoc['rigidBody']>;
6
+ get onEntityLeft(): Observable<TypeDoc['rigidBody'] | null>;
8
7
  }
@@ -1,6 +1,6 @@
1
1
  import { IDisplayObject3dComponent } from './i-display-object-3d.component';
2
- import { IVisualScene3dComponent } from './i-visual-scene-3d.component';
3
- export interface ICameraComponent<VS extends IVisualScene3dComponent = IVisualScene3dComponent> extends IDisplayObject3dComponent<VS> {
2
+ import { VisualTypeDocRepo3D } from '../../gg-3d-world';
3
+ export interface ICameraComponent<TypeDoc extends VisualTypeDocRepo3D = VisualTypeDocRepo3D> extends IDisplayObject3dComponent<TypeDoc> {
4
4
  get supportsFov(): boolean;
5
5
  get fov(): number;
6
6
  set fov(f: number);
@@ -1,4 +1,4 @@
1
1
  import { IDisplayObjectComponent, Point3, Point4 } from '../../../base';
2
- import { IVisualScene3dComponent } from './i-visual-scene-3d.component';
3
- export interface IDisplayObject3dComponent<VS extends IVisualScene3dComponent = IVisualScene3dComponent> extends IDisplayObjectComponent<Point3, Point4, VS> {
2
+ import { VisualTypeDocRepo3D } from '../../gg-3d-world';
3
+ export interface IDisplayObject3dComponent<TypeDoc extends VisualTypeDocRepo3D = VisualTypeDocRepo3D> extends IDisplayObjectComponent<Point3, Point4, TypeDoc> {
4
4
  }
@@ -1,6 +1,5 @@
1
1
  import { IRendererComponent, Point3, Point4 } from '../../../base';
2
- import { IVisualScene3dComponent } from './i-visual-scene-3d.component';
3
- import { ICameraComponent } from './i-camera.component';
4
- export declare abstract class IRenderer3dComponent<VS extends IVisualScene3dComponent = IVisualScene3dComponent, CC extends ICameraComponent = ICameraComponent> extends IRendererComponent<Point3, Point4, VS> {
5
- abstract camera: CC;
2
+ import { VisualTypeDocRepo3D } from '../../gg-3d-world';
3
+ export declare abstract class IRenderer3dComponent<TypeDoc extends VisualTypeDocRepo3D = VisualTypeDocRepo3D> extends IRendererComponent<Point3, Point4, TypeDoc> {
4
+ abstract camera: TypeDoc['camera'];
6
5
  }
@@ -1,10 +1,6 @@
1
1
  import { IVisualSceneComponent, Point3, Point4, RendererOptions } from '../../../base';
2
- import { IDisplayObject3dComponentFactory } from '../../factories';
3
- import { ICameraComponent } from './i-camera.component';
4
- import { IRenderer3dComponent } from './i-renderer-3d.component';
5
- import { IDisplayObject3dComponentLoader } from '../../loaders';
6
- export interface IVisualScene3dComponent extends IVisualSceneComponent<Point3, Point4> {
7
- readonly factory: IDisplayObject3dComponentFactory;
8
- readonly loader: IDisplayObject3dComponentLoader;
9
- createRenderer(camera: ICameraComponent, canvas?: HTMLCanvasElement, rendererOptions?: Partial<RendererOptions>): IRenderer3dComponent;
2
+ import { VisualTypeDocRepo3D } from '../../gg-3d-world';
3
+ export interface IVisualScene3dComponent<TypeDoc extends VisualTypeDocRepo3D = VisualTypeDocRepo3D> extends IVisualSceneComponent<Point3, Point4, TypeDoc> {
4
+ readonly loader: TypeDoc['loader'];
5
+ createRenderer(camera: TypeDoc['camera'], canvas?: HTMLCanvasElement, rendererOptions?: Partial<RendererOptions>): TypeDoc['renderer'];
10
6
  }
@@ -1,5 +1,5 @@
1
- import { AnimationFunction, AnimationMixer, Point3 } from '../../../../base';
2
- import { Gg3dWorld } from '../../../gg-3d-world';
1
+ import { AnimationFunction, AnimationMixer, Point3, Point4 } from '../../../../base';
2
+ import { Gg3dWorld, VisualTypeDocRepo3D } from '../../../gg-3d-world';
3
3
  import { Renderer3dEntity } from '../../renderer-3d.entity';
4
4
  export declare type Camera3dAnimationArgs = {
5
5
  position: Point3;
@@ -7,10 +7,10 @@ export declare type Camera3dAnimationArgs = {
7
7
  up?: Point3;
8
8
  fov?: number;
9
9
  };
10
- export declare class Camera3dAnimator extends AnimationMixer<Camera3dAnimationArgs> {
11
- entity: Renderer3dEntity;
10
+ export declare class Camera3dAnimator<VTypeDoc extends VisualTypeDocRepo3D = VisualTypeDocRepo3D> extends AnimationMixer<Camera3dAnimationArgs, Point3, Point4, VTypeDoc> {
11
+ entity: Renderer3dEntity<VTypeDoc>;
12
12
  protected _animationFunction: AnimationFunction<Camera3dAnimationArgs>;
13
- constructor(entity: Renderer3dEntity, _animationFunction: AnimationFunction<Camera3dAnimationArgs>);
14
- onSpawned(world: Gg3dWorld): void;
13
+ constructor(entity: Renderer3dEntity<VTypeDoc>, _animationFunction: AnimationFunction<Camera3dAnimationArgs>);
14
+ onSpawned(world: Gg3dWorld<VTypeDoc>): void;
15
15
  protected applyPositioning(value: Camera3dAnimationArgs): void;
16
16
  }
@@ -1,11 +1,11 @@
1
1
  import { AnimationFunction, AnimationMixer, Point3, Point4 } from '../../../../base';
2
- import { Gg3dWorld } from '../../../gg-3d-world';
2
+ import { Gg3dWorld, PhysicsTypeDocRepo3D, VisualTypeDocRepo3D } from '../../../gg-3d-world';
3
3
  import { IPositionable3d } from '../../../interfaces/i-positionable-3d';
4
4
  declare type Positioning3d = {
5
5
  position: Point3;
6
6
  rotation: Point4;
7
7
  };
8
- export declare class Entity3dPositioningAnimator<T extends IPositionable3d = IPositionable3d> extends AnimationMixer<Positioning3d> {
8
+ export declare class Entity3dPositioningAnimator<T extends IPositionable3d = IPositionable3d> extends AnimationMixer<Positioning3d, Point3, Point4, VisualTypeDocRepo3D, PhysicsTypeDocRepo3D> {
9
9
  entity: T;
10
10
  protected _animationFunction: AnimationFunction<Positioning3d>;
11
11
  constructor(entity: T, _animationFunction: AnimationFunction<Positioning3d>);
@@ -1,4 +1,4 @@
1
- import { DirectionKeyboardInput, DirectionKeyboardKeymap, IEntity, TickOrder, GgWorld, KeyboardInput, MouseInput, MouseInputOptions } from '../../../../base';
1
+ import { DirectionKeyboardInput, DirectionKeyboardKeymap, GgWorld, IEntity, KeyboardInput, MouseInput, MouseInputOptions, TickOrder } from '../../../../base';
2
2
  import { Renderer3dEntity } from '../../renderer-3d.entity';
3
3
  /**
4
4
  * Options for configuring a FreeCameraInput controller.
@@ -8,7 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import { combineLatest, filter, takeUntil } from 'rxjs';
11
- import { DirectionKeyboardInput, IEntity, TickOrder, MouseInput, Pnt2, Pnt3, Qtrn, } from '../../../../base';
11
+ import { DirectionKeyboardInput, IEntity, MouseInput, Pnt2, Pnt3, Qtrn, TickOrder, } from '../../../../base';
12
12
  /**
13
13
  * A controller for a free-moving camera.
14
14
  */
@@ -1,4 +1,4 @@
1
- import { IEntity, TickOrder, GgWorld, MouseInput, MouseInputOptions, MutableSpherical, Point3 } from '../../../../base';
1
+ import { GgWorld, IEntity, MouseInput, MouseInputOptions, MutableSpherical, Point3, TickOrder } from '../../../../base';
2
2
  import { Renderer3dEntity } from '../../renderer-3d.entity';
3
3
  export declare type OrbitCameraControllerOptions = {
4
4
  mouseOptions: Partial<MouseInputOptions>;
@@ -7,7 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import { IEntity, TickOrder, MouseInput, MouseInputState, Pnt3, Qtrn, } from '../../../../base';
10
+ import { IEntity, MouseInput, MouseInputState, Pnt3, Qtrn, TickOrder, } from '../../../../base';
11
11
  import { filter, takeUntil } from 'rxjs';
12
12
  import { map } from 'rxjs/operators';
13
13
  const DEFAULT_OPTIONS = {
@@ -3,11 +3,10 @@ import { IRigidBody3dComponent } from '../components/physics/i-rigid-body-3d.com
3
3
  import { IDisplayObject3dComponent } from '../components/rendering/i-display-object-3d.component';
4
4
  import { IPositionable3d } from '../interfaces/i-positionable-3d';
5
5
  import { IRenderable3dEntity } from './i-renderable-3d.entity';
6
- import { IVisualScene3dComponent } from '../components/rendering/i-visual-scene-3d.component';
7
- import { IPhysicsWorld3dComponent } from '../components/physics/i-physics-world-3d.component';
8
- export declare class Entity3d<VS extends IVisualScene3dComponent = IVisualScene3dComponent, PW extends IPhysicsWorld3dComponent = IPhysicsWorld3dComponent> extends IRenderable3dEntity<VS, PW> implements IPositionable3d {
9
- readonly object3D: IDisplayObject3dComponent | null;
10
- readonly objectBody: IRigidBody3dComponent | null;
6
+ import { PhysicsTypeDocRepo3D, VisualTypeDocRepo3D } from '../gg-3d-world';
7
+ export declare class Entity3d<VTypeDoc extends VisualTypeDocRepo3D = VisualTypeDocRepo3D, PTypeDoc extends PhysicsTypeDocRepo3D = PhysicsTypeDocRepo3D> extends IRenderable3dEntity<VTypeDoc, PTypeDoc> implements IPositionable3d {
8
+ readonly object3D: VTypeDoc['displayObject'] | null;
9
+ readonly objectBody: PTypeDoc['rigidBody'] | null;
11
10
  readonly tickOrder = TickOrder.OBJECTS_BINDING;
12
11
  private _position;
13
12
  get position(): Point3;
@@ -20,5 +19,5 @@ export declare class Entity3d<VS extends IVisualScene3dComponent = IVisualScene3
20
19
  * Synchronize physics body transform with entity (and mesh if defined)
21
20
  * */
22
21
  protected runTransformBinding(objectBody: IRigidBody3dComponent, object3D: IDisplayObject3dComponent | null): void;
23
- constructor(object3D: IDisplayObject3dComponent | null, objectBody?: IRigidBody3dComponent | null);
22
+ constructor(object3D: VTypeDoc['displayObject'] | null, objectBody?: PTypeDoc['rigidBody'] | null);
24
23
  }
@@ -1,10 +1,9 @@
1
1
  import { RaycastVehicle3dEntity, RVEntityProperties } from '../raycast-vehicle-3d.entity';
2
- import { IRenderableEntity, Point3, Point4 } from '../../../base';
2
+ import { Gg3dWorld, PhysicsTypeDocRepo3D, VisualTypeDocRepo3D } from '../../gg-3d-world';
3
+ import { IRenderable3dEntity } from '../i-renderable-3d.entity';
3
4
  import { IPositionable3d } from '../../interfaces/i-positionable-3d';
5
+ import { Point3, Point4 } from '../../../base';
4
6
  import { BehaviorSubject, Observable } from 'rxjs';
5
- import { Gg3dWorld } from '../../gg-3d-world';
6
- import { IDisplayObject3dComponent } from '../../components/rendering/i-display-object-3d.component';
7
- import { IRaycastVehicleComponent } from '../../components/physics/i-raycast-vehicle.component';
8
7
  export declare type GgCarProperties = RVEntityProperties & {
9
8
  mpsToRpmFactor?: number;
10
9
  engine: {
@@ -33,7 +32,7 @@ export declare type GgCarProperties = RVEntityProperties & {
33
32
  };
34
33
  maxSteerAngle: number;
35
34
  };
36
- export declare class GgCarEntity extends IRenderableEntity<Point3, Point4> implements IPositionable3d {
35
+ export declare class GgCarEntity<VTypeDoc extends VisualTypeDocRepo3D = VisualTypeDocRepo3D, PTypeDoc extends PhysicsTypeDocRepo3D = PhysicsTypeDocRepo3D, RVEntity extends RaycastVehicle3dEntity<VTypeDoc, PTypeDoc> = RaycastVehicle3dEntity<VTypeDoc, PTypeDoc>> extends IRenderable3dEntity<VTypeDoc, PTypeDoc> implements IPositionable3d {
37
36
  readonly carProperties: GgCarProperties;
38
37
  readonly tickOrder: number;
39
38
  get position(): Point3;
@@ -59,6 +58,7 @@ export declare class GgCarEntity extends IRenderableEntity<Point3, Point4> imple
59
58
  get brake(): number;
60
59
  set brake(value: number);
61
60
  set steeringFactor(value: number);
61
+ get steeringFactor(): number;
62
62
  protected handBrake$: BehaviorSubject<boolean>;
63
63
  get handBrake(): boolean;
64
64
  set handBrake(value: boolean);
@@ -68,9 +68,10 @@ export declare class GgCarEntity extends IRenderableEntity<Point3, Point4> imple
68
68
  get gear$(): Observable<number>;
69
69
  set gear(value: number);
70
70
  set isHonking(value: boolean);
71
- readonly raycastVehicle: RaycastVehicle3dEntity;
72
- constructor(carProperties: GgCarProperties, chassis3D: IDisplayObject3dComponent | null, chassisBody: IRaycastVehicleComponent);
73
- onSpawned(world: Gg3dWorld): void;
71
+ readonly raycastVehicle: RVEntity;
72
+ constructor(carProperties: GgCarProperties, chassis3D: VTypeDoc['displayObject'] | null, chassisBody: PTypeDoc['raycastVehicle']);
73
+ protected createRaycastVehicle(carProperties: GgCarProperties, chassis3D: VTypeDoc['displayObject'] | null, chassisBody: PTypeDoc['raycastVehicle']): RVEntity;
74
+ onSpawned(world: Gg3dWorld<VTypeDoc, PTypeDoc>): void;
74
75
  protected updateEngine(delta: number): void;
75
76
  resetTo(options?: {
76
77
  position?: Point3;
@@ -1,8 +1,8 @@
1
1
  import { RaycastVehicle3dEntity } from '../raycast-vehicle-3d.entity';
2
- import { cubicSplineInterpolation, IRenderableEntity, TickOrder } from '../../../base';
3
- import { BehaviorSubject, filter } from 'rxjs';
4
- import { throttleTime } from 'rxjs/operators';
5
- export class GgCarEntity extends IRenderableEntity {
2
+ import { IRenderable3dEntity } from '../i-renderable-3d.entity';
3
+ import { cubicSplineInterpolation, TickOrder } from '../../../base';
4
+ import { BehaviorSubject, filter, throttleTime } from 'rxjs';
5
+ export class GgCarEntity extends IRenderable3dEntity {
6
6
  constructor(carProperties, chassis3D, chassisBody) {
7
7
  super();
8
8
  this.carProperties = carProperties;
@@ -16,7 +16,7 @@ export class GgCarEntity extends IRenderableEntity {
16
16
  this.handBrake$ = new BehaviorSubject(false);
17
17
  this._gear = 0;
18
18
  this._gear$ = new BehaviorSubject(0);
19
- this.raycastVehicle = new RaycastVehicle3dEntity(carProperties, chassis3D, chassisBody);
19
+ this.raycastVehicle = this.createRaycastVehicle(carProperties, chassis3D, chassisBody);
20
20
  this.addChildren(this.raycastVehicle);
21
21
  }
22
22
  get position() {
@@ -106,6 +106,9 @@ export class GgCarEntity extends IRenderableEntity {
106
106
  set steeringFactor(value) {
107
107
  this.raycastVehicle.steeringAngle = value * this.carProperties.maxSteerAngle;
108
108
  }
109
+ get steeringFactor() {
110
+ return this.raycastVehicle.steeringAngle / this.carProperties.maxSteerAngle;
111
+ }
109
112
  get handBrake() {
110
113
  return this.handBrake$.getValue();
111
114
  }
@@ -128,6 +131,9 @@ export class GgCarEntity extends IRenderableEntity {
128
131
  }
129
132
  // TODO remove
130
133
  set isHonking(value) { }
134
+ createRaycastVehicle(carProperties, chassis3D, chassisBody) {
135
+ return new RaycastVehicle3dEntity(carProperties, chassis3D, chassisBody);
136
+ }
131
137
  onSpawned(world) {
132
138
  super.onSpawned(world);
133
139
  this.tick$.subscribe(([_, delta]) => {
@@ -156,9 +162,15 @@ export class GgCarEntity extends IRenderableEntity {
156
162
  }
157
163
  }
158
164
  }
159
- this.raycastVehicle.applyTractionForce(force);
160
- this.raycastVehicle.applyBrake('front', brake * this.carProperties.brake.frontAxleForce);
161
- this.raycastVehicle.applyBrake('rear', brake * this.carProperties.brake.rearAxleForce);
165
+ if (brake === 0) {
166
+ this.raycastVehicle.applyTractionForce(force);
167
+ this.raycastVehicle.applyBrake('both', 0);
168
+ }
169
+ else {
170
+ this.raycastVehicle.applyTractionForce(0);
171
+ this.raycastVehicle.applyBrake('front', brake * this.carProperties.brake.frontAxleForce);
172
+ this.raycastVehicle.applyBrake('rear', brake * this.carProperties.brake.rearAxleForce);
173
+ }
162
174
  if (this.handBrake) {
163
175
  this.raycastVehicle.applyBrake('rear', this.carProperties.brake.handbrakeForce);
164
176
  }
@@ -1,5 +1,4 @@
1
1
  import { IRenderableEntity, Point3, Point4 } from '../../base';
2
- import { IVisualScene3dComponent } from '../components/rendering/i-visual-scene-3d.component';
3
- import { IPhysicsWorld3dComponent } from '../components/physics/i-physics-world-3d.component';
4
- export declare abstract class IRenderable3dEntity<VS extends IVisualScene3dComponent = IVisualScene3dComponent, PW extends IPhysicsWorld3dComponent = IPhysicsWorld3dComponent> extends IRenderableEntity<Point3, Point4, VS, PW> {
2
+ import { PhysicsTypeDocRepo3D, VisualTypeDocRepo3D } from '../gg-3d-world';
3
+ export declare abstract class IRenderable3dEntity<TypeDoc extends VisualTypeDocRepo3D = VisualTypeDocRepo3D, PTypeDoc extends PhysicsTypeDocRepo3D = PhysicsTypeDocRepo3D> extends IRenderableEntity<Point3, Point4, TypeDoc, PTypeDoc> {
5
4
  }