Add plumbing for physics properties to get to the physics engine.

Addition of entries to PhysicsActor and setting code in SceneObjectPart.
user_profiles
Robert Adams 2013-02-07 11:05:21 -08:00
parent af73ea909c
commit c658fa1c0d
2 changed files with 55 additions and 6 deletions

View File

@ -1387,10 +1387,46 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
public float Density { get; set; } private float m_density = 10f;
public float GravityModifier { get; set; } public float Density {
public float Friction { get; set; } get { return m_density; }
public float Restitution { get; set; } set
{
m_density = value;
if (PhysActor != null)
PhysActor.Density = m_density;
}
}
private float m_gravityModifier = 1f;
public float GravityModifier {
get { return m_gravityModifier; }
set
{
m_gravityModifier = value;
if (PhysActor != null)
PhysActor.GravityModifier = m_gravityModifier;
}
}
private float m_friction = 0.5f;
public float Friction {
get { return m_friction; }
set
{
m_friction = value;
if (PhysActor != null)
PhysActor.Friction = m_friction;
}
}
private float m_restitution = 0f;
public float Restitution {
get { return m_restitution; }
set
{
m_restitution = value;
if (PhysActor != null)
PhysActor.Restitution = m_restitution;
}
}
#endregion Public Properties with only Get #endregion Public Properties with only Get
@ -1896,8 +1932,18 @@ namespace OpenSim.Region.Framework.Scenes
{ {
ParentGroup.Scene.AddPhysicalPrim(1); ParentGroup.Scene.AddPhysicalPrim(1);
// Update initial values for various physical properties
pa.SetMaterial(Material);
pa.Density = Density;
pa.Friction = Friction;
pa.Restitution = Restitution;
pa.GravityModifier = GravityModifier;
// Link up callbacks for property updates from the physics engine
pa.OnRequestTerseUpdate += PhysicsRequestingTerseUpdate; pa.OnRequestTerseUpdate += PhysicsRequestingTerseUpdate;
pa.OnOutOfBounds += PhysicsOutOfBounds; pa.OnOutOfBounds += PhysicsOutOfBounds;
// If this is a child prim, tell the physics engine about the parent
if (ParentID != 0 && ParentID != LocalId) if (ParentID != 0 && ParentID != LocalId)
{ {
PhysicsActor parentPa = ParentGroup.RootPart.PhysActor; PhysicsActor parentPa = ParentGroup.RootPart.PhysActor;
@ -4062,7 +4108,6 @@ namespace OpenSim.Region.Framework.Scenes
if (pa != null) if (pa != null)
{ {
pa.SetMaterial(Material);
DoPhysicsPropertyUpdate(UsePhysics, true); DoPhysicsPropertyUpdate(UsePhysics, true);
if ( if (
@ -4175,7 +4220,6 @@ namespace OpenSim.Region.Framework.Scenes
if (pa != null) if (pa != null)
{ {
pa.SOPName = this.Name; // save object into the PhysActor so ODE internals know the joint/body info pa.SOPName = this.Name; // save object into the PhysActor so ODE internals know the joint/body info
pa.SetMaterial(Material);
DoPhysicsPropertyUpdate(rigidBody, true); DoPhysicsPropertyUpdate(rigidBody, true);
} }

View File

@ -235,6 +235,11 @@ namespace OpenSim.Region.Physics.Manager
public abstract float Mass { get; } public abstract float Mass { get; }
public abstract Vector3 Force { get; set; } public abstract Vector3 Force { get; set; }
public virtual float Density { get; set; }
public virtual float Friction { get; set; }
public virtual float Restitution { get; set; }
public virtual float GravityModifier { get; set; }
public abstract int VehicleType { get; set; } public abstract int VehicleType { get; set; }
public abstract void VehicleFloatParam(int param, float value); public abstract void VehicleFloatParam(int param, float value);
public abstract void VehicleVectorParam(int param, Vector3 value); public abstract void VehicleVectorParam(int param, Vector3 value);