From a1e32e37dabeab6f87cd8b689c1249c92b24d32e Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Tue, 3 May 2022 06:08:38 +0100 Subject: [PATCH] mantis 8995: try work around the issue --- .../PhysicsModules/ubOde/ODECharacter.cs | 21 +++++++------- .../Region/PhysicsModules/ubOde/ODEScene.cs | 28 +++++++++++-------- 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/OpenSim/Region/PhysicsModules/ubOde/ODECharacter.cs b/OpenSim/Region/PhysicsModules/ubOde/ODECharacter.cs index 480dbc5131..0e6d8035cc 100644 --- a/OpenSim/Region/PhysicsModules/ubOde/ODECharacter.cs +++ b/OpenSim/Region/PhysicsModules/ubOde/ODECharacter.cs @@ -126,7 +126,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde // private string m_name = String.Empty; // other filter control - int m_colliderfilter = 0; + public int Colliderfilter = 0; int m_colliderGroundfilter = 0; int m_colliderObjectfilter = 0; @@ -373,18 +373,18 @@ namespace OpenSim.Region.PhysicsModule.ubOde { if (value) { - m_colliderfilter += 3; - if (m_colliderfilter > 9) - m_colliderfilter = 9; + Colliderfilter += 3; + if (Colliderfilter > 9) + Colliderfilter = 9; } else { - m_colliderfilter--; - if (m_colliderfilter < 0) - m_colliderfilter = 0; + Colliderfilter--; + if (Colliderfilter < 0) + Colliderfilter = 0; } - if (m_colliderfilter < 6) + if (Colliderfilter < 6) m_iscolliding = false; else { @@ -440,7 +440,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde } set { - // Ubit filter this also if (value) { m_colliderObjectfilter += 2; @@ -1282,7 +1281,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde if (m_colliderGroundfilter > 2) { m_iscolliding = true; - m_colliderfilter = 2; + Colliderfilter = 2; if (m_colliderGroundfilter > 10) { @@ -2022,7 +2021,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde _zeroFlag = false; m_targetVelocity = Vector3.Zero; m_freemove = true; - m_colliderfilter = -1; + Colliderfilter = int.MinValue; m_colliderObjectfilter = -1; m_colliderGroundfilter = -1; diff --git a/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs b/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs index c835d390c3..e71b0627cf 100644 --- a/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs +++ b/OpenSim/Region/PhysicsModules/ubOde/ODEScene.cs @@ -1003,27 +1003,31 @@ namespace OpenSim.Region.PhysicsModule.ubOde if (chr == null) continue; - chr.IsColliding = false; - // chr.CollidingGround = false; not done here - chr.CollidingObj = false; + if (chr.Colliderfilter < -1) + chr.Colliderfilter = -1; + else + { + chr.IsColliding = false; + // chr.CollidingGround = false; not done here + chr.CollidingObj = false; - if(chr.Body == IntPtr.Zero || chr.collider == IntPtr.Zero ) - continue; - - // do colisions with static space - SafeNativeMethods.SpaceCollide2(chr.collider, StaticSpace, IntPtr.Zero, nearCallback); + if(chr.Body == IntPtr.Zero || chr.collider == IntPtr.Zero ) + continue; + // do colisions with static space + SafeNativeMethods.SpaceCollide2(chr.collider, StaticSpace, IntPtr.Zero, nearCallback); + SafeNativeMethods.SpaceCollide2(chr.collider, CharsSpace, IntPtr.Zero, nearCallback); + SafeNativeMethods.SpaceCollide2(chr.collider, ActiveSpace, IntPtr.Zero, nearCallback); + } // no coll with gnd } // chars with chars - SafeNativeMethods.SpaceCollide(CharsSpace, IntPtr.Zero, nearCallback); - + //SafeNativeMethods.SpaceCollide(CharsSpace, IntPtr.Zero, nearCallback); } catch (AccessViolationException) { m_log.Warn("[PHYSICS]: Unable to collide Character to static space"); } - } lock (_activeprims) @@ -1067,6 +1071,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde m_log.Warn("[PHYSICS]: Unable to collide in Active: " + e.Message); } + /* // and with chars try { @@ -1076,6 +1081,7 @@ namespace OpenSim.Region.PhysicsModule.ubOde { m_log.Warn("[PHYSICS]: Unable to collide Active to Character: " + e.Message); } + */ } #endregion