123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- module BABYLON {
- declare var CANNON;
- export interface IPhysicsEnginePlugin {
- initialize(iterations?: number);
- setGravity(gravity: Vector3): void;
- runOneStep(delta: number): void;
- registerMesh(mesh: AbstractMesh, impostor: number, options: PhysicsBodyCreationOptions): any;
- registerMeshesAsCompound(parts: PhysicsCompoundBodyPart[], options: PhysicsBodyCreationOptions): any;
- unregisterMesh(mesh: AbstractMesh);
- applyImpulse(mesh: AbstractMesh, force: Vector3, contactPoint: Vector3): void;
- createLink(mesh1: AbstractMesh, mesh2: AbstractMesh, pivot1: Vector3, pivot2: Vector3, options?: any): boolean;
- dispose(): void;
- isSupported(): boolean;
- updateBodyPosition(mesh: AbstractMesh): void;
- }
- export interface PhysicsBodyCreationOptions {
- mass: number;
- friction: number;
- restitution: number;
- }
- export interface PhysicsCompoundBodyPart {
- mesh: Mesh;
- impostor: number;
- }
- export class PhysicsEngine {
- public gravity: Vector3;
- private _currentPlugin: IPhysicsEnginePlugin;
- constructor(plugin?: IPhysicsEnginePlugin) {
- this._currentPlugin = plugin || new OimoJSPlugin();
- }
- public _initialize(gravity?: Vector3) {
- this._currentPlugin.initialize();
- this._setGravity(gravity);
- }
- public _runOneStep(delta: number): void {
- if (delta > 0.1) {
- delta = 0.1;
- } else if (delta <= 0) {
- delta = 1.0 / 60.0;
- }
- this._currentPlugin.runOneStep(delta);
- }
- public _setGravity(gravity: Vector3): void {
- this.gravity = gravity || new BABYLON.Vector3(0, -9.82, 0);
- this._currentPlugin.setGravity(this.gravity);
- }
- public _registerMesh(mesh: AbstractMesh, impostor: number, options: PhysicsBodyCreationOptions): any {
- return this._currentPlugin.registerMesh(mesh, impostor, options);
- }
- public _registerMeshesAsCompound(parts: PhysicsCompoundBodyPart[], options: PhysicsBodyCreationOptions): any {
- return this._currentPlugin.registerMeshesAsCompound(parts, options);
- }
- public _unregisterMesh(mesh: AbstractMesh): void {
- this._currentPlugin.unregisterMesh(mesh);
- }
- public _applyImpulse(mesh: AbstractMesh, force: Vector3, contactPoint: Vector3): void {
- this._currentPlugin.applyImpulse(mesh, force, contactPoint);
- }
- public _createLink(mesh1: AbstractMesh, mesh2: AbstractMesh, pivot1: Vector3, pivot2: Vector3, options?: any): boolean {
- return this._currentPlugin.createLink(mesh1, mesh2, pivot1, pivot2, options);
- }
- public _updateBodyPosition(mesh: AbstractMesh): void {
- this._currentPlugin.updateBodyPosition(mesh);
- }
- public dispose(): void {
- this._currentPlugin.dispose();
- }
- public isSupported(): boolean {
- return this._currentPlugin.isSupported();
- }
- // Statics
- public static NoImpostor = 0;
- public static SphereImpostor = 1;
- public static BoxImpostor = 2;
- public static PlaneImpostor = 3;
- public static CompoundImpostor = 4;
- public static MeshImpostor = 4;
- public static CapsuleImpostor = 5;
- public static ConeImpostor = 6;
- public static CylinderImpostor = 7;
- public static ConvexHullImpostor = 8;
- public static Epsilon = 0.001;
- }
- }
|