From 85f578999320ab4b3b87d99c6901e7dfc86f8cc3 Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Mon, 21 May 2012 12:35:17 +0100
Subject: try to let avas climb higher steps. Will only work in some cases,
may have bad effects, so needs some more testing
---
OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs | 2 +-
OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs | 82 +++++++++++++++++++++---
2 files changed, 75 insertions(+), 9 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
index 62fd279..459cd27 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
@@ -2562,10 +2562,10 @@ namespace OpenSim.Region.Physics.OdePlugin
{
d.Quaternion qtmp;
d.GeomCopyQuaternion(prim_geom, out qtmp);
- _orientation.W = qtmp.W;
_orientation.X = qtmp.X;
_orientation.Y = qtmp.Y;
_orientation.Z = qtmp.Z;
+ _orientation.W = qtmp.W;
d.Vector3 lpos = d.GeomGetPosition(prim_geom);
_position.X = lpos.X;
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs b/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs
index bfcfd21..d5968fc 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs
@@ -1006,16 +1006,82 @@ namespace OpenSim.Region.Physics.OdePlugin
else
{
- if (dop1foot && (p1.Position.Z - curContact.pos.Z) > (p1.Size.Z - avCapRadius) * 0.5f)
- p1.IsColliding = true;
- if (dop2foot && (p2.Position.Z - curContact.pos.Z) > (p2.Size.Z - avCapRadius) * 0.5f)
- p2.IsColliding = true;
- if (AvanormOverride && curContact.depth > 0.3f)
+ if (AvanormOverride)
{
- curContact.normal.X = normoverride.X;
- curContact.normal.Y = normoverride.Y;
- curContact.normal.Z = normoverride.Z;
+ if (curContact.depth > 0.3f)
+ {
+ if (dop1foot && (p1.Position.Z - curContact.pos.Z) > (p1.Size.Z - avCapRadius) * 0.5f)
+ p1.IsColliding = true;
+ if (dop2foot && (p2.Position.Z - curContact.pos.Z) > (p2.Size.Z - avCapRadius) * 0.5f)
+ p2.IsColliding = true;
+ curContact.normal.X = normoverride.X;
+ curContact.normal.Y = normoverride.Y;
+ curContact.normal.Z = normoverride.Z;
+ }
+
+ else
+ {
+ if (dop1foot)
+ {
+ float sz = p1.Size.Z;
+ Vector3 vtmp = p1.Position;
+ float ppos = curContact.pos.Z - vtmp.Z + (sz - avCapRadius) * 0.5f;
+ if (ppos > 0f)
+ {
+ if (!p1.Flying)
+ {
+ d.AABB aabb;
+ d.GeomGetAABB(g2, out aabb);
+ float tmp = vtmp.Z - sz * .25f;
+
+ if (aabb.MaxZ < tmp)
+ {
+ vtmp.X = curContact.pos.X - vtmp.X;
+ vtmp.Y = curContact.pos.Y - vtmp.Y;
+ vtmp.Z = -0.2f;
+ vtmp.Normalize();
+ curContact.normal.X = vtmp.X;
+ curContact.normal.Y = vtmp.Y;
+ curContact.normal.Z = vtmp.Z;
+ }
+ }
+ }
+ else
+ p1.IsColliding = true;
+
+ }
+
+ if (dop2foot)
+ {
+ float sz = p2.Size.Z;
+ Vector3 vtmp = p2.Position;
+ float ppos = curContact.pos.Z - vtmp.Z + (sz - avCapRadius) * 0.5f;
+ if (ppos > 0f)
+ {
+ if (!p2.Flying)
+ {
+ d.AABB aabb;
+ d.GeomGetAABB(g1, out aabb);
+ float tmp = vtmp.Z - sz * .25f;
+
+ if (aabb.MaxZ < tmp)
+ {
+ vtmp.X = curContact.pos.X - vtmp.X;
+ vtmp.Y = curContact.pos.Y - vtmp.Y;
+ vtmp.Z = -0.2f;
+ vtmp.Normalize();
+ curContact.normal.X = vtmp.X;
+ curContact.normal.Y = vtmp.Y;
+ curContact.normal.Z = vtmp.Z;
+ }
+ }
+ }
+ else
+ p2.IsColliding = true;
+
+ }
+ }
}
Joint = CreateContacJoint(ref curContact, mu, bounce, cfm, erpscale, dscale);
--
cgit v1.1
From d2260423e5e955b4e0f33f279e64cf74d580dc37 Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Mon, 21 May 2012 17:11:19 +0100
Subject: also don't collide sculps or meshs if meshing is OFF
---
OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs | 2 ++
1 file changed, 2 insertions(+)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
index 459cd27..496e7ac 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
@@ -1482,6 +1482,8 @@ namespace OpenSim.Region.Physics.OdePlugin
if (!haveMesh)
m_NoColide = true;
}
+ else if(_pbs.SculptEntry)
+ m_NoColide = true; // also don't colide if is a sculp or mesh and meshing is off
if (!haveMesh)
{
--
cgit v1.1
From f740c9522aa5fd57ffd2d01fa9c2e244113ac880 Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Sun, 27 May 2012 14:01:42 +0100
Subject: Let OOB information usable outside ubitode
---
OpenSim/Region/Physics/Manager/PhysicsActor.cs | 29 +++++++++++++++++++++-
.../Region/Physics/UbitOdePlugin/ODECharacter.cs | 23 -----------------
OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs | 10 ++++----
3 files changed, 33 insertions(+), 29 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Physics/Manager/PhysicsActor.cs b/OpenSim/Region/Physics/Manager/PhysicsActor.cs
index fb90887..aaeae86 100644
--- a/OpenSim/Region/Physics/Manager/PhysicsActor.cs
+++ b/OpenSim/Region/Physics/Manager/PhysicsActor.cs
@@ -294,6 +294,34 @@ namespace OpenSim.Region.Physics.Manager
public abstract Vector3 GeometricCenter { get; }
public abstract Vector3 CenterOfMass { get; }
+ public virtual Vector3 OOBsize
+ {
+ get
+ {
+ Vector3 s=Size;
+ s.X *=0.5f;
+ s.Y *=0.5f;
+ s.Z *=0.5f;
+ return s;
+ }
+ }
+
+ public virtual Vector3 OOBoffset
+ {
+ get
+ {
+ return Vector3.Zero;
+ }
+ }
+
+ public virtual float OOBRadiusSQ
+ {
+ get
+ {
+ return Size.LengthSquared() * 0.25f; // ((0.5^2)
+ }
+ }
+
///
/// Velocity of this actor.
///
@@ -429,7 +457,6 @@ namespace OpenSim.Region.Physics.Manager
public override void VehicleFloatParam(int param, float value)
{
-
}
public override void VehicleVectorParam(int param, Vector3 value)
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs
index 1084b0e..6fb54cb 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs
@@ -522,29 +522,6 @@ namespace OpenSim.Region.Physics.OdePlugin
}
}
- //UBit mess
- /* for later use
- public override Vector3 PrimOOBsize
- {
- get
- {
- Vector3 s=Size;
- s.X *=0.5f;
- s.Y *=0.5f;
- s.Z *=0.5f;
- return s;
- }
- }
-
- public override Vector3 PrimOOBoffset
- {
- get
- {
- return Vector3.Zero;
- }
- }
- */
-
public override PrimitiveBaseShape Shape
{
set { return; }
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
index 496e7ac..1bfe08b 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
@@ -504,8 +504,8 @@ namespace OpenSim.Region.Physics.OdePlugin
}
}
}
-/*
- public override Vector3 PrimOOBsize
+
+ public override Vector3 OOBsize
{
get
{
@@ -513,7 +513,7 @@ namespace OpenSim.Region.Physics.OdePlugin
}
}
- public override Vector3 PrimOOBoffset
+ public override Vector3 OOBoffset
{
get
{
@@ -521,14 +521,14 @@ namespace OpenSim.Region.Physics.OdePlugin
}
}
- public override float PrimOOBRadiusSQ
+ public override float OOBRadiusSQ
{
get
{
return primOOBradiusSQ;
}
}
-*/
+
public override PrimitiveBaseShape Shape
{
set
--
cgit v1.1
From bbaf450c30a0822c8ffcc40bf75961f2c3c214e4 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Mon, 28 May 2012 02:14:14 +0200
Subject: Modify SceneManeger to use a DoubleDictionary and work without locks.
Changes to the scenes dictionary are exceedingly rare and using atomic
operations makes the chance of collisions nearly nil in any case.
---
OpenSim/Region/Framework/Scenes/SceneManager.cs | 266 ++++++++----------------
1 file changed, 90 insertions(+), 176 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Framework/Scenes/SceneManager.cs b/OpenSim/Region/Framework/Scenes/SceneManager.cs
index e4eaf3a..e3fed49 100644
--- a/OpenSim/Region/Framework/Scenes/SceneManager.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneManager.cs
@@ -53,12 +53,12 @@ namespace OpenSim.Region.Framework.Scenes
get { return m_instance; }
}
- private readonly List m_localScenes = new List();
+ private readonly DoubleDictionary m_localScenes = new DoubleDictionary();
private Scene m_currentScene = null;
public List Scenes
{
- get { return new List(m_localScenes); }
+ get { return new List(m_localScenes.FindAll(delegate(Scene s) { return true; })); }
}
public Scene CurrentScene
@@ -72,13 +72,10 @@ namespace OpenSim.Region.Framework.Scenes
{
if (m_currentScene == null)
{
- lock (m_localScenes)
- {
- if (m_localScenes.Count > 0)
- return m_localScenes[0];
- else
- return null;
- }
+ List sceneList = Scenes;
+ if (sceneList.Count == 0)
+ return null;
+ return sceneList[0];
}
else
{
@@ -90,7 +87,7 @@ namespace OpenSim.Region.Framework.Scenes
public SceneManager()
{
m_instance = this;
- m_localScenes = new List();
+ m_localScenes = new DoubleDictionary();
}
public void Close()
@@ -98,20 +95,18 @@ namespace OpenSim.Region.Framework.Scenes
// collect known shared modules in sharedModules
Dictionary sharedModules = new Dictionary();
- lock (m_localScenes)
+ List sceneList = Scenes;
+ for (int i = 0; i < sceneList.Count; i++)
{
- for (int i = 0; i < m_localScenes.Count; i++)
+ // extract known shared modules from scene
+ foreach (string k in sceneList[i].Modules.Keys)
{
- // extract known shared modules from scene
- foreach (string k in m_localScenes[i].Modules.Keys)
- {
- if (m_localScenes[i].Modules[k].IsSharedModule &&
- !sharedModules.ContainsKey(k))
- sharedModules[k] = m_localScenes[i].Modules[k];
- }
- // close scene/region
- m_localScenes[i].Close();
+ if (sceneList[i].Modules[k].IsSharedModule &&
+ !sharedModules.ContainsKey(k))
+ sharedModules[k] = sceneList[i].Modules[k];
}
+ // close scene/region
+ sceneList[i].Close();
}
// all regions/scenes are now closed, we can now safely
@@ -120,31 +115,22 @@ namespace OpenSim.Region.Framework.Scenes
{
mod.Close();
}
+
+ m_localScenes.Clear();
}
public void Close(Scene cscene)
{
- lock (m_localScenes)
- {
- if (m_localScenes.Contains(cscene))
- {
- for (int i = 0; i < m_localScenes.Count; i++)
- {
- if (m_localScenes[i].Equals(cscene))
- {
- m_localScenes[i].Close();
- }
- }
- }
- }
+ if (!m_localScenes.ContainsKey(cscene.RegionInfo.RegionID))
+ return;
+ cscene.Close();
}
public void Add(Scene scene)
{
scene.OnRestart += HandleRestart;
- lock (m_localScenes)
- m_localScenes.Add(scene);
+ m_localScenes.Add(scene.RegionInfo.RegionID, scene.RegionInfo.RegionName, scene);
}
public void HandleRestart(RegionInfo rdata)
@@ -152,24 +138,7 @@ namespace OpenSim.Region.Framework.Scenes
m_log.Error("[SCENEMANAGER]: Got Restart message for region:" + rdata.RegionName + " Sending up to main");
int RegionSceneElement = -1;
- lock (m_localScenes)
- {
- for (int i = 0; i < m_localScenes.Count; i++)
- {
- if (rdata.RegionName == m_localScenes[i].RegionInfo.RegionName)
- {
- RegionSceneElement = i;
- }
- }
-
- // Now we make sure the region is no longer known about by the SceneManager
- // Prevents duplicates.
-
- if (RegionSceneElement >= 0)
- {
- m_localScenes.RemoveAt(RegionSceneElement);
- }
- }
+ m_localScenes.Remove(rdata.RegionID);
// Send signal to main that we're restarting this sim.
OnRestartSim(rdata);
@@ -179,32 +148,29 @@ namespace OpenSim.Region.Framework.Scenes
{
RegionInfo Result = null;
- lock (m_localScenes)
- {
- for (int i = 0; i < m_localScenes.Count; i++)
- {
- if (m_localScenes[i].RegionInfo.RegionHandle == regionHandle)
+ Scene s = m_localScenes.FindValue(delegate(Scene x)
{
- // Inform other regions to tell their avatar about me
- Result = m_localScenes[i].RegionInfo;
- }
- }
+ if (x.RegionInfo.RegionHandle == regionHandle)
+ return true;
+ return false;
+ });
- if (Result != null)
+ if (s != null)
+ {
+ List sceneList = Scenes;
+
+ for (int i = 0; i < sceneList.Count; i++)
{
- for (int i = 0; i < m_localScenes.Count; i++)
+ if (sceneList[i]!= s)
{
- if (m_localScenes[i].RegionInfo.RegionHandle != regionHandle)
- {
- // Inform other regions to tell their avatar about me
- //m_localScenes[i].OtherRegionUp(Result);
- }
+ // Inform other regions to tell their avatar about me
+ //sceneList[i].OtherRegionUp(Result);
}
}
- else
- {
- m_log.Error("[REGION]: Unable to notify Other regions of this Region coming up");
- }
+ }
+ else
+ {
+ m_log.Error("[REGION]: Unable to notify Other regions of this Region coming up");
}
}
@@ -308,8 +274,8 @@ namespace OpenSim.Region.Framework.Scenes
{
if (m_currentScene == null)
{
- lock (m_localScenes)
- m_localScenes.ForEach(func);
+ List sceneList = Scenes;
+ sceneList.ForEach(func);
}
else
{
@@ -338,16 +304,12 @@ namespace OpenSim.Region.Framework.Scenes
}
else
{
- lock (m_localScenes)
+ Scene s;
+
+ if (m_localScenes.TryGetValue(regionName, out s))
{
- foreach (Scene scene in m_localScenes)
- {
- if (String.Compare(scene.RegionInfo.RegionName, regionName, true) == 0)
- {
- m_currentScene = scene;
- return true;
- }
- }
+ m_currentScene = s;
+ return true;
}
return false;
@@ -358,16 +320,12 @@ namespace OpenSim.Region.Framework.Scenes
{
// m_log.Debug("Searching for Region: '" + regionID + "'");
- lock (m_localScenes)
+ Scene s;
+
+ if (m_localScenes.TryGetValue(regionID, out s))
{
- foreach (Scene scene in m_localScenes)
- {
- if (scene.RegionInfo.RegionID == regionID)
- {
- m_currentScene = scene;
- return true;
- }
- }
+ m_currentScene = s;
+ return true;
}
return false;
@@ -375,52 +333,24 @@ namespace OpenSim.Region.Framework.Scenes
public bool TryGetScene(string regionName, out Scene scene)
{
- lock (m_localScenes)
- {
- foreach (Scene mscene in m_localScenes)
- {
- if (String.Compare(mscene.RegionInfo.RegionName, regionName, true) == 0)
- {
- scene = mscene;
- return true;
- }
- }
- }
-
- scene = null;
- return false;
+ return m_localScenes.TryGetValue(regionName, out scene);
}
public bool TryGetScene(UUID regionID, out Scene scene)
{
- lock (m_localScenes)
- {
- foreach (Scene mscene in m_localScenes)
- {
- if (mscene.RegionInfo.RegionID == regionID)
- {
- scene = mscene;
- return true;
- }
- }
- }
-
- scene = null;
- return false;
+ return m_localScenes.TryGetValue(regionID, out scene);
}
public bool TryGetScene(uint locX, uint locY, out Scene scene)
{
- lock (m_localScenes)
+ List sceneList = Scenes;
+ foreach (Scene mscene in sceneList)
{
- foreach (Scene mscene in m_localScenes)
+ if (mscene.RegionInfo.RegionLocX == locX &&
+ mscene.RegionInfo.RegionLocY == locY)
{
- if (mscene.RegionInfo.RegionLocX == locX &&
- mscene.RegionInfo.RegionLocY == locY)
- {
- scene = mscene;
- return true;
- }
+ scene = mscene;
+ return true;
}
}
@@ -430,16 +360,14 @@ namespace OpenSim.Region.Framework.Scenes
public bool TryGetScene(IPEndPoint ipEndPoint, out Scene scene)
{
- lock (m_localScenes)
+ List sceneList = Scenes;
+ foreach (Scene mscene in sceneList)
{
- foreach (Scene mscene in m_localScenes)
+ if ((mscene.RegionInfo.InternalEndPoint.Equals(ipEndPoint.Address)) &&
+ (mscene.RegionInfo.InternalEndPoint.Port == ipEndPoint.Port))
{
- if ((mscene.RegionInfo.InternalEndPoint.Equals(ipEndPoint.Address)) &&
- (mscene.RegionInfo.InternalEndPoint.Port == ipEndPoint.Port))
- {
- scene = mscene;
- return true;
- }
+ scene = mscene;
+ return true;
}
}
@@ -504,15 +432,10 @@ namespace OpenSim.Region.Framework.Scenes
public RegionInfo GetRegionInfo(UUID regionID)
{
- lock (m_localScenes)
+ Scene s;
+ if (m_localScenes.TryGetValue(regionID, out s))
{
- foreach (Scene scene in m_localScenes)
- {
- if (scene.RegionInfo.RegionID == regionID)
- {
- return scene.RegionInfo;
- }
- }
+ return s.RegionInfo;
}
return null;
@@ -530,14 +453,12 @@ namespace OpenSim.Region.Framework.Scenes
public bool TryGetScenePresence(UUID avatarId, out ScenePresence avatar)
{
- lock (m_localScenes)
+ List sceneList = Scenes;
+ foreach (Scene scene in sceneList)
{
- foreach (Scene scene in m_localScenes)
+ if (scene.TryGetScenePresence(avatarId, out avatar))
{
- if (scene.TryGetScenePresence(avatarId, out avatar))
- {
- return true;
- }
+ return true;
}
}
@@ -547,15 +468,13 @@ namespace OpenSim.Region.Framework.Scenes
public bool TryGetRootScenePresence(UUID avatarId, out ScenePresence avatar)
{
- lock (m_localScenes)
+ List sceneList = Scenes;
+ foreach (Scene scene in sceneList)
{
- foreach (Scene scene in m_localScenes)
- {
- avatar = scene.GetScenePresence(avatarId);
+ avatar = scene.GetScenePresence(avatarId);
- if (avatar != null && !avatar.IsChildAgent)
- return true;
- }
+ if (avatar != null && !avatar.IsChildAgent)
+ return true;
}
avatar = null;
@@ -564,22 +483,19 @@ namespace OpenSim.Region.Framework.Scenes
public void CloseScene(Scene scene)
{
- lock (m_localScenes)
- m_localScenes.Remove(scene);
+ m_localScenes.Remove(scene.RegionInfo.RegionID);
scene.Close();
}
public bool TryGetAvatarByName(string avatarName, out ScenePresence avatar)
{
- lock (m_localScenes)
+ List sceneList = Scenes;
+ foreach (Scene scene in sceneList)
{
- foreach (Scene scene in m_localScenes)
+ if (scene.TryGetAvatarByName(avatarName, out avatar))
{
- if (scene.TryGetAvatarByName(avatarName, out avatar))
- {
- return true;
- }
+ return true;
}
}
@@ -589,14 +505,12 @@ namespace OpenSim.Region.Framework.Scenes
public bool TryGetRootScenePresenceByName(string firstName, string lastName, out ScenePresence sp)
{
- lock (m_localScenes)
+ List sceneList = Scenes;
+ foreach (Scene scene in sceneList)
{
- foreach (Scene scene in m_localScenes)
- {
- sp = scene.GetScenePresence(firstName, lastName);
- if (sp != null && !sp.IsChildAgent)
- return true;
- }
+ sp = scene.GetScenePresence(firstName, lastName);
+ if (sp != null && !sp.IsChildAgent)
+ return true;
}
sp = null;
@@ -605,8 +519,8 @@ namespace OpenSim.Region.Framework.Scenes
public void ForEachScene(Action action)
{
- lock (m_localScenes)
- m_localScenes.ForEach(action);
+ List sceneList = Scenes;
+ sceneList.ForEach(action);
}
}
}
--
cgit v1.1
From b70fb7df789ba40b520b8bf0794b32c8099ef202 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Mon, 28 May 2012 11:28:46 +0200
Subject: Place the return back into collision sounds.
---
OpenSim/Region/Framework/Scenes/CollisionSounds.cs | 4 ++++
1 file changed, 4 insertions(+)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Framework/Scenes/CollisionSounds.cs b/OpenSim/Region/Framework/Scenes/CollisionSounds.cs
index 81ca9f1..a02f108 100644
--- a/OpenSim/Region/Framework/Scenes/CollisionSounds.cs
+++ b/OpenSim/Region/Framework/Scenes/CollisionSounds.cs
@@ -188,6 +188,8 @@ namespace OpenSim.Region.Framework.Scenes
public static void PartCollisionSound(SceneObjectPart part, List collidersinfolist)
{
+ return;
+
if (collidersinfolist.Count == 0 || part == null)
return;
@@ -297,6 +299,8 @@ namespace OpenSim.Region.Framework.Scenes
public static void AvatarCollisionSound(ScenePresence av, List collidersinfolist)
{
+ return;
+
if (collidersinfolist.Count == 0 || av == null)
return;
--
cgit v1.1
From 20baa6334ca21ecd30ce1a46fcc4dbe5d4030854 Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Mon, 28 May 2012 13:05:50 +0100
Subject: revert making sculpts phanton if sculpt meshing option is off
---
OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs | 2 --
1 file changed, 2 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
index 1bfe08b..5109a6a 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
@@ -1482,8 +1482,6 @@ namespace OpenSim.Region.Physics.OdePlugin
if (!haveMesh)
m_NoColide = true;
}
- else if(_pbs.SculptEntry)
- m_NoColide = true; // also don't colide if is a sculp or mesh and meshing is off
if (!haveMesh)
{
--
cgit v1.1
From 121433d03aad53bfa8d50854115c0496317b00eb Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Mon, 28 May 2012 13:10:02 +0100
Subject: disable collision sounds for now
---
OpenSim/Region/Framework/Scenes/CollisionSounds.cs | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Framework/Scenes/CollisionSounds.cs b/OpenSim/Region/Framework/Scenes/CollisionSounds.cs
index 81ca9f1..de82ddc 100644
--- a/OpenSim/Region/Framework/Scenes/CollisionSounds.cs
+++ b/OpenSim/Region/Framework/Scenes/CollisionSounds.cs
@@ -188,6 +188,9 @@ namespace OpenSim.Region.Framework.Scenes
public static void PartCollisionSound(SceneObjectPart part, List collidersinfolist)
{
+ // disable for now
+ return;
+
if (collidersinfolist.Count == 0 || part == null)
return;
@@ -296,7 +299,10 @@ namespace OpenSim.Region.Framework.Scenes
}
public static void AvatarCollisionSound(ScenePresence av, List collidersinfolist)
- {
+ {
+ // disable for now
+ return;
+
if (collidersinfolist.Count == 0 || av == null)
return;
@@ -368,4 +374,4 @@ namespace OpenSim.Region.Framework.Scenes
}
}
}
-}
+}
\ No newline at end of file
--
cgit v1.1
From 60cebe9a5b91f2683019d645f6bb243a9f7db139 Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Mon, 28 May 2012 14:32:16 +0100
Subject: let meshs work indenpendently of mesh_sculpted_prim config option
---
OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs | 54 +++++++++++-------------
1 file changed, 25 insertions(+), 29 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs b/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs
index d5968fc..b0bc18b 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs
@@ -1675,41 +1675,43 @@ namespace OpenSim.Region.Physics.OdePlugin
///
public bool needsMeshing(PrimitiveBaseShape pbs)
{
- // most of this is redundant now as the mesher will return null if it cant mesh a prim
- // but we still need to check for sculptie meshing being enabled so this is the most
- // convenient place to do it for now...
-
- // //if (pbs.PathCurve == (byte)Primitive.PathCurve.Circle && pbs.ProfileCurve == (byte)Primitive.ProfileCurve.Circle && pbs.PathScaleY <= 0.75f)
- // //m_log.Debug("needsMeshing: " + " pathCurve: " + pbs.PathCurve.ToString() + " profileCurve: " + pbs.ProfileCurve.ToString() + " pathScaleY: " + Primitive.UnpackPathScale(pbs.PathScaleY).ToString());
- int iPropertiesNotSupportedDefault = 0;
+ // check sculpts or meshs
if (pbs.SculptEntry)
{
- if(!meshSculptedPrim)
+ if (pbs.SculptType == (byte)SculptType.Mesh) // always do meshs
+ return true;
+
+ if (!meshSculptedPrim)
return false;
+ else
+ return true;
}
+ int iPropertiesNotSupportedDefault = 0;
+
+ if (forceSimplePrimMeshing)
+ return true;
+
// if it's a standard box or sphere with no cuts, hollows, twist or top shear, return false since ODE can use an internal representation for the prim
- if (!forceSimplePrimMeshing && !pbs.SculptEntry)
- {
- if ((pbs.ProfileShape == ProfileShape.Square && pbs.PathCurve == (byte)Extrusion.Straight)
+
+ if ((pbs.ProfileShape == ProfileShape.Square && pbs.PathCurve == (byte)Extrusion.Straight)
|| (pbs.ProfileShape == ProfileShape.HalfCircle && pbs.PathCurve == (byte)Extrusion.Curve1
&& pbs.Scale.X == pbs.Scale.Y && pbs.Scale.Y == pbs.Scale.Z))
- {
+ {
- if (pbs.ProfileBegin == 0 && pbs.ProfileEnd == 0
- && pbs.ProfileHollow == 0
- && pbs.PathTwist == 0 && pbs.PathTwistBegin == 0
- && pbs.PathBegin == 0 && pbs.PathEnd == 0
- && pbs.PathTaperX == 0 && pbs.PathTaperY == 0
- && pbs.PathScaleX == 100 && pbs.PathScaleY == 100
- && pbs.PathShearX == 0 && pbs.PathShearY == 0)
- {
+ if (pbs.ProfileBegin == 0 && pbs.ProfileEnd == 0
+ && pbs.ProfileHollow == 0
+ && pbs.PathTwist == 0 && pbs.PathTwistBegin == 0
+ && pbs.PathBegin == 0 && pbs.PathEnd == 0
+ && pbs.PathTaperX == 0 && pbs.PathTaperY == 0
+ && pbs.PathScaleX == 100 && pbs.PathScaleY == 100
+ && pbs.PathShearX == 0 && pbs.PathShearY == 0)
+ {
#if SPAM
- m_log.Warn("NonMesh");
+ m_log.Warn("NonMesh");
#endif
- return false;
- }
+ return false;
}
}
@@ -1717,9 +1719,6 @@ namespace OpenSim.Region.Physics.OdePlugin
// and it's odd.. so for now just return true if asked to force meshs
// hopefully mesher will fail if doesn't suport so things still get basic boxes
- if (forceSimplePrimMeshing)
- return true;
-
if (pbs.ProfileHollow != 0)
iPropertiesNotSupportedDefault++;
@@ -1787,9 +1786,6 @@ namespace OpenSim.Region.Physics.OdePlugin
}
}
- if (pbs.SculptEntry && meshSculptedPrim)
- iPropertiesNotSupportedDefault++;
-
if (iPropertiesNotSupportedDefault == 0)
{
#if SPAM
--
cgit v1.1
From 2122c336b088ebb2900cf6cd061602dda01268e0 Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Mon, 28 May 2012 14:44:06 +0100
Subject: a bit cleaner code (?) on sculpts/meshs meshing checking
---
OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs b/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs
index b0bc18b..286c7f0 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs
@@ -1675,20 +1675,17 @@ namespace OpenSim.Region.Physics.OdePlugin
///
public bool needsMeshing(PrimitiveBaseShape pbs)
{
-
// check sculpts or meshs
if (pbs.SculptEntry)
{
- if (pbs.SculptType == (byte)SculptType.Mesh) // always do meshs
+ if (meshSculptedPrim)
return true;
- if (!meshSculptedPrim)
- return false;
- else
+ if (pbs.SculptType == (byte)SculptType.Mesh) // always do meshs
return true;
- }
- int iPropertiesNotSupportedDefault = 0;
+ return false;
+ }
if (forceSimplePrimMeshing)
return true;
@@ -1719,6 +1716,8 @@ namespace OpenSim.Region.Physics.OdePlugin
// and it's odd.. so for now just return true if asked to force meshs
// hopefully mesher will fail if doesn't suport so things still get basic boxes
+ int iPropertiesNotSupportedDefault = 0;
+
if (pbs.ProfileHollow != 0)
iPropertiesNotSupportedDefault++;
--
cgit v1.1
From dbbfe0cdd78c919b39da52e1ccc0c1fc500b57d5 Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Mon, 28 May 2012 22:23:32 +0100
Subject: fix avatars collisions on sim crossings and other few cases where
freemove() is called
---
OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs
index 6fb54cb..093bc3c 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs
@@ -1322,8 +1322,7 @@ namespace OpenSim.Region.Physics.OdePlugin
m_iscollidingGround = false;
m_iscollidingObj = false;
- CollisionEventsThisFrame = new CollisionEventUpdate();
- m_eventsubscription = 0;
+ CollisionEventsThisFrame.Clear();
}
private void changeForce(Vector3 newForce)
--
cgit v1.1