Esempio n. 1
0
    protected BSPhysObject(BSScene parentScene, uint localID, string name, string typeName)
    {
        PhysicsScene = parentScene;
        LocalID = localID;
        PhysObjectName = name;
        Name = name;    // PhysicsActor also has the name of the object. Someday consolidate.
        TypeName = typeName;

        // Initialize variables kept in base.
        GravModifier = 1.0f;
        Gravity = new OMV.Vector3(0f, 0f, BSParam.Gravity);

        // We don't have any physical representation yet.
        PhysBody = new BulletBody(localID);
        PhysShape = new BulletShape();

        LastAssetBuildFailed = false;

        // Default material type. Also sets Friction, Restitution and Density.
        SetMaterial((int)MaterialAttributes.Material.Wood);

        CollisionCollection = new CollisionEventUpdate();
        CollisionsLastTick = CollisionCollection;
        SubscribedEventsMs = 0;
        CollidingStep = 0;
        CollidingGroundStep = 0;
        CollisionAccumulation = 0;
        ColliderIsMoving = false;
        CollisionScore = 0;

        // All axis free.
        LockedAxis = LockedAxisFree;
    }
 public BSConstraintHinge(BulletWorld world, BulletBody obj1, BulletBody obj2,
                 Vector3 pivotInA, Vector3 pivotInB,
                 Vector3 axisInA, Vector3 axisInB,
                 bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies)
     : base(world)
 {
     m_body1 = obj1;
     m_body2 = obj2;
     m_constraint = PhysicsScene.PE.CreateHingeConstraint(world, obj1, obj2,
                             pivotInA, pivotInB, axisInA, axisInB,
                             useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies);
     m_enabled = true;
 }
 public BSConstraintSlider(BulletWorld world, BulletBody obj1, BulletBody obj2,
                 Vector3 frameInAloc, Quaternion frameInArot,
                 Vector3 frameInBloc, Quaternion frameInBrot,
                 bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies)
     : base(world)
 {
     m_body1 = obj1;
     m_body2 = obj2;
     m_constraint = PhysicsScene.PE.CreateSliderConstraint(world, obj1, obj2,
                             frameInAloc, frameInArot, frameInBloc, frameInBrot,
                             useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies);
     m_enabled = true;
 }
Esempio n. 4
0
 public BSConstraintConeTwist(BulletWorld world, BulletBody obj1, BulletBody obj2,
                 Vector3 frameInAloc, Quaternion frameInArot,
                 Vector3 frameInBloc, Quaternion frameInBrot,
                 bool disableCollisionsBetweenLinkedBodies)
     : base(world)
 {
     m_body1 = obj1;
     m_body2 = obj2;
     m_constraint = PhysicsScene.PE.CreateConeTwistConstraint(world, obj1, obj2,
                             frameInAloc, frameInArot, frameInBloc, frameInBrot,
                             disableCollisionsBetweenLinkedBodies);
     m_enabled = true;
 }
Esempio n. 5
0
 public BSHingeConstraint(BulletSim world, BulletBody obj1, BulletBody obj2,
                 Vector3 pivotInA, Vector3 pivotInB,
                 Vector3 axisInA, Vector3 axisInB,
                 bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies)
 {
     m_world = world;
     m_body1 = obj1;
     m_body2 = obj2;
     m_constraint = new BulletConstraint(
                         BulletSimAPI.CreateHingeConstraint2(m_world.ptr, m_body1.ptr, m_body2.ptr,
                             pivotInA, pivotInB,
                             axisInA, axisInB,
                             useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies));
     m_enabled = true;
 }
    public BSConstraintSpring(BulletWorld world, BulletBody obj1, BulletBody obj2,
                    Vector3 frame1Loc, Quaternion frame1Rot,
                    Vector3 frame2Loc, Quaternion frame2Rot,
                    bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies)
        :base(world, obj1, obj2)
    {
        m_constraint = PhysicsScene.PE.Create6DofSpringConstraint(world, obj1, obj2,
                                frame1Loc, frame1Rot, frame2Loc, frame2Rot,
                                useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies);
        m_enabled = true;

        PhysicsScene.DetailLog("{0},BSConstraintSpring,create,wID={1}, rID={2}, rBody={3}, cID={4}, cBody={5}",
                            obj1.ID, world.worldID, obj1.ID, obj1.AddrString, obj2.ID, obj2.AddrString);
        PhysicsScene.DetailLog("{0},BSConstraintSpring,create,  f1Loc={1},f1Rot={2},f2Loc={3},f2Rot={4},usefA={5},disCol={6}",
                    m_body1.ID, frame1Loc, frame1Rot, frame2Loc, frame2Rot, useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies);
    }
Esempio n. 7
0
 // Create a btGeneric6DofConstraint
 public BSConstraint6Dof(BulletWorld world, BulletBody obj1, BulletBody obj2,
                 Vector3 frame1, Quaternion frame1rot,
                 Vector3 frame2, Quaternion frame2rot,
                 bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies)
     : base(world)
 {
     m_body1 = obj1;
     m_body2 = obj2;
     m_constraint = PhysicsScene.PE.Create6DofConstraint(m_world, m_body1, m_body2,
                             frame1, frame1rot,
                             frame2, frame2rot,
                             useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies);
     m_enabled = true;
     world.physicsScene.DetailLog("{0},BS6DofConstraint,createFrame,wID={1}, rID={2}, rBody={3}, cID={4}, cBody={5}",
                         BSScene.DetailLogZero, world.worldID,
                         obj1.ID, obj1.AddrString, obj2.ID, obj2.AddrString);
 }
Esempio n. 8
0
    protected BSPhysObject(BSScene parentScene, uint localID, string name, string typeName)
    {
        IsInitialized = false;

        PhysScene = parentScene;
        LocalID = localID;
        PhysObjectName = name;
        Name = name;    // PhysicsActor also has the name of the object. Someday consolidate.
        TypeName = typeName;

        // Oddity if object is destroyed and recreated very quickly it could still have the old body.
        if (!PhysBody.HasPhysicalBody)
            PhysBody = new BulletBody(localID);

        // Clean out anything that might be in the physical actor list.
        // Again, a workaround for destroying and recreating an object very quickly.
        PhysicalActors.Dispose();

        UserSetCenterOfMassDisplacement = null;

        PrimAssetState = PrimAssetCondition.Unknown;

        // Initialize variables kept in base.
        // Beware that these cause taints to be queued whch can cause race conditions on startup.
        GravModifier = 1.0f;
        Gravity = new OMV.Vector3(0f, 0f, BSParam.Gravity);
        HoverActive = false;

        // Default material type. Also sets Friction, Restitution and Density.
        SetMaterial((int)MaterialAttributes.Material.Wood);

        CollisionsLastTickStep = -1;

        SubscribedEventsMs = 0;
        // Crazy values that will never be true
        CollidingStep = BSScene.NotASimulationStep;
        CollidingGroundStep = BSScene.NotASimulationStep;
        CollisionAccumulation = BSScene.NotASimulationStep;
        ColliderIsMoving = false;
        CollisionScore = 0;

        // All axis free.
        LockedLinearAxis = LockedAxisFree;
        LockedAngularAxis = LockedAxisFree;
    }
Esempio n. 9
0
 // Create a btGeneric6DofConstraint
 public BS6DofConstraint(BulletSim world, BulletBody obj1, BulletBody obj2,
                 Vector3 frame1, Quaternion frame1rot,
                 Vector3 frame2, Quaternion frame2rot,
                 bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies)
 {
     m_world = world;
     m_body1 = obj1;
     m_body2 = obj2;
     m_constraint = new BulletConstraint(
                         BulletSimAPI.Create6DofConstraint2(m_world.ptr, m_body1.ptr, m_body2.ptr,
                             frame1, frame1rot,
                             frame2, frame2rot,
                             useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies));
     m_enabled = true;
     world.physicsScene.DetailLog("{0},BS6DofConstraint,createFrame,wID={1}, rID={2}, rBody={3}, cID={4}, cBody={5}",
                         BSScene.DetailLogZero, world.worldID,
                         obj1.ID, obj1.ptr.ToString("X"), obj2.ID, obj2.ptr.ToString("X"));
 }
Esempio n. 10
0
 public BS6DofConstraint(BulletSim world, BulletBody obj1, BulletBody obj2,
                 Vector3 joinPoint,
                 bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies)
 {
     m_world = world;
     m_body1 = obj1;
     m_body2 = obj2;
     if (obj1.ptr == IntPtr.Zero || obj2.ptr == IntPtr.Zero)
     {
         world.physicsScene.DetailLog("{0},BS6DOFConstraint,badBodyPtr,wID={1}, rID={2}, rBody={3}, cID={4}, cBody={5}",
                         BSScene.DetailLogZero, world.worldID,
                         obj1.ID, obj1.ptr.ToString("X"), obj2.ID, obj2.ptr.ToString("X"));
         world.physicsScene.Logger.ErrorFormat("{0} Attempt to build 6DOF constraint with missing bodies: wID={1}, rID={2}, rBody={3}, cID={4}, cBody={5}",
                         "[BULLETSIM 6DOF CONSTRAINT]", world.worldID,
                         obj1.ID, obj1.ptr.ToString("X"), obj2.ID, obj2.ptr.ToString("X"));
         m_enabled = false;
     }
     else
     {
         m_constraint = new BulletConstraint(
                             BulletSimAPI.Create6DofConstraintToPoint2(m_world.ptr, m_body1.ptr, m_body2.ptr,
                                 joinPoint,
                                 useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies));
         world.physicsScene.DetailLog("{0},BS6DofConstraint,createMidPoint,wID={1}, csrt={2}, rID={3}, rBody={4}, cID={5}, cBody={6}",
                             BSScene.DetailLogZero, world.worldID, m_constraint.ptr.ToString("X"),
                             obj1.ID, obj1.ptr.ToString("X"), obj2.ID, obj2.ptr.ToString("X"));
         if (m_constraint.ptr == IntPtr.Zero)
         {
             world.physicsScene.Logger.ErrorFormat("{0} Failed creation of 6Dof constraint. rootID={1}, childID={2}",
                             LogHeader, obj1.ID, obj2.ID);
             m_enabled = false;
         }
         else
         {
             m_enabled = true;
         }
     }
 }
Esempio n. 11
0
    // 6 Dof constraint based on a midpoint between the two constrained bodies
    public BSConstraint6Dof(BulletWorld world, BulletBody obj1, BulletBody obj2,
                    Vector3 joinPoint,
                    bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies)
        : base(world)
    {
        m_body1 = obj1;
        m_body2 = obj2;
        if (!obj1.HasPhysicalBody || !obj2.HasPhysicalBody)
        {
            world.physicsScene.DetailLog("{0},BS6DOFConstraint,badBodyPtr,wID={1}, rID={2}, rBody={3}, cID={4}, cBody={5}",
                            BSScene.DetailLogZero, world.worldID,
                            obj1.ID, obj1.AddrString, obj2.ID, obj2.AddrString);
            world.physicsScene.Logger.ErrorFormat("{0} Attempt to build 6DOF constraint with missing bodies: wID={1}, rID={2}, rBody={3}, cID={4}, cBody={5}",
                            LogHeader, world.worldID, obj1.ID, obj1.AddrString, obj2.ID, obj2.AddrString);
            m_enabled = false;
        }
        else
        {
            m_constraint = PhysicsScene.PE.Create6DofConstraintToPoint(m_world, m_body1, m_body2,
                                    joinPoint,
                                    useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies);

            PhysicsScene.DetailLog("{0},BS6DofConstraint,createMidPoint,wID={1}, csrt={2}, rID={3}, rBody={4}, cID={5}, cBody={6}",
                                m_body1.ID, world.worldID, m_constraint.AddrString,
                                obj1.ID, obj1.AddrString, obj2.ID, obj2.AddrString);

            if (!m_constraint.HasPhysicalConstraint)
            {
                world.physicsScene.Logger.ErrorFormat("{0} Failed creation of 6Dof constraint. rootID={1}, childID={2}",
                                LogHeader, obj1.ID, obj2.ID);
                m_enabled = false;
            }
            else
            {
                m_enabled = true;
            }
        }
    }
Esempio n. 12
0
    protected BSPhysObject(BSScene parentScene, uint localID, string name, string typeName)
    {
        PhysicsScene = parentScene;
        LocalID = localID;
        PhysObjectName = name;
        TypeName = typeName;

        // We don't have any physical representation yet.
        PhysBody = new BulletBody(localID);
        PhysShape = new BulletShape();

        // A linkset of just me
        Linkset = BSLinkset.Factory(PhysicsScene, this);
        LastAssetBuildFailed = false;

        // Default material type
        Material = MaterialAttributes.Material.Wood;

        CollisionCollection = new CollisionEventUpdate();
        SubscribedEventsMs = 0;
        CollidingStep = 0;
        CollidingGroundStep = 0;
    }
 // Get the constraint between two bodies. There can be only one.
 // Return 'true' if a constraint was found.
 public bool TryGetConstraint(BulletBody body1, BulletBody body2, out BSConstraint returnConstraint)
 {
     uint lookingID1 = body1.ID;
     uint lookingID2 = body2.ID;
     try
     {
         m_constraints.ForEach(delegate(BSConstraint constrain)
         {
             if ((constrain.Body1.ID == lookingID1 && constrain.Body2.ID == lookingID2)
                 || (constrain.Body1.ID == lookingID2 && constrain.Body2.ID == lookingID1))
             {
                 throw new ThreadedClasses.ReturnValueException<BSConstraint>(constrain);
             }
         });
     }
     catch(ThreadedClasses.ReturnValueException<BSConstraint> e)
     {
         returnConstraint = e.Value;
         return true;
     }
     returnConstraint = default(BSConstraint);
     return false;
 }
Esempio n. 14
0
    // Get the constraint between two bodies. There can be only one.
    // Return 'true' if a constraint was found.
    public bool TryGetConstraint(BulletBody body1, BulletBody body2, out BSConstraint returnConstraint)
    {
        bool found = false;
        BSConstraint foundConstraint = null;

        uint lookingID1 = body1.ID;
        uint lookingID2 = body2.ID;
        lock (m_constraints)
        {
            foreach (BSConstraint constrain in m_constraints)
            {
                if ((constrain.Body1.ID == lookingID1 && constrain.Body2.ID == lookingID2)
                    || (constrain.Body1.ID == lookingID2 && constrain.Body2.ID == lookingID1))
                {
                    foundConstraint = constrain;
                    found = true;
                    break;
                }
            }
        }
        returnConstraint = foundConstraint;
        return found;
    }
Esempio n. 15
0
 public abstract void UpdateInertiaTensor(BulletBody obj);
Esempio n. 16
0
 public abstract BulletConstraint CreateHingeConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2,
                                                        Vector3 pivotinA, Vector3 pivotinB,
                                                        Vector3 axisInA, Vector3 axisInB,
                                                        bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies);
Esempio n. 17
0
 public abstract CollisionObjectTypes GetBodyType(BulletBody obj);
Esempio n. 18
0
 public abstract BulletConstraint CreateConeTwistConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2,
                                                            Vector3 frameInAloc, Quaternion frameInArot,
                                                            Vector3 frameInBloc, Quaternion frameInBrot,
                                                            bool disableCollisionsBetweenLinkedBodies);
Esempio n. 19
0
 public abstract void DestroyObject(BulletWorld sim, BulletBody obj);
Esempio n. 20
0
 public abstract bool ClearCollisionProxyCache(BulletWorld world, BulletBody obj);
Esempio n. 21
0
// =====================================================================================
// Debugging
        public virtual void DumpRigidBody(BulletWorld sim, BulletBody collisionObject)
        {
        }
Esempio n. 22
0
// =====================================================================================
// btDynamicsWorld entries
// public abstract bool AddObjectToWorld(BulletWorld world, BulletBody obj, Vector3 pos, Quaternion rot);
        public abstract bool AddObjectToWorld(BulletWorld world, BulletBody obj);
Esempio n. 23
0
 public abstract bool RemoveObjectFromWorld(BulletWorld world, BulletBody obj);
Esempio n. 24
0
// =====================================================================================
// btCollisionWorld entries
        public abstract void UpdateSingleAabb(BulletWorld world, BulletBody obj);
Esempio n. 25
0
 public abstract BulletConstraint CreatePoint2PointConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2,
                                                              Vector3 pivotInA, Vector3 pivotInB,
                                                              bool disableCollisionsBetweenLinkedBodies);
Esempio n. 26
0
 public abstract BulletConstraint CreateGearConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2,
                                                       Vector3 axisInA, Vector3 axisInB,
                                                       float ratio, bool disableCollisionsBetweenLinkedBodies);
Esempio n. 27
0
 public abstract bool WantsSleeping(BulletBody obj);
Esempio n. 28
0
 public abstract void Activate(BulletBody obj, bool forceActivation);
Esempio n. 29
0
 public BSConstraint6Dof(BulletWorld world, BulletBody obj1, BulletBody obj2) :base(world)
 {
     m_body1 = obj1;
     m_body2 = obj2;
     m_enabled = false;
 }
Esempio n. 30
0
 public abstract BulletConstraint Create6DofConstraintFixed(BulletWorld world, BulletBody obj1,
                                                            Vector3 frameInBloc, Quaternion frameInBrot,
                                                            bool useLinearReferenceFrameB, bool disableCollisionsBetweenLinkedBodies);
Esempio n. 31
0
 public abstract void ForceActivationState(BulletBody obj, ActivationState state);
Esempio n. 32
0
 public abstract BulletConstraint CreateSliderConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2,
                                                         Vector3 frameInAloc, Quaternion frameInArot,
                                                         Vector3 frameInBloc, Quaternion frameInBrot,
                                                         bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies);
Esempio n. 33
0
 public abstract bool IsActive(BulletBody obj);
Esempio n. 34
0
 public abstract void SetLinearFactor(BulletBody obj, Vector3 factor);
Esempio n. 35
0
 public abstract BulletConstraint Create6DofConstraintToPoint(BulletWorld world, BulletBody obj1, BulletBody obj2,
                                                              Vector3 joinPoint,
                                                              bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies);
Esempio n. 36
0
 public abstract void SetMassProps(BulletBody obj, float mass, Vector3 inertia);
Esempio n. 37
0
 public abstract void SetRestitution(BulletBody obj, float val);
Esempio n. 38
0
 public abstract void SetTranslation(BulletBody obj, Vector3 position, Quaternion rotation);
Esempio n. 39
0
 public abstract bool PushUpdate(BulletBody obj);
Esempio n. 40
0
 public abstract void Translate(BulletBody obj, Vector3 trans);
Esempio n. 41
0
 public abstract void SetContactProcessingThreshold(BulletBody obj, float val);
Esempio n. 42
0
 public abstract BulletConstraint Create6DofSpringConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2,
                                                             Vector3 frame1loc, Quaternion frame1rot,
                                                             Vector3 frame2loc, Quaternion frame2rot,
                                                             bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies);
Esempio n. 43
0
 public abstract void SetLinearDamping(BulletBody obj, float lin_damping);
Esempio n. 44
0
 public abstract float GetContactProcessingThreshold(BulletBody obj);
Esempio n. 45
0
 public abstract void SetLinearVelocity(BulletBody obj, Vector3 val);
Esempio n. 46
0
 public abstract bool IsStaticOrKinematicObject(BulletBody obj);
Esempio n. 47
0
 // Set the force being applied to the object as if its mass is one.
 public abstract void SetObjectForce(BulletBody obj, Vector3 force);
Esempio n. 48
0
 public abstract bool HasContactResponse(BulletBody obj);
Esempio n. 49
0
 public abstract void SetSleepingThresholds(BulletBody obj, float lin_threshold, float ang_threshold);
Esempio n. 50
0
 public abstract void SetCollisionShape(BulletWorld sim, BulletBody obj, BulletShape shape);
Esempio n. 51
0
 public abstract void SetUserPointer(BulletBody obj, IntPtr val);
Esempio n. 52
0
 public abstract BulletShape GetCollisionShape(BulletBody obj);
Esempio n. 53
0
 public abstract void UpdateDeactivation(BulletBody obj, float timeStep);
Esempio n. 54
0
 public abstract int GetActivationState(BulletBody obj);
Esempio n. 55
0
 // =====================================================================================
 // btCollisionWorld entries
 public abstract void UpdateSingleAabb(BulletWorld world, BulletBody obj);
Esempio n. 56
0
 public abstract void SetActivationState(BulletBody obj, int state);
Esempio n. 57
0
 // A 6 Dof constraint that is fixed in the world and constrained to a on-the-fly created static object
 public BSConstraint6Dof(BulletWorld world, BulletBody obj1, Vector3 frameInBloc, Quaternion frameInBrot,
                 bool useLinearReferenceFrameB, bool disableCollisionsBetweenLinkedBodies)
     : base(world)
 {
     m_body1 = obj1;
     m_body2 = obj1; // Look out for confusion down the road
     m_constraint = PhysicsScene.PE.Create6DofConstraintFixed(m_world, m_body1,
                             frameInBloc, frameInBrot,
                             useLinearReferenceFrameB, disableCollisionsBetweenLinkedBodies);
     m_enabled = true;
     PhysicsScene.DetailLog("{0},BS6DofConstraint,createFixed,wID={1},rID={2},rBody={3}",
                                 m_body1.ID, world.worldID, obj1.ID, obj1.AddrString);
     PhysicsScene.DetailLog("{0},BS6DofConstraint,createFixed,  fBLoc={1},fBRot={2},usefA={3},disCol={4}",
                         m_body1.ID, frameInBloc, frameInBrot, useLinearReferenceFrameB, disableCollisionsBetweenLinkedBodies);
 }
Esempio n. 58
0
 public abstract void SetDeactivationTime(BulletBody obj, float dtime);
Esempio n. 59
0
 public abstract float GetDeactivationTime(BulletBody obj);
Esempio n. 60
0
 public abstract bool SetCollisionGroupMask(BulletBody body, UInt32 filter, UInt32 mask);