update UbitODE
parent
fc781f0894
commit
7c931037bd
|
@ -120,6 +120,16 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
private float m_lmEfect = 0; // current linear motor eficiency
|
private float m_lmEfect = 0; // current linear motor eficiency
|
||||||
private float m_amEfect = 0; // current angular motor eficiency
|
private float m_amEfect = 0; // current angular motor eficiency
|
||||||
|
|
||||||
|
public bool EngineActive
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (m_lmEfect > 0.01)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public ODEDynamics(OdePrim rootp)
|
public ODEDynamics(OdePrim rootp)
|
||||||
{
|
{
|
||||||
|
@ -152,6 +162,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
m_linearMotorTimescale = vd.m_linearMotorTimescale;
|
m_linearMotorTimescale = vd.m_linearMotorTimescale;
|
||||||
if (m_linearMotorTimescale < timestep) m_linearMotorTimescale = timestep;
|
if (m_linearMotorTimescale < timestep) m_linearMotorTimescale = timestep;
|
||||||
|
|
||||||
|
|
||||||
m_linearMotorOffset = vd.m_linearMotorOffset;
|
m_linearMotorOffset = vd.m_linearMotorOffset;
|
||||||
|
|
||||||
//Angular properties
|
//Angular properties
|
||||||
|
|
|
@ -222,6 +222,18 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
if (m_isphysical)
|
||||||
|
{
|
||||||
|
ODEDynamics veh;
|
||||||
|
if (_parent != null)
|
||||||
|
veh = ((OdePrim)_parent).m_vehicle;
|
||||||
|
else
|
||||||
|
veh = m_vehicle;
|
||||||
|
|
||||||
|
if (veh != null)
|
||||||
|
if (veh.Type != Vehicle.TYPE_NONE && veh.EngineActive)
|
||||||
|
return new ContactData(0, 0);
|
||||||
|
}
|
||||||
return primContactData;
|
return primContactData;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -155,7 +155,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
private readonly ILog m_log;
|
private readonly ILog m_log;
|
||||||
// private Dictionary<string, sCollisionData> m_storedCollisions = new Dictionary<string, sCollisionData>();
|
// private Dictionary<string, sCollisionData> m_storedCollisions = new Dictionary<string, sCollisionData>();
|
||||||
|
|
||||||
private int threadid = 0;
|
// private int threadid = 0;
|
||||||
private Random fluidRandomizer = new Random(Environment.TickCount);
|
private Random fluidRandomizer = new Random(Environment.TickCount);
|
||||||
|
|
||||||
const d.ContactFlags comumContactFlags = d.ContactFlags.SoftERP | d.ContactFlags.SoftCFM |d.ContactFlags.Approx1 | d.ContactFlags.Bounce;
|
const d.ContactFlags comumContactFlags = d.ContactFlags.SoftERP | d.ContactFlags.SoftCFM |d.ContactFlags.Approx1 | d.ContactFlags.Bounce;
|
||||||
|
@ -168,7 +168,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
float frictionMovementMult = 0.3f;
|
float frictionMovementMult = 0.3f;
|
||||||
|
|
||||||
float TerrainBounce = 0.1f;
|
float TerrainBounce = 0.1f;
|
||||||
float TerrainFriction = 0.1f;
|
float TerrainFriction = 0.3f;
|
||||||
|
|
||||||
public float AvatarBounce = 0.3f;
|
public float AvatarBounce = 0.3f;
|
||||||
public float AvatarFriction = 0;// 0.9f * 0.5f;
|
public float AvatarFriction = 0;// 0.9f * 0.5f;
|
||||||
|
@ -189,8 +189,8 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
|
|
||||||
internal IntPtr WaterGeom;
|
internal IntPtr WaterGeom;
|
||||||
|
|
||||||
public float avPIDD = 3200f; // make it visible
|
public float avPIDD = 2200f; // make it visible
|
||||||
public float avPIDP = 1400f; // make it visible
|
public float avPIDP = 900f; // make it visible
|
||||||
private float avCapRadius = 0.37f;
|
private float avCapRadius = 0.37f;
|
||||||
private float avDensity = 3f;
|
private float avDensity = 3f;
|
||||||
private float avMovementDivisorWalk = 1.3f;
|
private float avMovementDivisorWalk = 1.3f;
|
||||||
|
@ -202,7 +202,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
public bool forceSimplePrimMeshing = false;
|
public bool forceSimplePrimMeshing = false;
|
||||||
|
|
||||||
public float meshSculptLOD = 32;
|
public float meshSculptLOD = 32;
|
||||||
public float MeshSculptphysicalLOD = 16;
|
public float MeshSculptphysicalLOD = 32;
|
||||||
|
|
||||||
public float geomDefaultDensity = 10.000006836f;
|
public float geomDefaultDensity = 10.000006836f;
|
||||||
|
|
||||||
|
@ -212,12 +212,11 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
public float bodyPIDD = 35f;
|
public float bodyPIDD = 35f;
|
||||||
public float bodyPIDG = 25;
|
public float bodyPIDG = 25;
|
||||||
|
|
||||||
public int geomCrossingFailuresBeforeOutofbounds = 6;
|
// public int geomCrossingFailuresBeforeOutofbounds = 6;
|
||||||
|
|
||||||
public int bodyFramesAutoDisable = 20;
|
public int bodyFramesAutoDisable = 20;
|
||||||
|
|
||||||
private float[] _watermap;
|
private float[] _watermap;
|
||||||
private bool m_filterCollisions = true;
|
|
||||||
|
|
||||||
private d.NearCallback nearCallback;
|
private d.NearCallback nearCallback;
|
||||||
|
|
||||||
|
@ -388,9 +387,6 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
|
|
||||||
// Defaults
|
// Defaults
|
||||||
|
|
||||||
avPIDD = 2200.0f;
|
|
||||||
avPIDP = 900.0f;
|
|
||||||
|
|
||||||
int contactsPerCollision = 80;
|
int contactsPerCollision = 80;
|
||||||
|
|
||||||
if (m_config != null)
|
if (m_config != null)
|
||||||
|
@ -398,57 +394,56 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
IConfig physicsconfig = m_config.Configs["ODEPhysicsSettings"];
|
IConfig physicsconfig = m_config.Configs["ODEPhysicsSettings"];
|
||||||
if (physicsconfig != null)
|
if (physicsconfig != null)
|
||||||
{
|
{
|
||||||
gravityx = physicsconfig.GetFloat("world_gravityx", 0f);
|
gravityx = physicsconfig.GetFloat("world_gravityx", gravityx);
|
||||||
gravityy = physicsconfig.GetFloat("world_gravityy", 0f);
|
gravityy = physicsconfig.GetFloat("world_gravityy", gravityy);
|
||||||
gravityz = physicsconfig.GetFloat("world_gravityz", -9.8f);
|
gravityz = physicsconfig.GetFloat("world_gravityz", gravityz);
|
||||||
|
|
||||||
metersInSpace = physicsconfig.GetFloat("meters_in_small_space", 29.9f);
|
metersInSpace = physicsconfig.GetFloat("meters_in_small_space", metersInSpace);
|
||||||
|
|
||||||
contactsurfacelayer = physicsconfig.GetFloat("world_contact_surface_layer", contactsurfacelayer);
|
contactsurfacelayer = physicsconfig.GetFloat("world_contact_surface_layer", contactsurfacelayer);
|
||||||
|
|
||||||
ODE_STEPSIZE = physicsconfig.GetFloat("world_stepsize", 0.020f);
|
ODE_STEPSIZE = physicsconfig.GetFloat("world_stepsize", ODE_STEPSIZE);
|
||||||
m_physicsiterations = physicsconfig.GetInt("world_internal_steps_without_collisions", 10);
|
m_physicsiterations = physicsconfig.GetInt("world_internal_steps_without_collisions", m_physicsiterations);
|
||||||
|
|
||||||
avDensity = physicsconfig.GetFloat("av_density", avDensity);
|
avDensity = physicsconfig.GetFloat("av_density", avDensity);
|
||||||
avMovementDivisorWalk = physicsconfig.GetFloat("av_movement_divisor_walk", 1.3f);
|
avMovementDivisorWalk = physicsconfig.GetFloat("av_movement_divisor_walk", avMovementDivisorWalk);
|
||||||
avMovementDivisorRun = physicsconfig.GetFloat("av_movement_divisor_run", 0.8f);
|
avMovementDivisorRun = physicsconfig.GetFloat("av_movement_divisor_run", avMovementDivisorRun);
|
||||||
avCapRadius = physicsconfig.GetFloat("av_capsule_radius", 0.37f);
|
avCapRadius = physicsconfig.GetFloat("av_capsule_radius", avCapRadius);
|
||||||
|
|
||||||
contactsPerCollision = physicsconfig.GetInt("contacts_per_collision", 80);
|
contactsPerCollision = physicsconfig.GetInt("contacts_per_collision", contactsPerCollision);
|
||||||
|
|
||||||
geomContactPointsStartthrottle = physicsconfig.GetInt("geom_contactpoints_start_throttling", 3);
|
geomContactPointsStartthrottle = physicsconfig.GetInt("geom_contactpoints_start_throttling", 3);
|
||||||
geomUpdatesPerThrottledUpdate = physicsconfig.GetInt("geom_updates_before_throttled_update", 15);
|
geomUpdatesPerThrottledUpdate = physicsconfig.GetInt("geom_updates_before_throttled_update", 15);
|
||||||
geomCrossingFailuresBeforeOutofbounds = physicsconfig.GetInt("geom_crossing_failures_before_outofbounds", 5);
|
// geomCrossingFailuresBeforeOutofbounds = physicsconfig.GetInt("geom_crossing_failures_before_outofbounds", 5);
|
||||||
|
|
||||||
geomDefaultDensity = physicsconfig.GetFloat("geometry_default_density", 10.000006836f);
|
geomDefaultDensity = physicsconfig.GetFloat("geometry_default_density", geomDefaultDensity);
|
||||||
bodyFramesAutoDisable = physicsconfig.GetInt("body_frames_auto_disable", 20);
|
bodyFramesAutoDisable = physicsconfig.GetInt("body_frames_auto_disable", bodyFramesAutoDisable);
|
||||||
|
|
||||||
bodyPIDD = physicsconfig.GetFloat("body_pid_derivative", 35f);
|
bodyPIDD = physicsconfig.GetFloat("body_pid_derivative", bodyPIDD);
|
||||||
bodyPIDG = physicsconfig.GetFloat("body_pid_gain", 25f);
|
bodyPIDG = physicsconfig.GetFloat("body_pid_gain", bodyPIDG);
|
||||||
|
|
||||||
forceSimplePrimMeshing = physicsconfig.GetBoolean("force_simple_prim_meshing", forceSimplePrimMeshing);
|
forceSimplePrimMeshing = physicsconfig.GetBoolean("force_simple_prim_meshing", forceSimplePrimMeshing);
|
||||||
meshSculptedPrim = physicsconfig.GetBoolean("mesh_sculpted_prim", true);
|
meshSculptedPrim = physicsconfig.GetBoolean("mesh_sculpted_prim", meshSculptedPrim);
|
||||||
meshSculptLOD = physicsconfig.GetFloat("mesh_lod", 32f);
|
meshSculptLOD = physicsconfig.GetFloat("mesh_lod", meshSculptLOD);
|
||||||
MeshSculptphysicalLOD = physicsconfig.GetFloat("mesh_physical_lod", 16f);
|
MeshSculptphysicalLOD = physicsconfig.GetFloat("mesh_physical_lod", MeshSculptphysicalLOD);
|
||||||
m_filterCollisions = physicsconfig.GetBoolean("filter_collisions", false);
|
|
||||||
|
|
||||||
if (Environment.OSVersion.Platform == PlatformID.Unix)
|
if (Environment.OSVersion.Platform == PlatformID.Unix)
|
||||||
{
|
{
|
||||||
avPIDD = physicsconfig.GetFloat("av_pid_derivative_linux", 2200.0f);
|
avPIDD = physicsconfig.GetFloat("av_pid_derivative_linux", avPIDD);
|
||||||
avPIDP = physicsconfig.GetFloat("av_pid_proportional_linux", 900.0f);
|
avPIDP = physicsconfig.GetFloat("av_pid_proportional_linux", avPIDP);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
avPIDD = physicsconfig.GetFloat("av_pid_derivative_win", 2200.0f);
|
avPIDD = physicsconfig.GetFloat("av_pid_derivative_win", avPIDD);
|
||||||
avPIDP = physicsconfig.GetFloat("av_pid_proportional_win", 900.0f);
|
avPIDP = physicsconfig.GetFloat("av_pid_proportional_win", avPIDP);
|
||||||
}
|
}
|
||||||
|
|
||||||
physics_logging = physicsconfig.GetBoolean("physics_logging", false);
|
physics_logging = physicsconfig.GetBoolean("physics_logging", false);
|
||||||
physics_logging_interval = physicsconfig.GetInt("physics_logging_interval", 0);
|
physics_logging_interval = physicsconfig.GetInt("physics_logging_interval", 0);
|
||||||
physics_logging_append_existing_logfile = physicsconfig.GetBoolean("physics_logging_append_existing_logfile", false);
|
physics_logging_append_existing_logfile = physicsconfig.GetBoolean("physics_logging_append_existing_logfile", false);
|
||||||
|
|
||||||
minimumGroundFlightOffset = physicsconfig.GetFloat("minimum_ground_flight_offset", 3f);
|
minimumGroundFlightOffset = physicsconfig.GetFloat("minimum_ground_flight_offset", minimumGroundFlightOffset);
|
||||||
maximumMassObject = physicsconfig.GetFloat("maximum_mass_object", 10000.01f);
|
maximumMassObject = physicsconfig.GetFloat("maximum_mass_object", maximumMassObject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1941,13 +1936,14 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
yy += regionsize;
|
yy += regionsize;
|
||||||
|
|
||||||
val = heightMap[yy + xx];
|
val = heightMap[yy + xx];
|
||||||
|
if (val < 0.0f)
|
||||||
|
val = 0.0f; // no neg terrain as in chode
|
||||||
_heightmap[xt + y] = val;
|
_heightmap[xt + y] = val;
|
||||||
|
|
||||||
if (hfmin > val)
|
if (hfmin > val)
|
||||||
hfmin = val;
|
hfmin = val;
|
||||||
if (hfmax < val)
|
if (hfmax < val)
|
||||||
hfmax = val;
|
hfmax = val;
|
||||||
|
|
||||||
}
|
}
|
||||||
xt += heightmapHeightSamples;
|
xt += heightmapHeightSamples;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue