File: src/shapes/Shape.js
module.exports = Shape;
var Shape = require('./Shape');
var Vec3 = require('../math/Vec3');
var Quaternion = require('../math/Quaternion');
var Material = require('../material/Material');
/**
* Base class for shapes
* @class Shape
* @constructor
* @author schteppe
* @todo Should have a mechanism for caching bounding sphere radius instead of calculating it each time
*/
function Shape(){
/**
* Identifyer of the Shape.
* @property {number} id
*/
this.id = Shape.idCounter++;
/**
* The type of this shape. Must be set to an int > 0 by subclasses.
* @property type
* @type {Number}
* @see Shape.types
*/
this.type = 0;
/**
* The local bounding sphere radius of this shape.
* @property {Number} boundingSphereRadius
*/
this.boundingSphereRadius = 0;
/**
* Whether to produce contact forces when in contact with other bodies. Note that contacts will be generated, but they will be disabled.
* @property {boolean} collisionResponse
*/
this.collisionResponse = true;
/**
* @property {Material} material
*/
this.material = null;
}
Shape.prototype.constructor = Shape;
/**
* Computes the bounding sphere radius. The result is stored in the property .boundingSphereRadius
* @method updateBoundingSphereRadius
* @return {Number}
*/
Shape.prototype.updateBoundingSphereRadius = function(){
throw "computeBoundingSphereRadius() not implemented for shape type "+this.type;
};
/**
* Get the volume of this shape
* @method volume
* @return {Number}
*/
Shape.prototype.volume = function(){
throw "volume() not implemented for shape type "+this.type;
};
/**
* Calculates the inertia in the local frame for this shape.
* @method calculateLocalInertia
* @return {Vec3}
* @see http://en.wikipedia.org/wiki/List_of_moments_of_inertia
*/
Shape.prototype.calculateLocalInertia = function(mass,target){
throw "calculateLocalInertia() not implemented for shape type "+this.type;
};
Shape.idCounter = 0;
/**
* The available shape types.
* @static
* @property types
* @type {Object}
*/
Shape.types = {
SPHERE:1,
PLANE:2,
BOX:4,
COMPOUND:8,
CONVEXPOLYHEDRON:16,
HEIGHTFIELD:32,
PARTICLE:64,
CYLINDER:128,
TRIMESH:256
};