static void Main(string[] args) { { var world = new DiscreteDynamicsWorld(); world.Gravity = new Vector3(0.0f, -10.0f, 0.0f); var info0 = new RigidBodyConstructionInfo(); info0.Mass = 1.0f; info0.CollisionShape = new BulletDotNet.Shapes.BoxShape(Vector3.One); info0.CenterOfMass = Vector3.Zero; var rb0 = new RigidBody(info0, OnGetTransform0, OnSetTransform0); var info1 = new RigidBodyConstructionInfo(); info1.Mass = 0.0f; info1.CollisionShape = new BulletDotNet.Shapes.BoxShape(Vector3.One); info1.CenterOfMass = Vector3.Zero; var rb1 = new RigidBody(info1, OnGetTransform1, OnSetTransform1); world.AddRigidBody(rb0); world.AddRigidBody(rb1); for (int i = 0; i < 100; i++) { rb0.Activate(); world.StepSimulation(1.0f / 60.0f); } world.RemoveRigidBody(rb0); world.RemoveRigidBody(rb1); } GC.Collect(); GC.WaitForPendingFinalizers(); }
public void RemoveRigidBody(RigidBody rigidBody) { if (!m_rigidBodies.Contains(rigidBody)) { throw new ArgumentException("RigidBody was not added"); } m_rigidBodies.Remove(rigidBody); Imports.biRemoveRigidBody(new HandleRef(this, m_handle), new HandleRef(rigidBody, rigidBody.m_handle)); }
public void AddRigidBody(RigidBody rigidBody) { if (m_rigidBodies.Contains(rigidBody)) { throw new ArgumentException("RigidBody already added"); } Imports.biAddRigidBody(new HandleRef(this, m_handle), new HandleRef(rigidBody, rigidBody.m_handle)); m_rigidBodies.Add(rigidBody); }
public RigidBody(RigidBodyConstructionInfo info, RigidBody.GetTransformDelegate get, RigidBody.SetTransformDelegate set) { m_info = info; OnGetTransform = get; OnSetTransform = set; var biInfo = new Imports.biRigidBodyConstructionInfo(); biInfo.m_mass = m_info.Mass; biInfo.m_collisionShape = m_info.CollisionShape.m_handle; biInfo.m_linearDamping = m_info.LinearDamping; biInfo.m_angularDamping = m_info.AngularDamping; biInfo.m_friction = m_info.Friction; biInfo.m_rollingFriction = m_info.RollingFriction; biInfo.m_restitution = m_info.Restitution; biInfo.m_linearSleepingThreshold = m_info.LinearSleepingThreshold; biInfo.m_angularSleepingThreshold = m_info.AngularSleepingThreshold; m_getDelegate = MotionStateGetTransform; m_setDelegate = MotionStateSetTransform; m_handle = Imports.biCreateRigidBody(ref biInfo, IntPtr.Zero, Marshal.GetFunctionPointerForDelegate(m_getDelegate), Marshal.GetFunctionPointerForDelegate(m_setDelegate)); }