topical media & game development

talk show tell print

graphic-o3d-samples-box2d-3d-third-party-box2d-collision-shapes-b2ShapeDef.js / js



  /*
  * Copyright (c) 2006-2007 Erin Catto 
* 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};



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


(C) Æliens 20/2/2008

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.