r3-legacy/src/game-lib-d3-shape-box.js

119 lines
2.9 KiB
JavaScript
Raw Normal View History

2017-06-24 02:42:28 +02:00
/**
* Shape Superset - The apiShape properties get moved into the Shape object itself, and then the instance is created
* @param physics
* @param apiShape GameLib.D3.API.Shape
* @param halfExtents
* @constructor
*/
GameLib.D3.Shape.Box = function (
physics,
apiShape,
2017-09-02 12:55:57 +02:00
halfExtents
2017-06-24 02:42:28 +02:00
) {
this.physics = physics;
this.physics.isNotCannonThrow();
2017-12-04 13:23:15 +01:00
if (GameLib.Utils.UndefinedOrNull(apiShape)) {
apiShape = {
shapeType : GameLib.D3.API.Shape.SHAPE_TYPE_BOX
};
}
if (apiShape instanceof GameLib.D3.Shape.Box) {
return apiShape;
}
2017-06-24 02:42:28 +02:00
if (GameLib.Utils.UndefinedOrNull(halfExtents)) {
halfExtents = new GameLib.Vector3(
physics,
new GameLib.API.Vector3(
1,1,1
)
);
2017-06-30 14:35:51 +02:00
} else if (halfExtents instanceof GameLib.API.Vector3) {
halfExtents = new GameLib.Vector3(
this.physics,
halfExtents,
this
)
2017-06-24 02:42:28 +02:00
}
this.halfExtents = halfExtents;
GameLib.D3.Shape.call(
this,
this.physics,
apiShape
);
};
GameLib.D3.Shape.Box.prototype = Object.create(GameLib.D3.Shape.prototype);
GameLib.D3.Shape.Box.prototype.constructor = GameLib.D3.Shape.Box;
/**
*
* @returns {GameLib.D3.Shape.Box|*|SEA3D.Box}
*/
GameLib.D3.Shape.Box.prototype.createInstance = function() {
2017-10-23 14:52:35 +02:00
if (GameLib.Utils.UndefinedOrNull(this.halfExtents)) {
throw new Error('no halfExtents');
}
if (GameLib.Utils.UndefinedOrNull(this.halfExtents.instance)) {
throw new Error('no halfExtents instance');
}
this.instance = new CANNON.Box(
2017-06-24 02:42:28 +02:00
this.halfExtents.instance
);
2017-10-23 14:52:35 +02:00
GameLib.D3.Shape.prototype.createInstance.call(this);
2017-06-24 02:42:28 +02:00
};
GameLib.D3.Shape.Box.prototype.updateInstance = function() {
this.instance.halfExtents.x = this.halfExtents.x;
this.instance.halfExtents.y = this.halfExtents.y;
this.instance.halfExtents.z = this.halfExtents.z;
this.instance.updateBoundingSphereRadius();
2017-06-30 14:20:22 +02:00
this.instance.updateConvexPolyhedronRepresentation();
};
GameLib.D3.Shape.Box.prototype.toApiObject = function() {
var apiShape = GameLib.D3.Shape.prototype.toApiObject.call(this);
apiShape.halfExtents = this.halfExtents.toApiObject();
return apiShape;
};
GameLib.D3.Shape.Box.prototype.setFromMesh = function() {
2017-09-01 08:56:39 +02:00
if (this.parentMesh === null) {
2017-06-30 14:20:22 +02:00
console.log('select a mesh first');
return;
}
2017-09-01 08:56:39 +02:00
var box = this.parentMesh.getBoundingBox();
2017-06-30 14:20:22 +02:00
this.halfExtents.x = box.x / 2;
this.halfExtents.y = box.y / 2;
this.halfExtents.z = box.z / 2;
this.halfExtents.updateInstance();
};
GameLib.D3.Shape.Box.FromObject = function(physics, objectShape) {
2017-06-30 14:35:51 +02:00
var apiShape = GameLib.D3.API.Shape.FromObject(objectShape);
2017-06-30 14:20:22 +02:00
2017-06-30 14:35:51 +02:00
apiShape.halfExtents = GameLib.API.Vector3.FromObject(objectShape.halfExtents);
2017-06-30 14:20:22 +02:00
return new GameLib.D3.Shape.Box(
2017-06-30 14:22:11 +02:00
physics,
2017-06-30 14:20:22 +02:00
apiShape,
2017-09-02 12:55:57 +02:00
apiShape.halfExtents
2017-06-30 14:20:22 +02:00
);
2017-06-24 02:42:28 +02:00
};