Revert "Revert "BulletSim: Add logic to linksets to change physical properties for""
Found that the vehicle movement problem was not caused by these physics changes.
This reverts commit 84d0699761.
TeleportWork
parent
75686e0e49
commit
f499b328c4
|
|
@ -69,7 +69,7 @@ public class BSActorCollection
|
|||
{
|
||||
lock (m_actors)
|
||||
{
|
||||
Release();
|
||||
ForEachActor(a => a.Dispose());
|
||||
m_actors.Clear();
|
||||
}
|
||||
}
|
||||
|
|
@ -98,10 +98,6 @@ public class BSActorCollection
|
|||
{
|
||||
ForEachActor(a => a.SetEnabled(enabl));
|
||||
}
|
||||
public void Release()
|
||||
{
|
||||
ForEachActor(a => a.Dispose());
|
||||
}
|
||||
public void Refresh()
|
||||
{
|
||||
ForEachActor(a => a.Refresh());
|
||||
|
|
|
|||
|
|
@ -309,14 +309,14 @@ public abstract class BSLinkset
|
|||
}
|
||||
);
|
||||
}
|
||||
public virtual void ComputeLocalInertia()
|
||||
public virtual void ComputeLocalInertia(OMV.Vector3 inertiaFactor)
|
||||
{
|
||||
ForEachMember((member) =>
|
||||
{
|
||||
if (member.PhysBody.HasPhysicalBody)
|
||||
{
|
||||
OMV.Vector3 inertia = m_physicsScene.PE.CalculateLocalInertia(member.PhysShape.physShapeInfo, member.Mass);
|
||||
member.Inertia = inertia * BSParam.VehicleInertiaFactor;
|
||||
member.Inertia = inertia * inertiaFactor;
|
||||
m_physicsScene.PE.SetMassProps(member.PhysBody, member.Mass, member.Inertia);
|
||||
m_physicsScene.PE.UpdateInertiaTensor(member.PhysBody);
|
||||
}
|
||||
|
|
@ -324,6 +324,26 @@ public abstract class BSLinkset
|
|||
}
|
||||
);
|
||||
}
|
||||
public virtual void SetPhysicalCollisionFlags(CollisionFlags collFlags)
|
||||
{
|
||||
ForEachMember((member) =>
|
||||
{
|
||||
if (member.PhysBody.HasPhysicalBody)
|
||||
m_physicsScene.PE.SetCollisionFlags(member.PhysBody, collFlags);
|
||||
return false; // 'false' says to continue looping
|
||||
}
|
||||
);
|
||||
}
|
||||
public virtual void RemoveFromPhysicalCollisionFlags(CollisionFlags collFlags)
|
||||
{
|
||||
ForEachMember((member) =>
|
||||
{
|
||||
if (member.PhysBody.HasPhysicalBody)
|
||||
m_physicsScene.PE.RemoveFromCollisionFlags(member.PhysBody, collFlags);
|
||||
return false; // 'false' says to continue looping
|
||||
}
|
||||
);
|
||||
}
|
||||
// ================================================================
|
||||
protected virtual float ComputeLinksetMass()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -44,6 +44,42 @@ public sealed class BSLinksetCompound : BSLinkset
|
|||
{
|
||||
}
|
||||
|
||||
// ================================================================
|
||||
// Changing the physical property of the linkset only needs to change the root
|
||||
public override void SetPhysicalFriction(float friction)
|
||||
{
|
||||
if (LinksetRoot.PhysBody.HasPhysicalBody)
|
||||
m_physicsScene.PE.SetFriction(LinksetRoot.PhysBody, friction);
|
||||
}
|
||||
public override void SetPhysicalRestitution(float restitution)
|
||||
{
|
||||
if (LinksetRoot.PhysBody.HasPhysicalBody)
|
||||
m_physicsScene.PE.SetRestitution(LinksetRoot.PhysBody, restitution);
|
||||
}
|
||||
public override void SetPhysicalGravity(OMV.Vector3 gravity)
|
||||
{
|
||||
if (LinksetRoot.PhysBody.HasPhysicalBody)
|
||||
m_physicsScene.PE.SetGravity(LinksetRoot.PhysBody, gravity);
|
||||
}
|
||||
public override void ComputeLocalInertia(OMV.Vector3 inertiaFactor)
|
||||
{
|
||||
OMV.Vector3 inertia = m_physicsScene.PE.CalculateLocalInertia(LinksetRoot.PhysShape.physShapeInfo, LinksetRoot.Mass);
|
||||
LinksetRoot.Inertia = inertia * inertiaFactor;
|
||||
m_physicsScene.PE.SetMassProps(LinksetRoot.PhysBody, LinksetRoot.Mass, LinksetRoot.Inertia);
|
||||
m_physicsScene.PE.UpdateInertiaTensor(LinksetRoot.PhysBody);
|
||||
}
|
||||
public override void SetPhysicalCollisionFlags(CollisionFlags collFlags)
|
||||
{
|
||||
if (LinksetRoot.PhysBody.HasPhysicalBody)
|
||||
m_physicsScene.PE.SetCollisionFlags(LinksetRoot.PhysBody, collFlags);
|
||||
}
|
||||
public override void RemoveFromPhysicalCollisionFlags(CollisionFlags collFlags)
|
||||
{
|
||||
if (LinksetRoot.PhysBody.HasPhysicalBody)
|
||||
m_physicsScene.PE.RemoveFromCollisionFlags(LinksetRoot.PhysBody, collFlags);
|
||||
}
|
||||
// ================================================================
|
||||
|
||||
// When physical properties are changed the linkset needs to recalculate
|
||||
// its internal properties.
|
||||
public override void Refresh(BSPrimLinkable requestor)
|
||||
|
|
|
|||
Loading…
Reference in New Issue