110 lines
2.9 KiB
JavaScript
110 lines
2.9 KiB
JavaScript
/*
|
|
* Copyright (c) 2006-2007 Erin Catto http:
|
|
*
|
|
* This software is provided 'as-is', without any express or implied
|
|
* warranty. In no event will the authors be held liable for any damages
|
|
* arising from the use of this software.
|
|
* Permission is granted to anyone to use this software for any purpose,
|
|
* including commercial applications, and to alter it and redistribute it
|
|
* freely, subject to the following restrictions:
|
|
* 1. The origin of this software must not be misrepresented; you must not
|
|
* claim that you wrote the original software. If you use this software
|
|
* in a product, an acknowledgment in the product documentation would be
|
|
* appreciated but is not required.
|
|
* 2. Altered source versions must be plainly marked, and must not be
|
|
* misrepresented the original software.
|
|
* 3. This notice may not be removed or altered from any source distribution.
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var b2ShapeDef = Class.create();
|
|
b2ShapeDef.prototype =
|
|
{
|
|
initialize: function()
|
|
{
|
|
this.type = b2Shape.e_unknownShape;
|
|
this.userData = null;
|
|
this.localPosition = new b2Vec2(0.0, 0.0);
|
|
this.localRotation = 0.0;
|
|
this.friction = 0.2;
|
|
this.restitution = 0.0;
|
|
this.density = 0.0;
|
|
this.categoryBits = 0x0001;
|
|
this.maskBits = 0xFFFF;
|
|
this.groupIndex = 0;
|
|
},
|
|
|
|
//virtual ~b2ShapeDef() {}
|
|
|
|
ComputeMass: function(massData)
|
|
{
|
|
|
|
massData.center = new b2Vec2(0.0, 0.0)
|
|
|
|
if (this.density == 0.0)
|
|
{
|
|
massData.mass = 0.0;
|
|
massData.center.Set(0.0, 0.0);
|
|
massData.I = 0.0;
|
|
};
|
|
|
|
switch (this.type)
|
|
{
|
|
case b2Shape.e_circleShape:
|
|
{
|
|
var circle = this;
|
|
massData.mass = this.density * b2Settings.b2_pi * circle.radius * circle.radius;
|
|
massData.center.Set(0.0, 0.0);
|
|
massData.I = 0.5 * (massData.mass) * circle.radius * circle.radius;
|
|
}
|
|
break;
|
|
|
|
case b2Shape.e_boxShape:
|
|
{
|
|
var box = this;
|
|
massData.mass = 4.0 * this.density * box.extents.x * box.extents.y;
|
|
massData.center.Set(0.0, 0.0);
|
|
massData.I = massData.mass / 3.0 * b2Math.b2Dot(box.extents, box.extents);
|
|
}
|
|
break;
|
|
|
|
case b2Shape.e_polyShape:
|
|
{
|
|
var poly = this;
|
|
b2Shape.PolyMass(massData, poly.vertices, poly.vertexCount, this.density);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
massData.mass = 0.0;
|
|
massData.center.Set(0.0, 0.0);
|
|
massData.I = 0.0;
|
|
break;
|
|
}
|
|
},
|
|
|
|
type: 0,
|
|
userData: null,
|
|
localPosition: null,
|
|
localRotation: null,
|
|
friction: null,
|
|
restitution: null,
|
|
density: null,
|
|
|
|
// The collision category bits. Normally you would just set one bit.
|
|
categoryBits: 0,
|
|
|
|
// The collision mask bits. This states the categories that this
|
|
// shape would accept for collision.
|
|
maskBits: 0,
|
|
|
|
// Collision groups allow a certain group of objects to never collide (negative)
|
|
// or always collide (positive). Zero means no collision group. Non-zero group
|
|
// filtering always wins against the mask bits.
|
|
groupIndex: 0};
|