update UbitODE

avinationmerge
UbitUmarov 2012-03-04 01:40:12 +00:00
parent fc781f0894
commit 7c931037bd
3 changed files with 55 additions and 36 deletions

View File

@ -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

View File

@ -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;
} }
} }

View File

@ -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;
} }