Body constructor

Body(
  1. BodyDef bd,
  2. World world
)

Implementation

Body(BodyDef bd, this.world)
    : assert(!bd.position.isInfinite && !bd.position.isNaN),
      assert(!bd.linearVelocity.isInfinite && !bd.linearVelocity.isNaN),
      assert(bd.angularDamping >= 0.0),
      assert(bd.linearDamping >= 0.0) {
  flags = 0;

  if (bd.bullet) {
    flags |= bulletFlag;
  }
  if (bd.fixedRotation) {
    flags |= fixedRotationFlag;
  }
  if (bd.allowSleep) {
    flags |= autoSleepFlag;
  }
  if (bd.isAwake) {
    flags |= awakeFlag;
  }
  if (bd.active) {
    flags |= activeFlag;
  }

  transform.p.setFrom(bd.position);
  transform.q.setAngle(bd.angle);

  sweep.localCenter.setZero();
  sweep.c0.setFrom(transform.p);
  sweep.c.setFrom(transform.p);
  sweep.a0 = bd.angle;
  sweep.a = bd.angle;
  sweep.alpha0 = 0.0;

  linearVelocity.setFrom(bd.linearVelocity);
  _angularVelocity = bd.angularVelocity;

  linearDamping = bd.linearDamping;
  angularDamping = bd.angularDamping;
  gravityOverride = bd.gravityOverride;
  gravityScale = bd.gravityScale;

  force.setZero();

  sleepTime = 0.0;

  _bodyType = bd.type;

  if (_bodyType == BodyType.dynamic) {
    _mass = 1.0;
    _inverseMass = 1.0;
  } else {
    _mass = 0.0;
    _inverseMass = 0.0;
  }

  inertia = 0.0;
  inverseInertia = 0.0;

  userData = bd.userData;
}