From df3d1d13014cf937240ddc2131231624b47eaccd Mon Sep 17 00:00:00 2001
From: teravus
Date: Tue, 2 Oct 2012 23:14:35 -0400
Subject: Minor Modification, switch /2 to 0.5f in ODEPrim.Velocity
---
OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
(limited to 'OpenSim/Region/Physics/OdePlugin')
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index 0716214..3056f67 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -2395,15 +2395,15 @@ Console.WriteLine(" JointCreateFixed");
{
get
{
- // Averate previous velocity with the new one so
+ // Average previous velocity with the new one so
// client object interpolation works a 'little' better
if (_zeroFlag)
return Vector3.Zero;
Vector3 returnVelocity = Vector3.Zero;
- returnVelocity.X = (m_lastVelocity.X + _velocity.X)/2;
- returnVelocity.Y = (m_lastVelocity.Y + _velocity.Y)/2;
- returnVelocity.Z = (m_lastVelocity.Z + _velocity.Z)/2;
+ returnVelocity.X = (m_lastVelocity.X + _velocity.X) * 0.5f; // 0.5f is mathematically equiv to '/ 2'
+ returnVelocity.Y = (m_lastVelocity.Y + _velocity.Y) * 0.5f;
+ returnVelocity.Z = (m_lastVelocity.Z + _velocity.Z) * 0.5f;
return returnVelocity;
}
set
--
cgit v1.1
From e56ef2720ecd603c9b3c81cbb7c3a0d49d24bf85 Mon Sep 17 00:00:00 2001
From: teravus
Date: Wed, 3 Oct 2012 02:30:23 -0400
Subject: I propose that 0.5m/step change for linear velocity is too big of a
change to control the reporting of a new angular velocity. I think that
this could be here for one of two reasons, 1. vehicles and llMoveToTarget
with axis lock, or 2. To attempt to make things look more stable in the
physics scene then they really are, however, this also really affects the
angular velocity reporting negatively causing things to spin wildly and jump
back into place repeatedly. To compromise, if the prim is a vehicle or is
being used as a motor target, the original functionality is still applied.
If that's not the case, angular velocity is reported with a linear velocity
of 0.02m/step. To be clear on the effect of the physical world... When you
push things, there's still a lag time where you walk into the object but once
the object is in motion, it begins to move as you would expect so results in
slightly more realistic motion.
---
OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
(limited to 'OpenSim/Region/Physics/OdePlugin')
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index 3056f67..1b47754 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -2600,6 +2600,7 @@ Console.WriteLine(" JointCreateFixed");
{
Vector3 pv = Vector3.Zero;
bool lastZeroFlag = _zeroFlag;
+ float m_minvelocity = 0;
if (Body != (IntPtr)0) // FIXME -> or if it is a joint
{
d.Vector3 vec = d.BodyGetPosition(Body);
@@ -2752,8 +2753,21 @@ Console.WriteLine(" JointCreateFixed");
_acceleration = ((_velocity - m_lastVelocity) / 0.1f);
_acceleration = new Vector3(_velocity.X - m_lastVelocity.X / 0.1f, _velocity.Y - m_lastVelocity.Y / 0.1f, _velocity.Z - m_lastVelocity.Z / 0.1f);
//m_log.Info("[PHYSICS]: V1: " + _velocity + " V2: " + m_lastVelocity + " Acceleration: " + _acceleration.ToString());
+
+ // Note here that linearvelocity is affecting angular velocity... so I'm guessing this is a vehicle specific thing...
+ // it does make sense to do this for tiny little instabilities with physical prim, however 0.5m/frame is fairly large.
+ // reducing this to 0.02m/frame seems to help the angular rubberbanding quite a bit, however, to make sure it doesn't affect elevators and vehicles
+ // adding these logical exclusion situations to maintain this where I think it was intended to be.
+ if (m_throttleUpdates || m_usePID || (m_vehicle != null && m_vehicle.Type != Vehicle.TYPE_NONE) || (Amotor != IntPtr.Zero))
+ {
+ m_minvelocity = 0.5f;
+ }
+ else
+ {
+ m_minvelocity = 0.02f;
+ }
- if (_velocity.ApproxEquals(pv, 0.5f))
+ if (_velocity.ApproxEquals(pv, m_minvelocity))
{
m_rotationalVelocity = pv;
}
--
cgit v1.1
From a2ab3b88de764112996b1e37d74c1e7b7355b1d8 Mon Sep 17 00:00:00 2001
From: teravus
Date: Wed, 3 Oct 2012 18:30:44 -0400
Subject: Soliciting for comments on smoothness of physics objects for this
build. This introduces expected contact point hints to the ODE Collider to
better determine when to throttle updates as excessive. This /should/
smooth physics objects out again, however, I cannot know every configuration
of OpenSimulator, so I'm requesting that testers please examine this change
on their build. Thanks!
---
OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 13 +++++++--
OpenSim/Region/Physics/OdePlugin/OdeScene.cs | 41 ++++++++++++++++++++++++----
2 files changed, 46 insertions(+), 8 deletions(-)
(limited to 'OpenSim/Region/Physics/OdePlugin')
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index 1b47754..e7b3b2b 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -63,6 +63,9 @@ namespace OpenSim.Region.Physics.OdePlugin
private bool m_isphysical;
+ public int ExpectedCollisionContacts { get { return m_expectedCollisionContacts; } }
+ private int m_expectedCollisionContacts = 0;
+
///
/// Is this prim subject to physics? Even if not, it's still solid for collision purposes.
///
@@ -150,7 +153,7 @@ namespace OpenSim.Region.Physics.OdePlugin
private PrimitiveBaseShape _pbs;
private OdeScene _parent_scene;
-
+
///
/// The physics space which contains prim geometries
///
@@ -840,7 +843,7 @@ namespace OpenSim.Region.Physics.OdePlugin
int vertexStride, triStride;
mesh.getVertexListAsPtrToFloatArray(out vertices, out vertexStride, out vertexCount); // Note, that vertices are fixed in unmanaged heap
mesh.getIndexListAsPtrToIntArray(out indices, out triStride, out indexCount); // Also fixed, needs release after usage
-
+ m_expectedCollisionContacts = indexCount;
mesh.releaseSourceMeshData(); // free up the original mesh data to save memory
// We must lock here since m_MeshToTriMeshMap is static and multiple scene threads may call this method at
@@ -1377,6 +1380,7 @@ Console.WriteLine("CreateGeom:");
{
//Console.WriteLine(" CreateGeom 1");
SetGeom(d.CreateSphere(m_targetSpace, _size.X / 2));
+ m_expectedCollisionContacts = 3;
}
catch (AccessViolationException)
{
@@ -1391,6 +1395,7 @@ Console.WriteLine("CreateGeom:");
{
//Console.WriteLine(" CreateGeom 2");
SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
+ m_expectedCollisionContacts = 4;
}
catch (AccessViolationException)
{
@@ -1406,6 +1411,7 @@ Console.WriteLine("CreateGeom:");
{
//Console.WriteLine(" CreateGeom 3");
SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
+ m_expectedCollisionContacts = 4;
}
catch (AccessViolationException)
{
@@ -1421,6 +1427,7 @@ Console.WriteLine("CreateGeom:");
{
//Console.WriteLine(" CreateGeom 4");
SetGeom(d.CreateBox(m_targetSpace, _size.X, _size.Y, _size.Z));
+ m_expectedCollisionContacts = 4;
}
catch (AccessViolationException)
{
@@ -1446,11 +1453,13 @@ Console.WriteLine("CreateGeom:");
_parent_scene.geom_name_map.Remove(prim_geom);
_parent_scene.actor_name_map.Remove(prim_geom);
d.GeomDestroy(prim_geom);
+ m_expectedCollisionContacts = 0;
prim_geom = IntPtr.Zero;
}
catch (System.AccessViolationException)
{
prim_geom = IntPtr.Zero;
+ m_expectedCollisionContacts = 0;
m_log.ErrorFormat("[PHYSICS]: PrimGeom dead for {0}", Name);
return false;
diff --git a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
index 929b019..7a50c4c 100644
--- a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
+++ b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
@@ -336,6 +336,7 @@ namespace OpenSim.Region.Physics.OdePlugin
public int geomContactPointsStartthrottle = 3;
public int geomUpdatesPerThrottledUpdate = 15;
+ private const int avatarExpectedContacts = 3;
public float bodyPIDD = 35f;
public float bodyPIDG = 25;
@@ -474,6 +475,8 @@ namespace OpenSim.Region.Physics.OdePlugin
private OdePrim cp1;
private OdeCharacter cc2;
private OdePrim cp2;
+ private int p1ExpectedPoints = 0;
+ private int p2ExpectedPoints = 0;
//private int cStartStop = 0;
//private string cDictKey = "";
@@ -498,6 +501,7 @@ namespace OpenSim.Region.Physics.OdePlugin
public int physics_logging_interval = 0;
public bool physics_logging_append_existing_logfile = false;
+
public d.Vector3 xyz = new d.Vector3(128.1640f, 128.3079f, 25.7600f);
public d.Vector3 hpr = new d.Vector3(125.5000f, -17.0000f, 0.0000f);
@@ -644,7 +648,7 @@ namespace OpenSim.Region.Physics.OdePlugin
contactsPerCollision = physicsconfig.GetInt("contacts_per_collision", 80);
- geomContactPointsStartthrottle = physicsconfig.GetInt("geom_contactpoints_start_throttling", 3);
+ geomContactPointsStartthrottle = physicsconfig.GetInt("geom_contactpoints_start_throttling", 5);
geomUpdatesPerThrottledUpdate = physicsconfig.GetInt("geom_updates_before_throttled_update", 15);
geomCrossingFailuresBeforeOutofbounds = physicsconfig.GetInt("geom_crossing_failures_before_outofbounds", 5);
@@ -1064,7 +1068,10 @@ namespace OpenSim.Region.Physics.OdePlugin
PhysicsActor p1;
PhysicsActor p2;
-
+
+ p1ExpectedPoints = 0;
+ p2ExpectedPoints = 0;
+
if (!actor_name_map.TryGetValue(g1, out p1))
{
p1 = PANull;
@@ -1121,9 +1128,13 @@ namespace OpenSim.Region.Physics.OdePlugin
switch (p1.PhysicsActorType)
{
case (int)ActorTypes.Agent:
+ p1ExpectedPoints = avatarExpectedContacts;
p2.CollidingObj = true;
break;
case (int)ActorTypes.Prim:
+ if (p1 != null && p1 is OdePrim)
+ p1ExpectedPoints = ((OdePrim) p1).ExpectedCollisionContacts;
+
if (p2.Velocity.LengthSquared() > 0.0f)
p2.CollidingObj = true;
break;
@@ -1319,6 +1330,7 @@ namespace OpenSim.Region.Physics.OdePlugin
if ((p2.PhysicsActorType == (int) ActorTypes.Agent) &&
(Math.Abs(p2.Velocity.X) > 0.01f || Math.Abs(p2.Velocity.Y) > 0.01f))
{
+ p2ExpectedPoints = avatarExpectedContacts;
// Avatar is moving on terrain, use the movement terrain contact
AvatarMovementTerrainContact.geom = curContact;
@@ -1332,6 +1344,7 @@ namespace OpenSim.Region.Physics.OdePlugin
{
if (p2.PhysicsActorType == (int)ActorTypes.Agent)
{
+ p2ExpectedPoints = avatarExpectedContacts;
// Avatar is standing on terrain, use the non moving terrain contact
TerrainContact.geom = curContact;
@@ -1356,9 +1369,18 @@ namespace OpenSim.Region.Physics.OdePlugin
}
if (p2 is OdePrim)
- material = ((OdePrim)p2).m_material;
-
+ {
+ material = ((OdePrim) p2).m_material;
+ p2ExpectedPoints = ((OdePrim)p2).ExpectedCollisionContacts;
+ }
+
+ // Unnessesary because p1 is defined above
+ //if (p1 is OdePrim)
+ // {
+ // p1ExpectedPoints = ((OdePrim)p1).ExpectedCollisionContacts;
+ // }
//m_log.DebugFormat("Material: {0}", material);
+
m_materialContacts[material, movintYN].geom = curContact;
if (m_global_contactcount < maxContactsbeforedeath)
@@ -1379,7 +1401,10 @@ namespace OpenSim.Region.Physics.OdePlugin
int material = (int)Material.Wood;
if (p2 is OdePrim)
+ {
material = ((OdePrim)p2).m_material;
+ p2ExpectedPoints = ((OdePrim)p2).ExpectedCollisionContacts;
+ }
//m_log.DebugFormat("Material: {0}", material);
m_materialContacts[material, movintYN].geom = curContact;
@@ -1429,6 +1454,7 @@ namespace OpenSim.Region.Physics.OdePlugin
{
if ((p2.PhysicsActorType == (int)ActorTypes.Agent))
{
+ p2ExpectedPoints = avatarExpectedContacts;
if ((Math.Abs(p2.Velocity.X) > 0.01f || Math.Abs(p2.Velocity.Y) > 0.01f))
{
// Avatar is moving on a prim, use the Movement prim contact
@@ -1458,7 +1484,10 @@ namespace OpenSim.Region.Physics.OdePlugin
int material = (int)Material.Wood;
if (p2 is OdePrim)
+ {
material = ((OdePrim)p2).m_material;
+ p2ExpectedPoints = ((OdePrim)p2).ExpectedCollisionContacts;
+ }
//m_log.DebugFormat("Material: {0}", material);
m_materialContacts[material, 0].geom = curContact;
@@ -1479,8 +1508,8 @@ namespace OpenSim.Region.Physics.OdePlugin
}
collision_accounting_events(p1, p2, maxDepthContact);
-
- if (count > geomContactPointsStartthrottle)
+
+ if (count > ((p1ExpectedPoints + p2ExpectedPoints) * 0.25) + (geomContactPointsStartthrottle))
{
// If there are more then 3 contact points, it's likely
// that we've got a pile of objects, so ...
--
cgit v1.1
From 764270a0d81ef3aeba9ceb2eb50eab74a4707a95 Mon Sep 17 00:00:00 2001
From: teravus
Date: Tue, 9 Oct 2012 09:26:11 -0400
Subject: Add config option to plant avatar where they are reducing avatar
avatar 'pushability' av_planted see OpenSimDefaults.ini. Use when you have
unruly visitors that rudely push each other around. Still allows a small
amount of movement based on the avatar movement PID controller settings. You
can increase the spring tension in the PID controller and really prevent any
movement if you would like.
---
OpenSim/Region/Physics/OdePlugin/ODECharacter.cs | 4 ++--
OpenSim/Region/Physics/OdePlugin/OdeScene.cs | 8 +++++++-
2 files changed, 9 insertions(+), 3 deletions(-)
(limited to 'OpenSim/Region/Physics/OdePlugin')
diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
index f3b0630..c736557 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
@@ -100,7 +100,7 @@ namespace OpenSim.Region.Physics.OdePlugin
private bool m_hackSentFly = false;
private int m_requestedUpdateFrequency = 0;
private Vector3 m_taintPosition;
-
+ internal bool m_avatarplanted = false;
///
/// Hold set forces so we can process them outside physics calculations. This prevents race conditions if we set force
/// while calculatios are going on
@@ -413,7 +413,7 @@ namespace OpenSim.Region.Physics.OdePlugin
set
{
m_iscollidingObj = value;
- if (value)
+ if (value && !m_avatarplanted)
m_pidControllerActive = false;
else
m_pidControllerActive = true;
diff --git a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
index 7a50c4c..8421cdf 100644
--- a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
+++ b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
@@ -501,6 +501,8 @@ namespace OpenSim.Region.Physics.OdePlugin
public int physics_logging_interval = 0;
public bool physics_logging_append_existing_logfile = false;
+ private bool avplanted = false;
+
public d.Vector3 xyz = new d.Vector3(128.1640f, 128.3079f, 25.7600f);
public d.Vector3 hpr = new d.Vector3(125.5000f, -17.0000f, 0.0000f);
@@ -644,6 +646,8 @@ namespace OpenSim.Region.Physics.OdePlugin
avMovementDivisorWalk = physicsconfig.GetFloat("av_movement_divisor_walk", 1.3f);
avMovementDivisorRun = physicsconfig.GetFloat("av_movement_divisor_run", 0.8f);
avCapRadius = physicsconfig.GetFloat("av_capsule_radius", 0.37f);
+ avplanted = physicsconfig.GetBoolean("av_planted", false);
+
IsAvCapsuleTilted = physicsconfig.GetBoolean("av_capsule_tilted", false);
contactsPerCollision = physicsconfig.GetInt("contacts_per_collision", 80);
@@ -1972,7 +1976,8 @@ namespace OpenSim.Region.Physics.OdePlugin
newAv.Flying = isFlying;
newAv.MinimumGroundFlightOffset = minimumGroundFlightOffset;
-
+ newAv.m_avatarplanted = avplanted;
+
return newAv;
}
@@ -1987,6 +1992,7 @@ namespace OpenSim.Region.Physics.OdePlugin
internal void AddCharacter(OdeCharacter chr)
{
+ chr.m_avatarplanted = avplanted;
if (!_characters.Contains(chr))
{
_characters.Add(chr);
--
cgit v1.1
From 7e90ea355120c717d1639d817b2b38326a4d5528 Mon Sep 17 00:00:00 2001
From: teravus
Date: Tue, 9 Oct 2012 10:41:16 -0400
Subject: av_av_collisions_off = false OdePhysics Settings in
OpenSimDefaults.ini - No Avatar Avatar Collisions. This causes avatar to be
able to walk through each other as if they're ghosts but still interact with
the environment.
---
OpenSim/Region/Physics/OdePlugin/OdeScene.cs | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Region/Physics/OdePlugin')
diff --git a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
index 8421cdf..cbe21e2 100644
--- a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
+++ b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
@@ -502,7 +502,7 @@ namespace OpenSim.Region.Physics.OdePlugin
public bool physics_logging_append_existing_logfile = false;
private bool avplanted = false;
-
+ private bool av_av_collisions_off = false;
public d.Vector3 xyz = new d.Vector3(128.1640f, 128.3079f, 25.7600f);
public d.Vector3 hpr = new d.Vector3(125.5000f, -17.0000f, 0.0000f);
@@ -647,7 +647,8 @@ namespace OpenSim.Region.Physics.OdePlugin
avMovementDivisorRun = physicsconfig.GetFloat("av_movement_divisor_run", 0.8f);
avCapRadius = physicsconfig.GetFloat("av_capsule_radius", 0.37f);
avplanted = physicsconfig.GetBoolean("av_planted", false);
-
+ av_av_collisions_off = physicsconfig.GetBoolean("av_av_collisions_off", false);
+
IsAvCapsuleTilted = physicsconfig.GetBoolean("av_capsule_tilted", false);
contactsPerCollision = physicsconfig.GetInt("contacts_per_collision", 80);
@@ -667,6 +668,8 @@ namespace OpenSim.Region.Physics.OdePlugin
meshSculptLOD = physicsconfig.GetFloat("mesh_lod", 32f);
MeshSculptphysicalLOD = physicsconfig.GetFloat("mesh_physical_lod", 16f);
m_filterCollisions = physicsconfig.GetBoolean("filter_collisions", false);
+
+
if (Environment.OSVersion.Platform == PlatformID.Unix)
{
@@ -1313,6 +1316,10 @@ namespace OpenSim.Region.Physics.OdePlugin
if ((p1 is OdePrim) && (((OdePrim)p1).m_isVolumeDetect))
skipThisContact = true; // No collision on volume detect prims
+ if (av_av_collisions_off)
+ if ((p1 is OdeCharacter) && (p2 is OdeCharacter))
+ skipThisContact = true;
+
if (!skipThisContact && (p2 is OdePrim) && (((OdePrim)p2).m_isVolumeDetect))
skipThisContact = true; // No collision on volume detect prims
--
cgit v1.1
From 1e7fb2dc364bd8fcbe92fc3cca45c3eea85e5558 Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Sun, 7 Oct 2012 05:53:52 +0100
Subject: i update core ode plugin and make it load is meshs (i hope)
Signed-off-by: Melanie
---
OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 51 +++++++++++++++++++++++++++-
OpenSim/Region/Physics/OdePlugin/OdeScene.cs | 2 +-
2 files changed, 51 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Region/Physics/OdePlugin')
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index e7b3b2b..c86084c 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -100,6 +100,9 @@ namespace OpenSim.Region.Physics.OdePlugin
private Vector3 m_taintAngularLock = Vector3.One;
private IntPtr Amotor = IntPtr.Zero;
+ private object m_assetsLock = new object();
+ private bool m_assetFailed = false;
+
private Vector3 m_PIDTarget;
private float m_PIDTau;
private float PID_D = 35f;
@@ -282,6 +285,7 @@ namespace OpenSim.Region.Physics.OdePlugin
}
m_taintadd = true;
+ m_assetFailed = false;
_parent_scene.AddPhysicsActorTaint(this);
}
@@ -1498,6 +1502,8 @@ Console.WriteLine("CreateGeom:");
mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical);
// createmesh returns null when it's a shape that isn't a cube.
// m_log.Debug(m_localID);
+ if (mesh == null)
+ CheckMeshAsset();
}
#if SPAM
@@ -1997,7 +2003,12 @@ Console.WriteLine(" JointCreateFixed");
// Don't need to re-enable body.. it's done in SetMesh
if (_parent_scene.needsMeshing(_pbs))
+ {
mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, meshlod, IsPhysical);
+ if (mesh == null)
+ CheckMeshAsset();
+ }
+
}
CreateGeom(m_targetSpace, mesh);
@@ -2057,6 +2068,8 @@ Console.WriteLine(" JointCreateFixed");
///
private void changeshape()
{
+ m_taintshape = false;
+
// Cleanup of old prim geometry and Bodies
if (IsPhysical && Body != IntPtr.Zero)
{
@@ -2084,6 +2097,7 @@ Console.WriteLine(" JointCreateFixed");
IMesh mesh = null;
+
if (_parent_scene.needsMeshing(_pbs))
{
// Don't need to re-enable body.. it's done in CreateMesh
@@ -2094,6 +2108,8 @@ Console.WriteLine(" JointCreateFixed");
// createmesh returns null when it doesn't mesh.
mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, meshlod, IsPhysical);
+ if (mesh == null)
+ CheckMeshAsset();
}
CreateGeom(m_targetSpace, mesh);
@@ -2130,7 +2146,7 @@ Console.WriteLine(" JointCreateFixed");
}
resetCollisionAccounting();
- m_taintshape = false;
+// m_taintshape = false;
}
///
@@ -2396,6 +2412,7 @@ Console.WriteLine(" JointCreateFixed");
set
{
_pbs = value;
+ m_assetFailed = false;
m_taintshape = true;
}
}
@@ -3234,5 +3251,37 @@ Console.WriteLine(" JointCreateFixed");
{
m_material = pMaterial;
}
+
+
+ private void CheckMeshAsset()
+ {
+ if (_pbs.SculptEntry && !m_assetFailed && _pbs.SculptTexture != UUID.Zero)
+ {
+ m_assetFailed = true;
+ Util.FireAndForget(delegate
+ {
+ RequestAssetDelegate assetProvider = _parent_scene.RequestAssetMethod;
+ if (assetProvider != null)
+ assetProvider(_pbs.SculptTexture, MeshAssetReveived);
+ });
+ }
+ }
+
+ void MeshAssetReveived(AssetBase asset)
+ {
+ if (asset.Data != null && asset.Data.Length > 0)
+ {
+ if (!_pbs.SculptEntry)
+ return;
+ if (_pbs.SculptTexture.ToString() != asset.ID)
+ return;
+
+ _pbs.SculptData = new byte[asset.Data.Length];
+ asset.Data.CopyTo(_pbs.SculptData, 0);
+ m_assetFailed = false;
+ m_taintshape = true;
+ _parent_scene.AddPhysicsActorTaint(this);
+ }
+ }
}
}
\ No newline at end of file
diff --git a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
index cbe21e2..d53bd90 100644
--- a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
+++ b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs
@@ -4320,4 +4320,4 @@ namespace OpenSim.Region.Physics.OdePlugin
m_stats[ODEPrimUpdateFrameMsStatName] = 0;
}
}
-}
\ No newline at end of file
+}
--
cgit v1.1
From b058ba5859b1012a23e58c9b9e0d91f77ac19ba3 Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Fri, 19 Oct 2012 00:36:32 +0100
Subject: [UNTESTED] core Ode: stop trying to load a broken asset. Make broken
assets behave like phantom by Nebadon request
---
OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 118 +++++++++++++++++++++++-----
1 file changed, 97 insertions(+), 21 deletions(-)
(limited to 'OpenSim/Region/Physics/OdePlugin')
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index c86084c..a6c657f 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -341,8 +341,17 @@ namespace OpenSim.Region.Physics.OdePlugin
prim_geom = geom;
//Console.WriteLine("SetGeom to " + prim_geom + " for " + Name);
- d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
- d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
+ if (m_assetFailed)
+ {
+ d.GeomSetCategoryBits(prim_geom, 0);
+ d.GeomSetCollideBits(prim_geom, 0);
+ }
+ else
+ {
+
+ d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
+ d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
+ }
_parent_scene.geom_name_map[prim_geom] = Name;
_parent_scene.actor_name_map[prim_geom] = this;
@@ -405,8 +414,17 @@ namespace OpenSim.Region.Physics.OdePlugin
myrot.W = _orientation.W;
d.BodySetQuaternion(Body, ref myrot);
d.GeomSetBody(prim_geom, Body);
- m_collisionCategories |= CollisionCategories.Body;
- m_collisionFlags |= (CollisionCategories.Land | CollisionCategories.Wind);
+
+ if (m_assetFailed)
+ {
+ d.GeomSetCategoryBits(prim_geom, 0);
+ d.GeomSetCollideBits(prim_geom, 0);
+ }
+ else
+ {
+ m_collisionCategories |= CollisionCategories.Body;
+ m_collisionFlags |= (CollisionCategories.Land | CollisionCategories.Wind);
+ }
d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
@@ -778,8 +796,16 @@ namespace OpenSim.Region.Physics.OdePlugin
m_collisionCategories &= ~CollisionCategories.Body;
m_collisionFlags &= ~(CollisionCategories.Wind | CollisionCategories.Land);
- d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
- d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
+ if (m_assetFailed)
+ {
+ d.GeomSetCategoryBits(prim_geom, 0);
+ d.GeomSetCollideBits(prim_geom, 0);
+ }
+ else
+ {
+ d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
+ d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
+ }
d.BodyDestroy(Body);
lock (childrenPrim)
@@ -803,8 +829,17 @@ namespace OpenSim.Region.Physics.OdePlugin
m_collisionCategories &= ~CollisionCategories.Body;
m_collisionFlags &= ~(CollisionCategories.Wind | CollisionCategories.Land);
- d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
- d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
+ if (m_assetFailed)
+ {
+ d.GeomSetCategoryBits(prim_geom, 0);
+ d.GeomSetCollideBits(prim_geom, 0);
+ }
+ else
+ {
+
+ d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
+ d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
+ }
Body = IntPtr.Zero;
}
@@ -1094,8 +1129,16 @@ Console.WriteLine("ZProcessTaints for " + Name);
prm.m_collisionFlags |= (CollisionCategories.Land | CollisionCategories.Wind);
//Console.WriteLine(" GeomSetCategoryBits 1: " + prm.prim_geom + " - " + (int)prm.m_collisionCategories + " for " + Name);
- d.GeomSetCategoryBits(prm.prim_geom, (int)prm.m_collisionCategories);
- d.GeomSetCollideBits(prm.prim_geom, (int)prm.m_collisionFlags);
+ if (prm.m_assetFailed)
+ {
+ d.GeomSetCategoryBits(prm.prim_geom, 0);
+ d.GeomSetCollideBits(prm.prim_geom, 0);
+ }
+ else
+ {
+ d.GeomSetCategoryBits(prm.prim_geom, (int)prm.m_collisionCategories);
+ d.GeomSetCollideBits(prm.prim_geom, (int)prm.m_collisionFlags);
+ }
d.Quaternion quat = new d.Quaternion();
quat.W = prm._orientation.W;
@@ -1140,10 +1183,18 @@ Console.WriteLine("ZProcessTaints for " + Name);
m_collisionCategories |= CollisionCategories.Body;
m_collisionFlags |= (CollisionCategories.Land | CollisionCategories.Wind);
-//Console.WriteLine("GeomSetCategoryBits 2: " + prim_geom + " - " + (int)m_collisionCategories + " for " + Name);
- d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
-//Console.WriteLine(" Post GeomSetCategoryBits 2");
- d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
+ if (m_assetFailed)
+ {
+ d.GeomSetCategoryBits(prim_geom, 0);
+ d.GeomSetCollideBits(prim_geom, 0);
+ }
+ else
+ {
+ //Console.WriteLine("GeomSetCategoryBits 2: " + prim_geom + " - " + (int)m_collisionCategories + " for " + Name);
+ d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
+ //Console.WriteLine(" Post GeomSetCategoryBits 2");
+ d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
+ }
d.Quaternion quat2 = new d.Quaternion();
quat2.W = _orientation.W;
@@ -1304,8 +1355,16 @@ Console.WriteLine("ZProcessTaints for " + Name);
disableBodySoft();
}
- d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
- d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
+ if (m_assetFailed)
+ {
+ d.GeomSetCategoryBits(prim_geom, 0);
+ d.GeomSetCollideBits(prim_geom, 0);
+ }
+ else
+ {
+ d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
+ d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
+ }
if (IsPhysical)
{
@@ -1326,8 +1385,16 @@ Console.WriteLine("ZProcessTaints for " + Name);
if (m_collidesWater)
m_collisionFlags |= CollisionCategories.Water;
- d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
- d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
+ if (m_assetFailed)
+ {
+ d.GeomSetCategoryBits(prim_geom, 0);
+ d.GeomSetCollideBits(prim_geom, 0);
+ }
+ else
+ {
+ d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
+ d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
+ }
if (IsPhysical)
{
@@ -1504,6 +1571,8 @@ Console.WriteLine("CreateGeom:");
// m_log.Debug(m_localID);
if (mesh == null)
CheckMeshAsset();
+ else
+ m_assetFailed = false;
}
#if SPAM
@@ -2007,6 +2076,8 @@ Console.WriteLine(" JointCreateFixed");
mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, meshlod, IsPhysical);
if (mesh == null)
CheckMeshAsset();
+ else
+ m_assetFailed = false;
}
}
@@ -2060,9 +2131,12 @@ Console.WriteLine(" JointCreateFixed");
m_collisionFlags &= ~CollisionCategories.Water;
}
- d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
- }
+ if (m_assetFailed)
+ d.GeomSetCollideBits(prim_geom, 0);
+ else
+ d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
+ }
///
/// Change prim in response to a shape taint.
///
@@ -2110,6 +2184,8 @@ Console.WriteLine(" JointCreateFixed");
mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, meshlod, IsPhysical);
if (mesh == null)
CheckMeshAsset();
+ else
+ m_assetFailed = false;
}
CreateGeom(m_targetSpace, mesh);
@@ -3278,7 +3354,7 @@ Console.WriteLine(" JointCreateFixed");
_pbs.SculptData = new byte[asset.Data.Length];
asset.Data.CopyTo(_pbs.SculptData, 0);
- m_assetFailed = false;
+// m_assetFailed = false;
m_taintshape = true;
_parent_scene.AddPhysicsActorTaint(this);
}
--
cgit v1.1
From 28483150e2dcc123b632c89d0a08595b567af669 Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Fri, 19 Oct 2012 01:25:30 +0100
Subject: [UNTESTED] core Ode: let broken mesh physical prims collide with land
as the defaul basic box so they don't go off world.
---
OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
(limited to 'OpenSim/Region/Physics/OdePlugin')
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index a6c657f..5a1fdf9 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -344,7 +344,7 @@ namespace OpenSim.Region.Physics.OdePlugin
if (m_assetFailed)
{
d.GeomSetCategoryBits(prim_geom, 0);
- d.GeomSetCollideBits(prim_geom, 0);
+ d.GeomSetCollideBits(prim_geom, BadAssetColideBits());
}
else
{
@@ -418,7 +418,7 @@ namespace OpenSim.Region.Physics.OdePlugin
if (m_assetFailed)
{
d.GeomSetCategoryBits(prim_geom, 0);
- d.GeomSetCollideBits(prim_geom, 0);
+ d.GeomSetCollideBits(prim_geom, BadAssetColideBits());
}
else
{
@@ -851,6 +851,11 @@ namespace OpenSim.Region.Physics.OdePlugin
private static Dictionary m_MeshToTriMeshMap = new Dictionary();
+ public int BadAssetColideBits()
+ {
+ return (m_isphysical ? (int)CollisionCategories.Land : 0);
+ }
+
private void setMesh(OdeScene parent_scene, IMesh mesh)
{
// m_log.DebugFormat("[ODE PRIM]: Setting mesh on {0} to {1}", Name, mesh);
@@ -1132,7 +1137,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
if (prm.m_assetFailed)
{
d.GeomSetCategoryBits(prm.prim_geom, 0);
- d.GeomSetCollideBits(prm.prim_geom, 0);
+ d.GeomSetCollideBits(prm.prim_geom, prm.BadAssetColideBits());
}
else
{
@@ -1186,7 +1191,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
if (m_assetFailed)
{
d.GeomSetCategoryBits(prim_geom, 0);
- d.GeomSetCollideBits(prim_geom, 0);
+ d.GeomSetCollideBits(prim_geom, BadAssetColideBits());
}
else
{
@@ -1388,7 +1393,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
if (m_assetFailed)
{
d.GeomSetCategoryBits(prim_geom, 0);
- d.GeomSetCollideBits(prim_geom, 0);
+ d.GeomSetCollideBits(prim_geom, BadAssetColideBits());
}
else
{
@@ -2132,7 +2137,7 @@ Console.WriteLine(" JointCreateFixed");
}
if (m_assetFailed)
- d.GeomSetCollideBits(prim_geom, 0);
+ d.GeomSetCollideBits(prim_geom, BadAssetColideBits());
else
d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
--
cgit v1.1
From d2b19f00dafe2c7c89c07b6a713fdd359cf9dcab Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sat, 20 Oct 2012 02:49:16 +0100
Subject: Fix minor issues from commit 28483150
Fix spelling of collide, change to more self-documenting property BadMeshAssetCollideBits, add method doc, change to private to reduce code analysis complexity
---
OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 29 +++++++++++++++++------------
1 file changed, 17 insertions(+), 12 deletions(-)
(limited to 'OpenSim/Region/Physics/OdePlugin')
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index 5a1fdf9..d11dff1 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -67,6 +67,17 @@ namespace OpenSim.Region.Physics.OdePlugin
private int m_expectedCollisionContacts = 0;
///
+ /// Gets collide bits so that we can still perform land collisions if a mesh fails to load.
+ ///
+ ///
+ /// The bad asset collide bits.
+ ///
+ private int BadMeshAssetCollideBits
+ {
+ get { return m_isphysical ? (int)CollisionCategories.Land : 0; }
+ }
+
+ ///
/// Is this prim subject to physics? Even if not, it's still solid for collision purposes.
///
public override bool IsPhysical
@@ -344,11 +355,10 @@ namespace OpenSim.Region.Physics.OdePlugin
if (m_assetFailed)
{
d.GeomSetCategoryBits(prim_geom, 0);
- d.GeomSetCollideBits(prim_geom, BadAssetColideBits());
+ d.GeomSetCollideBits(prim_geom, BadMeshAssetCollideBits);
}
else
{
-
d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
}
@@ -418,7 +428,7 @@ namespace OpenSim.Region.Physics.OdePlugin
if (m_assetFailed)
{
d.GeomSetCategoryBits(prim_geom, 0);
- d.GeomSetCollideBits(prim_geom, BadAssetColideBits());
+ d.GeomSetCollideBits(prim_geom, BadMeshAssetCollideBits);
}
else
{
@@ -851,11 +861,6 @@ namespace OpenSim.Region.Physics.OdePlugin
private static Dictionary m_MeshToTriMeshMap = new Dictionary();
- public int BadAssetColideBits()
- {
- return (m_isphysical ? (int)CollisionCategories.Land : 0);
- }
-
private void setMesh(OdeScene parent_scene, IMesh mesh)
{
// m_log.DebugFormat("[ODE PRIM]: Setting mesh on {0} to {1}", Name, mesh);
@@ -1137,7 +1142,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
if (prm.m_assetFailed)
{
d.GeomSetCategoryBits(prm.prim_geom, 0);
- d.GeomSetCollideBits(prm.prim_geom, prm.BadAssetColideBits());
+ d.GeomSetCollideBits(prm.prim_geom, prm.BadMeshAssetCollideBits);
}
else
{
@@ -1191,7 +1196,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
if (m_assetFailed)
{
d.GeomSetCategoryBits(prim_geom, 0);
- d.GeomSetCollideBits(prim_geom, BadAssetColideBits());
+ d.GeomSetCollideBits(prim_geom, BadMeshAssetCollideBits);
}
else
{
@@ -1393,7 +1398,7 @@ Console.WriteLine("ZProcessTaints for " + Name);
if (m_assetFailed)
{
d.GeomSetCategoryBits(prim_geom, 0);
- d.GeomSetCollideBits(prim_geom, BadAssetColideBits());
+ d.GeomSetCollideBits(prim_geom, BadMeshAssetCollideBits);
}
else
{
@@ -2137,7 +2142,7 @@ Console.WriteLine(" JointCreateFixed");
}
if (m_assetFailed)
- d.GeomSetCollideBits(prim_geom, BadAssetColideBits());
+ d.GeomSetCollideBits(prim_geom, BadMeshAssetCollideBits);
else
d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
--
cgit v1.1
From 5bc07a15f508f4860de4defd328f23c4300b33c0 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sat, 20 Oct 2012 02:52:38 +0100
Subject: minor: remove unnecessary bit of method doc from
OdePrim.BadMeshAssetCollideBits that monodevelop inserted automatically
---
OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 3 ---
1 file changed, 3 deletions(-)
(limited to 'OpenSim/Region/Physics/OdePlugin')
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index d11dff1..2548648 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -69,9 +69,6 @@ namespace OpenSim.Region.Physics.OdePlugin
///
/// Gets collide bits so that we can still perform land collisions if a mesh fails to load.
///
- ///
- /// The bad asset collide bits.
- ///
private int BadMeshAssetCollideBits
{
get { return m_isphysical ? (int)CollisionCategories.Land : 0; }
--
cgit v1.1
From aeeed29d627f7d40bbcc160bf446a019b54e8b32 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 30 Oct 2012 01:07:14 +0000
Subject: correct ODEPrim.MeshAssetReveived -> MeshAssetReceived
---
OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
(limited to 'OpenSim/Region/Physics/OdePlugin')
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index 2548648..7c46ff8 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -3335,7 +3335,6 @@ Console.WriteLine(" JointCreateFixed");
m_material = pMaterial;
}
-
private void CheckMeshAsset()
{
if (_pbs.SculptEntry && !m_assetFailed && _pbs.SculptTexture != UUID.Zero)
@@ -3345,12 +3344,12 @@ Console.WriteLine(" JointCreateFixed");
{
RequestAssetDelegate assetProvider = _parent_scene.RequestAssetMethod;
if (assetProvider != null)
- assetProvider(_pbs.SculptTexture, MeshAssetReveived);
+ assetProvider(_pbs.SculptTexture, MeshAssetReceived);
});
}
}
- void MeshAssetReveived(AssetBase asset)
+ void MeshAssetReceived(AssetBase asset)
{
if (asset.Data != null && asset.Data.Length > 0)
{
--
cgit v1.1
From 37de965233ad6c25c2ce7a29d89762aa478a6147 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 30 Oct 2012 01:08:00 +0000
Subject: Make MeshAssetReceived private.
Keep methods private unless they need to be opened up to external callers. Reduces analysis complexity.
---
OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'OpenSim/Region/Physics/OdePlugin')
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index 7c46ff8..5b49e3b 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -3349,7 +3349,7 @@ Console.WriteLine(" JointCreateFixed");
}
}
- void MeshAssetReceived(AssetBase asset)
+ private void MeshAssetReceived(AssetBase asset)
{
if (asset.Data != null && asset.Data.Length > 0)
{
--
cgit v1.1
From cccf6953276eda0af34fb7b8e95c2c4351db5546 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 30 Oct 2012 01:14:48 +0000
Subject: Add asset != null check to ODEPrim.MeshAssetReceived instead of
throwing exception.
In some cases (such as failure to receive response from asset service), it is possible for a null to be returned from IAssetService.Get(string, object, AssetRetrieved).
---
OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'OpenSim/Region/Physics/OdePlugin')
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index 5b49e3b..2637295 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -3351,7 +3351,7 @@ Console.WriteLine(" JointCreateFixed");
private void MeshAssetReceived(AssetBase asset)
{
- if (asset.Data != null && asset.Data.Length > 0)
+ if (asset != null && asset.Data != null && asset.Data.Length > 0)
{
if (!_pbs.SculptEntry)
return;
--
cgit v1.1
From ff6c69000e3f192f81e7408a522b78d91521a5ff Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 30 Oct 2012 01:40:59 +0000
Subject: Log warning if mesh/sculpt asset couldn't be found by
ODEPrim.MeshAssetReceived() callback.
Presumably this is now more useful if the false positive from the old method of loading mesh assets have been eliminated.
---
OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 6 ++++++
1 file changed, 6 insertions(+)
(limited to 'OpenSim/Region/Physics/OdePlugin')
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index 2637295..5a0b8d1 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -3364,6 +3364,12 @@ Console.WriteLine(" JointCreateFixed");
m_taintshape = true;
_parent_scene.AddPhysicsActorTaint(this);
}
+ else
+ {
+ m_log.WarnFormat(
+ "[ODE PRIM]: Could not get mesh/sculpt asset {0} for {1} at {2} in {3}",
+ _pbs.SculptTexture, Name, _position, _parent_scene.Name);
+ }
}
}
}
\ No newline at end of file
--
cgit v1.1
From 9bc0419679ac8b05cd9b6a5cf340f1e6b8d5d288 Mon Sep 17 00:00:00 2001
From: Dan Lake
Date: Thu, 8 Nov 2012 01:18:25 -0800
Subject: ODECharacter overrides TargetVelocity. No change to existing behavior
---
OpenSim/Region/Physics/OdePlugin/ODECharacter.cs | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
(limited to 'OpenSim/Region/Physics/OdePlugin')
diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
index c736557..319f6ab 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
@@ -661,6 +661,20 @@ namespace OpenSim.Region.Physics.OdePlugin
set { return; }
}
+ public override Vector3 TargetVelocity
+ {
+ get
+ {
+ return m_taintTargetVelocity;
+ }
+
+ set
+ {
+ Velocity = value;
+ }
+ }
+
+
public override Vector3 Velocity
{
get
@@ -1394,4 +1408,4 @@ namespace OpenSim.Region.Physics.OdePlugin
m_eventsubscription += p;
}
}
-}
\ No newline at end of file
+}
--
cgit v1.1
From e4cb7af98a122773e84baf9be38b8b34f02e89a4 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Tue, 13 Nov 2012 19:26:43 -0800
Subject: Updated all existing AssemblyVersions's to 0.7.5.*. Many DLLs still
don't have an AssemblyInfo file.
---
OpenSim/Region/Physics/OdePlugin/AssemblyInfo.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'OpenSim/Region/Physics/OdePlugin')
diff --git a/OpenSim/Region/Physics/OdePlugin/AssemblyInfo.cs b/OpenSim/Region/Physics/OdePlugin/AssemblyInfo.cs
index d65929a..142318e 100644
--- a/OpenSim/Region/Physics/OdePlugin/AssemblyInfo.cs
+++ b/OpenSim/Region/Physics/OdePlugin/AssemblyInfo.cs
@@ -55,4 +55,4 @@ using System.Runtime.InteropServices;
// You can specify all values by your own or you can build default build and revision
// numbers with the '*' character (the default):
-[assembly : AssemblyVersion("0.6.5.*")]
+[assembly : AssemblyVersion("0.7.5.*")]
--
cgit v1.1
From aeeaa3a0a9b965dfe5d1111b178234c94de9ba9d Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Wed, 14 Nov 2012 11:09:43 -0800
Subject: Added AssemblyInfos to every dll in the OpenSim.Region namespace.
---
OpenSim/Region/Physics/OdePlugin/AssemblyInfo.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'OpenSim/Region/Physics/OdePlugin')
diff --git a/OpenSim/Region/Physics/OdePlugin/AssemblyInfo.cs b/OpenSim/Region/Physics/OdePlugin/AssemblyInfo.cs
index 142318e..3c4f06a 100644
--- a/OpenSim/Region/Physics/OdePlugin/AssemblyInfo.cs
+++ b/OpenSim/Region/Physics/OdePlugin/AssemblyInfo.cs
@@ -39,7 +39,7 @@ using System.Runtime.InteropServices;
[assembly : AssemblyConfiguration("")]
[assembly : AssemblyCompany("http://opensimulator.org")]
[assembly : AssemblyProduct("OdePlugin")]
-[assembly : AssemblyCopyright("Copyright (c) OpenSimulator.org Developers 2007-2009")]
+[assembly : AssemblyCopyright("Copyright (c) OpenSimulator.org Developers")]
[assembly : AssemblyTrademark("")]
[assembly : AssemblyCulture("")]
--
cgit v1.1