Переглянути джерело

Merge pull request #5782 from sebavan/master

Physics ES6 Abstraction
David Catuhe 6 роки тому
батько
коміт
86f93d88a0

+ 1 - 1
dist/preview release/packagesSizeBaseLine.json

@@ -1 +1 @@
-{"engineOnly":303948,"sceneOnly":512262,"minGridMaterial":640875,"minStandardMaterial":761667}
+{"engineOnly":303948,"sceneOnly":512262,"minGridMaterial":627947,"minStandardMaterial":748739}

+ 10 - 12
src/Meshes/mesh.ts

@@ -21,7 +21,6 @@ import { Material } from "../Materials/material";
 import { SceneLoaderFlags } from "../Loading/sceneLoaderFlags";
 import { Skeleton } from "../Bones/skeleton";
 import { MorphTargetManager } from "../Morph/morphTargetManager";
-import { PhysicsImpostor } from "../Physics/physicsImpostor";
 import { Constants } from "../Engines/constants";
 import { SerializationHelper } from "../Misc/decorators";
 import { Logger } from "../Misc/logger";
@@ -30,6 +29,8 @@ import { _TypeStore } from '../Misc/typeStore';
 declare type LinesMesh = import("./linesMesh").LinesMesh;
 declare type InstancedMesh = import("./instancedMesh").InstancedMesh;
 declare type GroundMesh = import("./groundMesh").GroundMesh;
+declare type IPhysicsEnabledObject = import("../Physics/physicsImpostor").IPhysicsEnabledObject;
+declare type PhysicsImpostor = import("../Physics/physicsImpostor").PhysicsImpostor;
 
 declare var earcut: any;
 
@@ -2402,10 +2403,15 @@ export class Mesh extends AbstractMesh implements IGetSetVerticesData {
 
     // Instances
     /** @hidden */
-    public static _instancedMeshFactory = (name: string, mesh: Mesh): InstancedMesh => {
+    public static _instancedMeshFactory(name: string, mesh: Mesh): InstancedMesh {
         throw "Import InstancedMesh before creating instances.";
     }
 
+    /** @hidden */
+    public static _PhysicsImpostorParser(scene: Scene, physicObject: IPhysicsEnabledObject, jsonObject: any): PhysicsImpostor {
+        throw "Import PhysicsImpostor before parsing physics objects.";
+    }
+
     /**
      * Creates a new InstancedMesh object from the mesh model.
      * @see http://doc.babylonjs.com/how_to/how_to_use_instances
@@ -2905,11 +2911,7 @@ export class Mesh extends AbstractMesh implements IGetSetVerticesData {
 
         // Physics
         if (parsedMesh.physicsImpostor) {
-            mesh.physicsImpostor = new PhysicsImpostor(mesh, parsedMesh.physicsImpostor, {
-                mass: parsedMesh.physicsMass,
-                friction: parsedMesh.physicsFriction,
-                restitution: parsedMesh.physicsRestitution
-            }, scene);
+            Mesh._PhysicsImpostorParser(scene, mesh, parsedMesh);
         }
 
         // Instances
@@ -2962,11 +2964,7 @@ export class Mesh extends AbstractMesh implements IGetSetVerticesData {
 
                 // Physics
                 if (parsedInstance.physicsImpostor) {
-                    instance.physicsImpostor = new PhysicsImpostor(instance, parsedInstance.physicsImpostor, {
-                        mass: parsedInstance.physicsMass,
-                        friction: parsedInstance.physicsFriction,
-                        restitution: parsedInstance.physicsRestitution
-                    }, scene);
+                    Mesh._PhysicsImpostorParser(scene, instance, parsedInstance);
                 }
 
                 // Animation

+ 9 - 0
src/Physics/physicsImpostor.ts

@@ -4,6 +4,7 @@ import { ArrayTools } from "../Misc/arrayTools";
 import { Vector3, Matrix, Quaternion, Space } from "../Maths/math";
 import { TransformNode } from "../Meshes/transformNode";
 import { AbstractMesh } from "../Meshes/abstractMesh";
+import { Mesh } from "../Meshes/mesh";
 import { Scene } from "../scene";
 import { Bone } from "../Bones/bone";
 import { BoundingInfo } from "../Culling/boundingInfo";
@@ -142,6 +143,14 @@ export interface IPhysicsEnabledObject {
     getClassName(): string;
 }
 
+Mesh._PhysicsImpostorParser = function(scene: Scene, physicObject: IPhysicsEnabledObject, jsonObject: any): PhysicsImpostor {
+    return new PhysicsImpostor(physicObject, jsonObject.physicsImpostor, {
+        mass: jsonObject.physicsMass,
+        friction: jsonObject.physicsFriction,
+        restitution: jsonObject.physicsRestitution
+    }, scene);
+};
+
 /**
  * Represents a physics imposter
  * @see https://doc.babylonjs.com/how_to/using_the_physics_engine