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
};