public b2Contact(b2Fixture fA, int indexA, b2Fixture fB, int indexB) { m_flags = b2ContactFlags.e_enabledFlag; m_fixtureA = fA; m_fixtureB = fB; m_indexA = indexA; m_indexB = indexB; m_manifold = b2Manifold.Create(); m_manifold.pointCount = 0; Prev = null; Next = null; m_NodeA = new b2ContactEdge(); m_NodeA.Contact = null; m_NodeA.hasPrev = false; m_NodeA.hasNext = false; m_NodeA.Other = null; m_nodeB = new b2ContactEdge(); m_nodeB.Contact = null; m_nodeB.hasPrev = false; m_nodeB.hasNext = false; m_nodeB.Other = null; m_toiCount = 0; m_friction = b2Math.b2MixFriction(m_fixtureA.Friction, m_fixtureB.Friction); m_restitution = b2Math.b2MixRestitution(m_fixtureA.Restitution, m_fixtureB.Restitution); }
public b2Contact() { m_manifold = new b2Manifold(); NodeA = new b2ContactEdge(); NodeB = new b2ContactEdge(); }
protected b2Transform m_xf = b2Transform.Default; // the body origin transform #endregion Fields #region Constructors public b2Body(b2BodyDef bd, b2World world) { m_flags = 0; if (bd.bullet) { m_flags |= b2BodyFlags.e_bulletFlag; } if (bd.fixedRotation) { m_flags |= b2BodyFlags.e_fixedRotationFlag; } if (bd.allowSleep) { m_flags |= b2BodyFlags.e_autoSleepFlag; } if (bd.awake) { m_flags |= b2BodyFlags.e_awakeFlag; } if (bd.active) { m_flags |= b2BodyFlags.e_activeFlag; } m_world = world; m_xf.p = bd.position; m_xf.q.Set(bd.angle); Sweep.localCenter.SetZero(); Sweep.c0 = m_xf.p; Sweep.c = m_xf.p; Sweep.a0 = bd.angle; Sweep.a = bd.angle; Sweep.alpha0 = 0.0f; m_jointList = null; m_contactList = null; Prev = null; Next = null; m_linearVelocity = bd.linearVelocity; m_angularVelocity = bd.angularVelocity; m_linearDamping = bd.linearDamping; m_angularDamping = bd.angularDamping; m_gravityScale = bd.gravityScale; m_force.SetZero(); m_torque = 0.0f; m_sleepTime = 0.0f; m_type = bd.type; if (m_type == b2BodyType.b2_dynamicBody) { m_mass = 1.0f; m_invMass = 1.0f; } else { m_mass = 0.0f; m_invMass = 0.0f; } m_I = 0.0f; m_invI = 0.0f; m_userData = bd.userData; m_fixtureList = null; m_fixtureCount = 0; }
public virtual void SetActive(bool flag) { if (flag == IsActive()) { return; } if (flag) { m_flags |= b2BodyFlags.e_activeFlag; // Create all proxies. b2BroadPhase broadPhase = m_world.ContactManager.BroadPhase; for (b2Fixture f = m_fixtureList; f != null; f = f.Next) { f.CreateProxies(broadPhase, m_xf); } // Contacts are created the next time step. } else { m_flags &= ~b2BodyFlags.e_activeFlag; // Destroy all proxies. b2BroadPhase broadPhase = m_world.ContactManager.BroadPhase; for (b2Fixture f = m_fixtureList; f != null; f = f.Next) { f.DestroyProxies(broadPhase); } // Destroy the attached contacts. b2ContactEdge ce = m_contactList; while (ce != null) { b2ContactEdge ce0 = ce; ce = ce.Next; m_world.ContactManager.Destroy(ce0.Contact); } m_contactList = null; } }
public b2Contact(b2Fixture fA, int indexA, b2Fixture fB, int indexB) { m_flags = b2ContactFlags.e_enabledFlag; m_fixtureA = fA; m_fixtureB = fB; m_indexA = indexA; m_indexB = indexB; m_manifold = b2Manifold.Create(); m_manifold.pointCount = 0; Prev = null; Next = null; m_NodeA = new b2ContactEdge(); m_NodeA.Contact = null; m_NodeA.hasPrev = false; m_NodeA.hasNext = false; m_NodeA.Other = null; m_nodeB = new b2ContactEdge(); m_nodeB.Contact = null; m_nodeB.hasPrev = false; m_nodeB.hasNext = false; m_nodeB.Other = null; m_toiCount = 0; m_friction = b2Math.b2MixFriction(m_fixtureA.Friction, m_fixtureB.Friction); m_restitution = b2Math.b2MixRestitution(m_fixtureA.Restitution, m_fixtureB.Restitution); }