diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/Prioritizer.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Prioritizer.cs | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Prioritizer.cs b/OpenSim/Region/Framework/Scenes/Prioritizer.cs index 19f8180..c75f8ba 100644 --- a/OpenSim/Region/Framework/Scenes/Prioritizer.cs +++ b/OpenSim/Region/Framework/Scenes/Prioritizer.cs | |||
@@ -167,6 +167,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
167 | 167 | ||
168 | private double GetPriorityByFrontBack(IClientAPI client, ISceneEntity entity) | 168 | private double GetPriorityByFrontBack(IClientAPI client, ISceneEntity entity) |
169 | { | 169 | { |
170 | if (entity == null) return double.NaN; | ||
170 | ScenePresence presence = m_scene.GetScenePresence(client.AgentId); | 171 | ScenePresence presence = m_scene.GetScenePresence(client.AgentId); |
171 | if (presence != null) | 172 | if (presence != null) |
172 | { | 173 | { |
@@ -226,9 +227,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
226 | return 0.0; | 227 | return 0.0; |
227 | 228 | ||
228 | // Use group position for child prims | 229 | // Use group position for child prims |
229 | Vector3 entityPos = entity.AbsolutePosition; | 230 | Vector3 entityPos; |
230 | if (entity is SceneObjectPart) | 231 | if (entity is SceneObjectPart) |
231 | entityPos = m_scene.GetGroupByPrim(entity.LocalId).AbsolutePosition; | 232 | entityPos = ((SceneObjectPart)entity).ParentGroup.AbsolutePosition; |
232 | else | 233 | else |
233 | entityPos = entity.AbsolutePosition; | 234 | entityPos = entity.AbsolutePosition; |
234 | 235 | ||
@@ -251,12 +252,19 @@ namespace OpenSim.Region.Framework.Scenes | |||
251 | 252 | ||
252 | if (entity is SceneObjectPart) | 253 | if (entity is SceneObjectPart) |
253 | { | 254 | { |
254 | PhysicsActor physActor = ((SceneObjectPart)entity).ParentGroup.RootPart.PhysActor; | ||
255 | if (physActor == null || !physActor.IsPhysical) | ||
256 | priority += 100; | ||
257 | |||
258 | if (((SceneObjectPart)entity).ParentGroup.RootPart.IsAttachment) | 255 | if (((SceneObjectPart)entity).ParentGroup.RootPart.IsAttachment) |
256 | { | ||
259 | priority = 1.0; | 257 | priority = 1.0; |
258 | } | ||
259 | else | ||
260 | { | ||
261 | PhysicsActor physActor = ((SceneObjectPart)entity).ParentGroup.RootPart.PhysActor; | ||
262 | if (physActor == null || !physActor.IsPhysical) | ||
263 | priority += 100; | ||
264 | } | ||
265 | |||
266 | if (((SceneObjectPart)entity).ParentGroup.RootPart != (SceneObjectPart)entity) | ||
267 | priority +=1; | ||
260 | } | 268 | } |
261 | return priority; | 269 | return priority; |
262 | } | 270 | } |