From 62dd67b8b8a7eb441d57f2b854444fbc5c4767d3 Mon Sep 17 00:00:00 2001
From: Charles Krinke
Date: Sat, 20 Dec 2008 21:36:42 +0000
Subject: Mantis#2796. Thank you kindly, Gerhard for a patch that addresses: On
a call of llVolumeDetect(1) (or any other number !=0) volume detection is
enabled. Together with VD, the phantom flag is set to the GUI. On a call of
llVolumeDetect(0), vd detection is switched of again, also the phantom state
is removed. On a call to llSetState(STATE_PHANTOM, false) while VD is active,
also VD is switched off. The same is true for unchecking the phantom flag via
GUI. This allows to take back VD without the need to script just by removing
the phantom flag. Things missing in this patch: persistance of the
volume-detection flag. This needs more discussion and will be included in
another patch soon.
---
.../Region/Environment/Scenes/SceneObjectGroup.cs | 34 ++++++++++++++++++----
1 file changed, 29 insertions(+), 5 deletions(-)
(limited to 'OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs')
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
index 5456282..f4ccc46 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
@@ -1431,21 +1431,45 @@ namespace OpenSim.Region.Environment.Scenes
{
bool IsTemporary = ((RootPart.Flags & PrimFlags.TemporaryOnRez) != 0);
bool IsPhantom = ((RootPart.Flags & PrimFlags.Phantom) != 0);
- UpdatePrimFlags(RootPart.LocalId, UsePhysics, IsTemporary, IsPhantom);
+ bool IsVolumeDetect = RootPart.VolumeDetectActive;
+ UpdatePrimFlags(RootPart.LocalId, UsePhysics, IsTemporary, IsPhantom, IsVolumeDetect);
}
public void ScriptSetTemporaryStatus(bool TemporaryStatus)
{
bool UsePhysics = ((RootPart.Flags & PrimFlags.Physics) != 0);
bool IsPhantom = ((RootPart.Flags & PrimFlags.Phantom) != 0);
- UpdatePrimFlags(RootPart.LocalId, UsePhysics, TemporaryStatus, IsPhantom);
+ bool IsVolumeDetect = RootPart.VolumeDetectActive;
+ UpdatePrimFlags(RootPart.LocalId, UsePhysics, TemporaryStatus, IsPhantom, IsVolumeDetect);
}
public void ScriptSetPhantomStatus(bool PhantomStatus)
{
bool UsePhysics = ((RootPart.Flags & PrimFlags.Physics) != 0);
bool IsTemporary = ((RootPart.Flags & PrimFlags.TemporaryOnRez) != 0);
- UpdatePrimFlags(RootPart.LocalId, UsePhysics, IsTemporary, PhantomStatus);
+ bool IsVolumeDetect = RootPart.VolumeDetectActive;
+ UpdatePrimFlags(RootPart.LocalId, UsePhysics, IsTemporary, PhantomStatus, IsVolumeDetect);
+ }
+
+ public void ScriptSetVolumeDetect(bool VDStatus)
+ {
+ bool UsePhysics = ((RootPart.Flags & PrimFlags.Physics) != 0);
+ bool IsTemporary = ((RootPart.Flags & PrimFlags.TemporaryOnRez) != 0);
+ bool IsPhantom = ((RootPart.Flags & PrimFlags.Phantom) != 0);
+ UpdatePrimFlags(RootPart.LocalId, UsePhysics, IsTemporary, IsPhantom, VDStatus);
+
+ /*
+ ScriptSetPhantomStatus(false); // What ever it was before, now it's not phantom anymore
+
+ if (PhysActor != null) // Should always be the case now
+ {
+ PhysActor.SetVolumeDetect(param);
+ }
+ if (param != 0)
+ AddFlag(PrimFlags.Phantom);
+
+ ScheduleFullUpdate();
+ */
}
public void applyImpulse(PhysicsVector impulse)
@@ -2251,7 +2275,7 @@ namespace OpenSim.Region.Environment.Scenes
///
///
///
- public void UpdatePrimFlags(uint localID, bool UsePhysics, bool IsTemporary, bool IsPhantom)
+ public void UpdatePrimFlags(uint localID, bool UsePhysics, bool IsTemporary, bool IsPhantom, bool IsVolumeDetect)
{
SceneObjectPart selectionPart = GetChildPart(localID);
@@ -2279,7 +2303,7 @@ namespace OpenSim.Region.Environment.Scenes
foreach (SceneObjectPart part in m_parts.Values)
{
- part.UpdatePrimFlags(UsePhysics, IsTemporary, IsPhantom);
+ part.UpdatePrimFlags(UsePhysics, IsTemporary, IsPhantom, IsVolumeDetect);
}
}
}
--
cgit v1.1