コード例 #1
0
    public bool RemoveConstraint(TypedConstraint c)
    {
        if (!isDisposed)
        {
            if (physicWorldParameters.worldType < WorldType.RigidBodyDynamics)
            {
                Debug.LogError("World type must not be collision only");
                return(false);
            }

            if (physicWorldParameters.debugType >= BDebug.DebugType.Debug)
            {
                Debug.LogFormat("Removing constraint {0} from world", c.Userobject);
            }

            DWorld.RemoveConstraint(c);

            if (c.Userobject is BTypedConstraint)
            {
                ((BTypedConstraint)c.Userobject).m_isInWorld = false;
            }

            return(true);
        }

        return(false);
    }
コード例 #2
0
        private void PickRigidBody(RigidBody body, ref Vector3 pickPosition)
        {
            if (body.IsStaticObject || body.IsKinematicObject)
            {
                return;
            }

            _pickedBody = body;
            _pickedBody.ActivationState = ActivationState.DisableDeactivation;

            DiscreteDynamicsWorld world = _demo.Simulation.World;

            Vector3 localPivot = Vector3.TransformCoordinate(pickPosition, Matrix.Invert(body.CenterOfMassTransform));

            if (_demo.Input.KeysDown.Contains(Keys.ShiftKey))
            {
                var dof6 = new Generic6DofConstraint(body, Matrix.Translation(localPivot), false)
                {
                    LinearLowerLimit  = Vector3.Zero,
                    LinearUpperLimit  = Vector3.Zero,
                    AngularLowerLimit = Vector3.Zero,
                    AngularUpperLimit = Vector3.Zero
                };

                world.AddConstraint(dof6);
                _rigidBodyPickConstraint = dof6;

                dof6.SetParam(ConstraintParam.StopCfm, 0.8f, 0);
                dof6.SetParam(ConstraintParam.StopCfm, 0.8f, 1);
                dof6.SetParam(ConstraintParam.StopCfm, 0.8f, 2);
                dof6.SetParam(ConstraintParam.StopCfm, 0.8f, 3);
                dof6.SetParam(ConstraintParam.StopCfm, 0.8f, 4);
                dof6.SetParam(ConstraintParam.StopCfm, 0.8f, 5);

                dof6.SetParam(ConstraintParam.StopErp, 0.1f, 0);
                dof6.SetParam(ConstraintParam.StopErp, 0.1f, 1);
                dof6.SetParam(ConstraintParam.StopErp, 0.1f, 2);
                dof6.SetParam(ConstraintParam.StopErp, 0.1f, 3);
                dof6.SetParam(ConstraintParam.StopErp, 0.1f, 4);
                dof6.SetParam(ConstraintParam.StopErp, 0.1f, 5);
            }
            else
            {
                var p2p = new Point2PointConstraint(body, localPivot);
                world.AddConstraint(p2p);
                _rigidBodyPickConstraint = p2p;
                p2p.Setting.ImpulseClamp = 30;
                //very weak constraint for picking
                p2p.Setting.Tau = 0.001f;

                /*
                 * p2p.SetParam(ConstraintParams.Cfm, 0.8f, 0);
                 * p2p.SetParam(ConstraintParams.Cfm, 0.8f, 1);
                 * p2p.SetParam(ConstraintParams.Cfm, 0.8f, 2);
                 * p2p.SetParam(ConstraintParams.Erp, 0.1f, 0);
                 * p2p.SetParam(ConstraintParams.Erp, 0.1f, 1);
                 * p2p.SetParam(ConstraintParams.Erp, 0.1f, 2);
                 */
            }
        }
コード例 #3
0
        public void Evaluate(int SpreadMax)
        {
            if (this.FInput.IsConnected)
            {
                this.FType.SliceCount     = SpreadMax;
                this.FLifeTime.SliceCount = SpreadMax;
                this.FId.SliceCount       = SpreadMax;
                this.FCustom.SliceCount   = SpreadMax;

                for (int i = 0; i < SpreadMax; i++)
                {
                    TypedConstraint      cst = FInput[i];
                    ConstraintCustomData sc  = (ConstraintCustomData)cst.UserObject;

                    FType[i]     = cst.ConstraintType;
                    FId[i]       = sc.Id;
                    FLifeTime[i] = sc.LifeTime;
                    FCustom[i]   = sc.Custom;
                }
            }
            else
            {
                this.FType.SliceCount     = 0;
                this.FLifeTime.SliceCount = 0;
                this.FId.SliceCount       = 0;
                this.FCustom.SliceCount   = 0;
            }
        }
コード例 #4
0
        public static void AttachConstraint(this IConstraintContainer world, TypedConstraint typedConstraint)
        {
            ConstraintCustomData cd = new ConstraintCustomData(world.GetNewConstraintId());

            typedConstraint.UserObject = cd;
            world.Register(typedConstraint);
        }
コード例 #5
0
        public virtual void Dispose()
        {
            GC.SuppressFinalize(this);

            _constraint?.Dispose();
            _constraint = null;
        }
コード例 #6
0
 //Unregister a constraint with the physics world
 public static void Unregister(TypedConstraint constraint)
 {
     if (_decommisioning)
     {
         return;
     }
     Instance.Unregister_Internal(constraint);
 }
コード例 #7
0
 //override this one
 protected virtual void Dispose(bool isdisposing)
 {
     if (m_constraintPtr != null)
     {
         m_constraintPtr.Dispose();
         m_constraintPtr = null;
     }
 }
コード例 #8
0
 public static void DeleteAndDisposeAllConstraints(this DynamicsWorld world)
 {
     for (int i = 0; i < world.NumConstraints; i++)
     {
         TypedConstraint constraint = world.GetConstraint(i);
         world.DeleteAndDisposeConstraint(constraint);
     }
 }
コード例 #9
0
 private void OnConstraintDeleted(TypedConstraint constraint, int id)
 {
     if (constraint is TConstraint)
     {
         TConstraint tc = (TConstraint)constraint;
         this.constraintList.Remove(tc);
     }
 }
コード例 #10
0
    void OnDestroy()
    {
        for (int i = 0; i < createdObjs.Count; i++)
        {
            Destroy(createdObjs[i]);
        }
        createdObjs.Clear();
        UnityEngine.Debug.Log("ExitPhysics");
        if (World != null)
        {
            //remove/dispose constraints
            int i;
            for (i = World.NumConstraints - 1; i >= 0; i--)
            {
                TypedConstraint constraint = World.GetConstraint(i);
                World.RemoveConstraint(constraint);
                constraint.Dispose();
            }

            //remove the rigidbodies from the dynamics world and delete them
            for (i = World.NumCollisionObjects - 1; i >= 0; i--)
            {
                CollisionObject obj  = World.CollisionObjectArray[i];
                RigidBody       body = obj as RigidBody;
                if (body != null && body.MotionState != null)
                {
                    body.MotionState.Dispose();
                }
                World.RemoveCollisionObject(obj);
                obj.Dispose();
            }

            //delete collision shapes
            foreach (CollisionShape shape in CollisionShapes)
            {
                shape.Dispose();
            }
            CollisionShapes.Clear();

            World.Dispose();
            Broadphase.Dispose();
            Dispatcher.Dispose();
            CollisionConf.Dispose();
        }

        if (Broadphase != null)
        {
            Broadphase.Dispose();
        }
        if (Dispatcher != null)
        {
            Dispatcher.Dispose();
        }
        if (CollisionConf != null)
        {
            CollisionConf.Dispose();
        }
    }
コード例 #11
0
 private static void CleanupConstraints(DynamicsWorld world)
 {
     for (int i = world.NumConstraints - 1; i >= 0; i--)
     {
         TypedConstraint constraint = world.GetConstraint(i);
         world.RemoveConstraint(constraint);
         constraint.Dispose();
     }
 }
コード例 #12
0
        public void RemoveConctraint(TypedConstraint cst, ConstraintCustomData cdata)
        {
            this.dynamicsWorld.DeleteAndDisposeConstraint(cst);

            if (this.ConstraintDeleted != null)
            {
                this.ConstraintDeleted(cst, cdata.Id);
            }
        }
コード例 #13
0
        /// <summary>
        /// Creates the joint data
        /// </summary>
        public void CreateJoint()
        {
            if (joint != null || GetSkeletalJoint() == null)
            {
                return;
            }

            switch (GetSkeletalJoint().GetJointType())
            {
            case SkeletalJointType.ROTATIONAL:
                RotationalJoint_Base nodeR        = (RotationalJoint_Base)GetSkeletalJoint();
                CollisionObject      parentObject = ((BulletRigidNode)GetParent()).BulletObject;
                WheelDriverMeta      wheel        = GetSkeletalJoint().cDriver.GetInfo <WheelDriverMeta>();

                Vector3 pivot = nodeR.basePoint.Convert();

                Matrix4 locJ, locP;     //Local Joint Pivot, Local Parent Pivot

                BulletObject.WorldTransform = parentObject.WorldTransform * Matrix4.CreateTranslation(pivot);

                if (debug)
                {
                    Console.WriteLine("Pivot at " + pivot);
                }

                GetFrames(nodeR.basePoint.Convert(), parentObject.WorldTransform, BulletObject.WorldTransform, out locP, out locJ);

                //HingeConstraint temp = new HingeConstraint((RigidBody)parentObject, /*(RigidBody)*/BulletObject, locP, locJ);
                HingeConstraint temp = new HingeConstraint((RigidBody)parentObject, BulletObject, pivot, Vector3.Zero, nodeR.axis.Convert(), nodeR.axis.Convert());
                joint = temp;
                temp.SetAxis(nodeR.axis.Convert());

                if (nodeR.hasAngularLimit)
                {
                    temp.SetLimit(nodeR.angularLimitLow, nodeR.angularLimitHigh);
                }

                //also need to find a less screwy way to do this
                Update = (f) => { (/*(RigidBody)*/ BulletObject).ApplyTorque(nodeR.axis.Convert() * f * 25); };

                if (debug)
                {
                    Console.WriteLine("{0} joint made", wheel == null ? "Rotational" : "Wheel");
                }
                break;

            default:
                if (debug)
                {
                    Console.WriteLine("Received joint of type {0}", GetSkeletalJoint().GetJointType());
                }
                break;
            }
        }
コード例 #14
0
        public virtual void ExitPhysics()
        {
            BulletExampleRunner.Get().ExitPhysics();
            UnityEngine.Debug.Log("ExitPhysics");
            if (_world != null)
            {
                //remove/dispose constraints
                int i;
                for (i = _world.NumConstraints - 1; i >= 0; i--)
                {
                    TypedConstraint constraint = _world.GetConstraint(i);
                    _world.RemoveConstraint(constraint);
                    constraint.Dispose();
                }

                //remove the rigidbodies from the dynamics world and delete them
                for (i = _world.NumCollisionObjects - 1; i >= 0; i--)
                {
                    CollisionObject obj  = _world.CollisionObjectArray[i];
                    RigidBody       body = obj as RigidBody;
                    if (body != null && body.MotionState != null)
                    {
                        body.MotionState.Dispose();
                    }
                    _world.RemoveCollisionObject(obj);
                    obj.Dispose();
                }

                //delete collision shapes
                foreach (CollisionShape shape in CollisionShapes)
                {
                    shape.Dispose();
                }
                CollisionShapes.Clear();

                _world.Dispose();
                Broadphase.Dispose();
                Dispatcher.Dispose();
                CollisionConf.Dispose();
            }

            if (Broadphase != null)
            {
                Broadphase.Dispose();
            }
            if (Dispatcher != null)
            {
                Dispatcher.Dispose();
            }
            if (CollisionConf != null)
            {
                CollisionConf.Dispose();
            }
        }
コード例 #15
0
 void RemovePickingConstraint()
 {
     if (pickConstraint != null && PhysicsContext.World != null)
     {
         PhysicsContext.World.RemoveConstraint(pickConstraint);
         pickConstraint.Dispose();
         pickConstraint = null;
         pickedBody.ForceActivationState(ActivationState.ActiveTag);
         pickedBody.DeactivationTime = 0;
         pickedBody = null;
     }
 }
コード例 #16
0
 public void releaseObject()
 {
     if (_pick_constraint != null && _physics_world.world != null)
     {
         _physics_world.world.RemoveConstraint(_pick_constraint);
         _pick_constraint.Dispose();
         _pick_constraint = null;
         _picked_body.ForceActivationState(ActivationState.ActiveTag);
         _picked_body.DeactivationTime = 0;
         _picked_body          = null;
         _zoom_picked_distance = false;
     }
 }
コード例 #17
0
ファイル: SoftWorldHolder.cs プロジェクト: mechaz/vvvv-sdk
        internal void ProcessDelete()
        {
            int cnt = this.RigidBodies.Count;

            for (int i = 0; i < cnt; i++)
            {
                RigidBody      body = this.RigidBodies[i];
                BodyCustomData bd   = (BodyCustomData)body.UserObject;
                bd.Created = false;
                if (bd.MarkedForDeletion)
                {
                    if (this.RigidBodyDeleted != null)
                    {
                        this.RigidBodyDeleted(body, bd.Id);
                    }
                    this.Unregister(body);
                }
            }

            cnt = this.SoftBodies.Count;
            for (int i = 0; i < cnt; i++)
            {
                SoftBody       body = this.SoftBodies[i];
                BodyCustomData bd   = (BodyCustomData)body.UserObject;
                bd.Created = false;
                if (bd.MarkedForDeletion)
                {
                    if (this.SoftBodyDeleted != null)
                    {
                        this.SoftBodyDeleted(body, bd.Id);
                    }
                    this.Unregister(body);
                }
            }

            cnt = this.Constraints.Count;
            for (int i = 0; i < cnt; i++)
            {
                TypedConstraint      cst = this.constraints[i];
                ConstraintCustomData cd  = (ConstraintCustomData)cst.UserObject;
                cd.Created = false;
                if (cd.MarkedForDeletion)
                {
                    if (this.ConstraintDeleted != null)
                    {
                        this.ConstraintDeleted(cst, cd.Id);
                    }
                    this.Unregister(cst);
                }
            }
        }
コード例 #18
0
 public void Evaluate(int SpreadMax)
 {
     if (FInput.PluginIO.IsConnected)
     {
         for (int i = 0; i < SpreadMax; i++)
         {
             if (FApply[i])
             {
                 TypedConstraint      cst  = this.FInput[i];
                 ConstraintCustomData cust = (ConstraintCustomData)cst.UserObject;
                 cust.MarkedForDeletion = true;
             }
         }
     }
 }
コード例 #19
0
        public void Dispose()
        {
            for (int i = _World.NumConstraints - 1; i >= 0; i--)
            {
                TypedConstraint constraint = _World.GetConstraint(i);
                _World.RemoveConstraint(constraint);
                constraint.Dispose();
            }

            _World.Dispose();
            broadphase.Dispose();
            if (dispatcher != null)
            {
                dispatcher.Dispose();
            }
            collisionConf.Dispose();
        }
コード例 #20
0
ファイル: PhysicsHandler.cs プロジェクト: scikodot/manipusim
        public static void Dispose()  // TODO: can crash; examine!
        {
            // remove/dispose of constraints
            for (int i = World.NumConstraints - 1; i >= 0; i--)
            {
                TypedConstraint constraint = World.GetConstraint(i);

                lock (_worldSyncRoot)
                    World.RemoveConstraint(constraint);

                constraint.Dispose();
            }

            // remove the rigidbodies from the dynamics world and delete them
            for (int i = World.NumCollisionObjects - 1; i >= 0; i--)
            {
                CollisionObject obj  = World.CollisionObjectArray[i];
                RigidBody       body = obj as RigidBody;
                if (body != null && body.MotionState != null)
                {
                    body.MotionState.Dispose();
                }

                lock (_worldSyncRoot)
                    World.RemoveCollisionObject(obj);

                obj.Dispose();
            }

            // delete collision shapes
            foreach (CollisionShape shape in _collisionShapes)
            {
                shape.Dispose();
            }
            _collisionShapes.Clear();

            lock (_worldSyncRoot)
                World.Dispose();

            _broadphase.Dispose();
            if (_dispatcher != null)
            {
                _dispatcher.Dispose();
            }
            _collisionConf.Dispose();
        }
コード例 #21
0
        private void LoadJoint(UrdfJoint joint)
        {
            RigidBody childRigidBody;

            if (!_linkToRigidBody.TryGetValue(joint.Child.Name, out childRigidBody))
            {
                return;
            }

            RigidBody parentRigidBody;

            if (joint.Parent.Collisions.Any())
            {
                if (!_linkToRigidBody.TryGetValue(joint.Parent.Name, out parentRigidBody))
                {
                    return;
                }
            }
            else
            {
                parentRigidBody = TypedConstraint.GetFixedBody();
            }

            TypedConstraint constraint;

            if (joint is UrdfContinuousJoint)
            {
                constraint = CreateRevoluteJoint(childRigidBody, parentRigidBody);
            }
            else if (joint is UrdfFixedJoint)
            {
                Matrix childFrame = ParseInertia(joint.Child.Inertial.Inertia);
                childFrame = ParsePose(joint.Origin);

                constraint = CreateFixedJoint(childRigidBody, parentRigidBody, childFrame);
            }
            else
            {
                //throw new NotImplementedException();
                return;
            }
            World.AddConstraint(constraint, true);
        }
コード例 #22
0
        public void unload()
        {
            int i;

            // Remove constraints
            for (i = _physics_world.world.NumConstraints - 1; i >= 0; i--)
            {
                TypedConstraint constraint = _physics_world.world.GetConstraint(i);
                _physics_world.world.RemoveConstraint(constraint);
                constraint.Dispose();
            }

            // Remove rigidbodies from the dynamics world and delete them
            for (i = _physics_world.world.NumCollisionObjects - 1; i >= 0; i--)
            {
                CollisionObject obj  = _physics_world.world.CollisionObjectArray[i];
                RigidBody       body = obj as RigidBody;
                if (body != null && body.MotionState != null)
                {
                    body.MotionState.Dispose();
                }
                _physics_world.world.RemoveCollisionObject(obj);
                obj.Dispose();
            }

            // Delete collision shapes
            foreach (CollisionShape shape in _physics_world.collision_shapes)
            {
                shape.Dispose();
            }
            _physics_world.collision_shapes.Clear();


            // Delete the world
            _physics_world.world.Dispose();
            _broadphase.Dispose();
            if (_dispatcher != null)
            {
                _dispatcher.Dispose();
            }
            _collision_config.Dispose();
        }
コード例 #23
0
        public void RemovePickingConstraint()
        {
            if (_rigidBodyPickConstraint != null)
            {
                _demo.Simulation.World.RemoveConstraint(_rigidBodyPickConstraint);
                _rigidBodyPickConstraint.Dispose();
                _rigidBodyPickConstraint = null;
                _pickedBody.ForceActivationState(ActivationState.ActiveTag);
                _pickedBody.DeactivationTime = 0;
                _pickedBody = null;
            }

            if (_multiBodyPickConstraint != null)
            {
                _multiBodyPickConstraint.MultiBodyA.CanSleep = _prevCanSleep;
                (_demo.Simulation.World as MultiBodyDynamicsWorld).RemoveMultiBodyConstraint(_multiBodyPickConstraint);
                _multiBodyPickConstraint.Dispose();
                _multiBodyPickConstraint = null;
            }
        }
コード例 #24
0
        void RemovePickingConstraint()
        {
            if (pickConstraint != null && World != null)
            {
                World.RemoveConstraint(pickConstraint);
                pickConstraint.Dispose();
                pickConstraint = null;
                pickedBody.ForceActivationState(ActivationState.ActiveTag);
                pickedBody.DeactivationTime = 0;
                pickedBody = null;
            }

            if (pickingMultiBodyPoint2Point != null)
            {
                pickingMultiBodyPoint2Point.MultiBodyA.CanSleep = prevCanSleep;
                (World as MultiBodyDynamicsWorld).RemoveMultiBodyConstraint(pickingMultiBodyPoint2Point);
                pickingMultiBodyPoint2Point.Dispose();
                pickingMultiBodyPoint2Point = null;
            }
        }
コード例 #25
0
        //Register a constraint with the simulation
        public override void Register(TypedConstraint constraint)
        {
            if (!_initlialized)
            {
                InitializeWorld(BulletUpdate);
                Debug.LogWarning("A Constraint attempted to register with the simulation before it was initialized!\n" +
                                 "Please check your script execution order");
            }

            //Check if already registered and warn the user
            if (_bulletConstraints.Contains(constraint))
            {
                Debug.LogError("Specified Constraint has already been registered with the simulation!\n");
                return;
            }

            //Register the Bullet RigidBody with the simulation and list for tracking
            _bulletConstraints.Add(constraint);
            _dynamicsWorld.AddConstraint(constraint);
        }
コード例 #26
0
ファイル: Physics_Bullet.cs プロジェクト: ala53/misc-code
        public void ExitPhysics()
        {
            //remove/dispose constraints
            int i;

            for (i = physics_world.NumConstraints - 1; i >= 0; i--)
            {
                TypedConstraint constraint = physics_world.GetConstraint(i);
                physics_world.RemoveConstraint(constraint);
                constraint.Dispose();
            }

            //remove the rigidbodies from the dynamics world and delete them
            for (i = physics_world.NumCollisionObjects - 1; i >= 0; i--)
            {
                CollisionObject obj  = physics_world.CollisionObjectArray[i];
                RigidBody       body = obj as RigidBody;
                if (body != null && body.MotionState != null)
                {
                    body.MotionState.Dispose();
                }
                physics_world.RemoveCollisionObject(obj);
                obj.Dispose();
            }

            //delete collision shapes
            foreach (CollisionShape shape in collisionShapes)
            {
                shape.Dispose();
            }
            collisionShapes.Clear();

            physics_world.Dispose();
            broadphase.Dispose();
            if (dispatcher != null)
            {
                dispatcher.Dispose();
            }
            collisionConf.Dispose();
        }
コード例 #27
0
        public void Drop()
        {
            if (simThread != null)
            {
                simThread.Join();
            }

            for (int i = bulletWorld.NumConstraints - 1; i >= 0; i--)
            {
                TypedConstraint c = bulletWorld.GetConstraint(i);
                bulletWorld.RemoveConstraint(c);
                c.Dispose();
            }

            for (int i = bulletWorld.NumCollisionObjects - 1; i >= 0; i--)
            {
                CollisionObject o = bulletWorld.CollisionObjectArray[i];

                RigidBody b = o as RigidBody;
                if (b != null && b.MotionState != null)
                {
                    b.MotionState.Dispose();
                }

                bulletWorld.RemoveCollisionObject(o);
                o.Dispose();
            }

            foreach (CollisionShape s in bulletShapes)
            {
                s.Dispose();
            }
            bulletShapes.Clear();

            bulletWorld.Dispose();
            bulletBroadphase.Dispose();
            bulletCollisionDispatcher.Dispose();
            bulletCollisionConfiguration.Dispose();
        }
コード例 #28
0
        //Unregister a constraint with the simulation
        public override void Unregister(TypedConstraint constraint)
        {
            //Warn the user if the physics world has not been initialized
            if (!_initlialized)
            {
                Debug.LogError("A Constraint attempted to unregister from the simulation before it was initialized!\n" +
                               "Please check your scene setup!");
                return;
            }

            //Check if the specified Object has been registered
            if (!_bulletConstraints.Contains(constraint))
            {
                Debug.LogError("Specified Constraint has not been registered with this simulation!\n" +
                               "Please check your scene setup!");
                return;
            }

            //Unregister the Bullet object from the simulation and callback
            _bulletConstraints.Remove(constraint);
            _dynamicsWorld.RemoveConstraint(constraint);
        }
コード例 #29
0
        public void RemoveConstraint(TypedConstraint c)
        {
            if (!_isDisposed)
            {
                if (m_worldType < WorldType.RigidBodyDynamics)
                {
                    Debug.LogError("World type must not be collision only");
                }

                if (debugType >= BDebug.DebugType.Debug)
                {
                    Debug.LogFormat("Removing constraint {0} from world", c.Userobject);
                }

                ((DiscreteDynamicsWorld)m_world).RemoveConstraint(c);

                if (c.Userobject is BTypedConstraint)
                {
                    ((BTypedConstraint)c.Userobject).m_isInWorld = false;
                }
            }
        }
コード例 #30
0
ファイル: Physics.cs プロジェクト: diqost/bullet
        void ResetScene()
        {
            while (World.NumConstraints > 0)
            {
                TypedConstraint pc = World.GetConstraint(0);
                World.RemoveConstraint(pc);
                pc.Dispose();
            }

            // Don't foreach here, it'll fail.
            for (int i = World.CollisionObjectArray.Count - 1; i >= 0; i--)
            {
                CollisionObject obj = World.CollisionObjectArray[i];

                RigidBody body = RigidBody.Upcast(obj);
                if (body != null && body.MotionState != null)
                {
                    body.MotionState.Dispose();
                }

                if (obj is SoftBody)
                {
                    SoftWorld.RemoveSoftBody(obj as SoftBody);
                }
                else
                {
                    if (body != null)
                    {
                        World.RemoveRigidBody(body);
                    }
                    else
                    {
                        World.RemoveCollisionObject(obj);
                    }
                }
                obj.Dispose();
            }
        }
コード例 #31
0
ファイル: DynamicsWorld.cs プロジェクト: himapo/ccm
 public virtual void addConstraint(TypedConstraint constraint, bool disableCollisionsBetweenLinkedBodies) { }
コード例 #32
0
        int btGetConstraintIslandId(TypedConstraint lhs)
        {
            int islandId;

            CollisionObject rcolObj0 = lhs.RigidBodyA;
            CollisionObject rcolObj1 = lhs.RigidBodyB;
            islandId = rcolObj0.IslandTag >= 0 ? rcolObj0.IslandTag : rcolObj1.IslandTag;
            return islandId;

        }
コード例 #33
0
ファイル: DynamicsWorld.cs プロジェクト: himapo/ccm
        //public abstract void debugDrawWorld();

        public virtual void addConstraint(TypedConstraint constraint) { }
コード例 #34
0
ファイル: RigidBody.cs プロジェクト: himapo/ccm
        public void addConstraintRef(TypedConstraint c)
        {
            int index = m_constraintRefs.IndexOf(c);
            if (index == -1)
                m_constraintRefs.Add(c);

            m_checkCollideWith = true;
        }
コード例 #35
0
ファイル: RigidBody.cs プロジェクト: himapo/ccm
 public void removeConstraintRef(TypedConstraint c)
 {
     m_constraintRefs.Remove(c);
     m_checkCollideWith = m_constraintRefs.Count > 0;
 }
コード例 #36
0
ファイル: DynamicsWorld.cs プロジェクト: himapo/ccm
 public virtual void removeConstraint(TypedConstraint constraint) { }
コード例 #37
0
ファイル: Generic6DofConstraint.cs プロジェクト: himapo/ccm
 public override void getInfo1(TypedConstraint.ConstraintInfo1 info)
 {
     if (m_useSolveConstraintObsolete)
     {
         info.m_numConstraintRows = 0;
         info.nub = 0;
     }
     else
     {
         //prepare constraint
         calculateTransforms(m_rbA.CenterOfMassTransform, m_rbB.CenterOfMassTransform);
         info.m_numConstraintRows = 0;
         info.nub = 6;
         int i;
         //test linear limits
         for (i = 0; i < 3; i++)
         {
             if (m_linearLimits.needApplyForce(i))
             {
                 info.m_numConstraintRows++;
                 info.nub--;
             }
         }
         //test angular limits
         for (i = 0; i < 3; i++)
         {
             if (testAngularLimitMotor(i))
             {
                 info.m_numConstraintRows++;
                 info.nub--;
             }
         }
     }
 }
コード例 #38
0
ファイル: Generic6DofConstraint.cs プロジェクト: himapo/ccm
 public override void getInfo2(TypedConstraint.ConstraintInfo2 info)
 {
     getInfo2NonVirtual(info, m_rbA.CenterOfMassTransform, m_rbB.CenterOfMassTransform, m_rbA.LinearVelocity, m_rbB.LinearVelocity, m_rbA.AngularVelocity, m_rbB.AngularVelocity);
 }