diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 192 |
1 files changed, 96 insertions, 96 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index e42b675..8fdb0f1 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -24,7 +24,7 @@ | |||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | 24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.ComponentModel; | 29 | using System.ComponentModel; |
30 | using System.Collections.Generic; | 30 | using System.Collections.Generic; |
@@ -46,7 +46,7 @@ using OpenSim.Services.Interfaces; | |||
46 | 46 | ||
47 | namespace OpenSim.Region.Framework.Scenes | 47 | namespace OpenSim.Region.Framework.Scenes |
48 | { | 48 | { |
49 | 49 | ||
50 | [Flags] | 50 | [Flags] |
51 | public enum scriptEvents | 51 | public enum scriptEvents |
52 | { | 52 | { |
@@ -148,7 +148,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
148 | { | 148 | { |
149 | if (value) | 149 | if (value) |
150 | { | 150 | { |
151 | 151 | ||
152 | if (Backup) | 152 | if (Backup) |
153 | { | 153 | { |
154 | m_scene.SceneGraph.FireChangeBackup(this); | 154 | m_scene.SceneGraph.FireChangeBackup(this); |
@@ -188,7 +188,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
188 | } | 188 | } |
189 | } | 189 | } |
190 | m_hasGroupChanged = value; | 190 | m_hasGroupChanged = value; |
191 | 191 | ||
192 | // m_log.DebugFormat( | 192 | // m_log.DebugFormat( |
193 | // "[SCENE OBJECT GROUP]: HasGroupChanged set to {0} for {1} {2}", m_hasGroupChanged, Name, LocalId); | 193 | // "[SCENE OBJECT GROUP]: HasGroupChanged set to {0} for {1} {2}", m_hasGroupChanged, Name, LocalId); |
194 | } | 194 | } |
@@ -197,7 +197,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
197 | } | 197 | } |
198 | 198 | ||
199 | private bool m_groupContainsForeignPrims = false; | 199 | private bool m_groupContainsForeignPrims = false; |
200 | 200 | ||
201 | /// <summary> | 201 | /// <summary> |
202 | /// Whether the group contains prims that came from a different group. This happens when | 202 | /// Whether the group contains prims that came from a different group. This happens when |
203 | /// linking or delinking groups. The implication is that until the group is persisted, | 203 | /// linking or delinking groups. The implication is that until the group is persisted, |
@@ -232,7 +232,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
232 | m_maxPersistTime = m_scene.m_persistAfter; | 232 | m_maxPersistTime = m_scene.m_persistAfter; |
233 | m_minPersistTime = m_scene.m_dontPersistBefore; | 233 | m_minPersistTime = m_scene.m_dontPersistBefore; |
234 | } | 234 | } |
235 | 235 | ||
236 | long currentTime = DateTime.UtcNow.Ticks; | 236 | long currentTime = DateTime.UtcNow.Ticks; |
237 | 237 | ||
238 | if (timeLastChanged == 0) timeLastChanged = currentTime; | 238 | if (timeLastChanged == 0) timeLastChanged = currentTime; |
@@ -419,7 +419,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
419 | // { | 419 | // { |
420 | // get { return m_rotation; } | 420 | // get { return m_rotation; } |
421 | // set { | 421 | // set { |
422 | // m_rotation = value; | 422 | // m_rotation = value; |
423 | // } | 423 | // } |
424 | // } | 424 | // } |
425 | 425 | ||
@@ -435,27 +435,27 @@ namespace OpenSim.Region.Framework.Scenes | |||
435 | Vector3 minScale = new Vector3(Constants.MaximumRegionSize, Constants.MaximumRegionSize, Constants.MaximumRegionSize); | 435 | Vector3 minScale = new Vector3(Constants.MaximumRegionSize, Constants.MaximumRegionSize, Constants.MaximumRegionSize); |
436 | Vector3 maxScale = Vector3.Zero; | 436 | Vector3 maxScale = Vector3.Zero; |
437 | Vector3 finalScale = new Vector3(0.5f, 0.5f, 0.5f); | 437 | Vector3 finalScale = new Vector3(0.5f, 0.5f, 0.5f); |
438 | 438 | ||
439 | SceneObjectPart[] parts = m_parts.GetArray(); | 439 | SceneObjectPart[] parts = m_parts.GetArray(); |
440 | for (int i = 0; i < parts.Length; i++) | 440 | for (int i = 0; i < parts.Length; i++) |
441 | { | 441 | { |
442 | SceneObjectPart part = parts[i]; | 442 | SceneObjectPart part = parts[i]; |
443 | Vector3 partscale = part.Scale; | 443 | Vector3 partscale = part.Scale; |
444 | Vector3 partoffset = part.OffsetPosition; | 444 | Vector3 partoffset = part.OffsetPosition; |
445 | 445 | ||
446 | minScale.X = (partscale.X + partoffset.X < minScale.X) ? partscale.X + partoffset.X : minScale.X; | 446 | minScale.X = (partscale.X + partoffset.X < minScale.X) ? partscale.X + partoffset.X : minScale.X; |
447 | minScale.Y = (partscale.Y + partoffset.Y < minScale.Y) ? partscale.Y + partoffset.Y : minScale.Y; | 447 | minScale.Y = (partscale.Y + partoffset.Y < minScale.Y) ? partscale.Y + partoffset.Y : minScale.Y; |
448 | minScale.Z = (partscale.Z + partoffset.Z < minScale.Z) ? partscale.Z + partoffset.Z : minScale.Z; | 448 | minScale.Z = (partscale.Z + partoffset.Z < minScale.Z) ? partscale.Z + partoffset.Z : minScale.Z; |
449 | 449 | ||
450 | maxScale.X = (partscale.X + partoffset.X > maxScale.X) ? partscale.X + partoffset.X : maxScale.X; | 450 | maxScale.X = (partscale.X + partoffset.X > maxScale.X) ? partscale.X + partoffset.X : maxScale.X; |
451 | maxScale.Y = (partscale.Y + partoffset.Y > maxScale.Y) ? partscale.Y + partoffset.Y : maxScale.Y; | 451 | maxScale.Y = (partscale.Y + partoffset.Y > maxScale.Y) ? partscale.Y + partoffset.Y : maxScale.Y; |
452 | maxScale.Z = (partscale.Z + partoffset.Z > maxScale.Z) ? partscale.Z + partoffset.Z : maxScale.Z; | 452 | maxScale.Z = (partscale.Z + partoffset.Z > maxScale.Z) ? partscale.Z + partoffset.Z : maxScale.Z; |
453 | } | 453 | } |
454 | 454 | ||
455 | finalScale.X = (minScale.X > maxScale.X) ? minScale.X : maxScale.X; | 455 | finalScale.X = (minScale.X > maxScale.X) ? minScale.X : maxScale.X; |
456 | finalScale.Y = (minScale.Y > maxScale.Y) ? minScale.Y : maxScale.Y; | 456 | finalScale.Y = (minScale.Y > maxScale.Y) ? minScale.Y : maxScale.Y; |
457 | finalScale.Z = (minScale.Z > maxScale.Z) ? minScale.Z : maxScale.Z; | 457 | finalScale.Z = (minScale.Z > maxScale.Z) ? minScale.Z : maxScale.Z; |
458 | 458 | ||
459 | return finalScale; | 459 | return finalScale; |
460 | } | 460 | } |
461 | } | 461 | } |
@@ -520,7 +520,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
520 | /// <remarks> | 520 | /// <remarks> |
521 | /// This is necessary in some cases, particularly when a scene object has just crossed into a region and doesn't | 521 | /// This is necessary in some cases, particularly when a scene object has just crossed into a region and doesn't |
522 | /// have the IsAttachment property yet checked. | 522 | /// have the IsAttachment property yet checked. |
523 | /// | 523 | /// |
524 | /// FIXME: However, this should be fixed so that this property | 524 | /// FIXME: However, this should be fixed so that this property |
525 | /// propertly reflects the underlying status. | 525 | /// propertly reflects the underlying status. |
526 | /// </remarks> | 526 | /// </remarks> |
@@ -530,7 +530,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
530 | return (IsAttachment || | 530 | return (IsAttachment || |
531 | (m_rootPart.Shape.PCode == (byte)PCodeEnum.Primitive && m_rootPart.Shape.State != 0)); | 531 | (m_rootPart.Shape.PCode == (byte)PCodeEnum.Primitive && m_rootPart.Shape.State != 0)); |
532 | } | 532 | } |
533 | 533 | ||
534 | private struct avtocrossInfo | 534 | private struct avtocrossInfo |
535 | { | 535 | { |
536 | public ScenePresence av; | 536 | public ScenePresence av; |
@@ -627,7 +627,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
627 | OpenSim.Services.Interfaces.GridRegion destination = null; | 627 | OpenSim.Services.Interfaces.GridRegion destination = null; |
628 | 628 | ||
629 | if (sog.RootPart.DIE_AT_EDGE) | 629 | if (sog.RootPart.DIE_AT_EDGE) |
630 | { | 630 | { |
631 | try | 631 | try |
632 | { | 632 | { |
633 | sogScene.DeleteSceneObject(sog, false); | 633 | sogScene.DeleteSceneObject(sog, false); |
@@ -648,7 +648,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
648 | localIDs.Add(sog.RootPart.LocalId); | 648 | localIDs.Add(sog.RootPart.LocalId); |
649 | sogScene.AddReturn(sog.OwnerID, sog.Name, sog.AbsolutePosition, | 649 | sogScene.AddReturn(sog.OwnerID, sog.Name, sog.AbsolutePosition, |
650 | "Returned at region cross"); | 650 | "Returned at region cross"); |
651 | sogScene.DeRezObjects(null, localIDs, UUID.Zero, DeRezAction.Return, UUID.Zero); | 651 | sogScene.DeRezObjects(null, localIDs, UUID.Zero, DeRezAction.Return, UUID.Zero); |
652 | } | 652 | } |
653 | catch (Exception) | 653 | catch (Exception) |
654 | { | 654 | { |
@@ -754,7 +754,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
754 | // avatar cross failed we need do dedicated standUp | 754 | // avatar cross failed we need do dedicated standUp |
755 | // part of it was done at CrossAgentToNewRegionAsync | 755 | // part of it was done at CrossAgentToNewRegionAsync |
756 | // so for now just remove the sog controls | 756 | // so for now just remove the sog controls |
757 | // this may need extra care | 757 | // this may need extra care |
758 | av.UnRegisterSeatControls(sog.UUID); | 758 | av.UnRegisterSeatControls(sog.UUID); |
759 | } | 759 | } |
760 | 760 | ||
@@ -869,7 +869,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
869 | public override UUID UUID | 869 | public override UUID UUID |
870 | { | 870 | { |
871 | get { return m_rootPart.UUID; } | 871 | get { return m_rootPart.UUID; } |
872 | set | 872 | set |
873 | { | 873 | { |
874 | lock (m_parts.SyncRoot) | 874 | lock (m_parts.SyncRoot) |
875 | { | 875 | { |
@@ -931,7 +931,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
931 | { | 931 | { |
932 | get { return true; } | 932 | get { return true; } |
933 | } | 933 | } |
934 | 934 | ||
935 | public bool IsSelected | 935 | public bool IsSelected |
936 | { | 936 | { |
937 | get { return m_isSelected; } | 937 | get { return m_isSelected; } |
@@ -944,7 +944,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
944 | // but ode engines should only really need to know about root part | 944 | // but ode engines should only really need to know about root part |
945 | // so they can put entire object simulation on hold and not colliding | 945 | // so they can put entire object simulation on hold and not colliding |
946 | // keep as was for now | 946 | // keep as was for now |
947 | 947 | ||
948 | PhysicsActor pa = m_rootPart.PhysActor; | 948 | PhysicsActor pa = m_rootPart.PhysActor; |
949 | if (pa != null) | 949 | if (pa != null) |
950 | { | 950 | { |
@@ -1107,7 +1107,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1107 | /// </summary> | 1107 | /// </summary> |
1108 | public SceneObjectGroup() | 1108 | public SceneObjectGroup() |
1109 | { | 1109 | { |
1110 | 1110 | ||
1111 | } | 1111 | } |
1112 | 1112 | ||
1113 | /// <summary> | 1113 | /// <summary> |
@@ -1152,7 +1152,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1152 | if (itemid != UUID.Zero) | 1152 | if (itemid != UUID.Zero) |
1153 | m_savedScriptState[itemid] = node.InnerXml; | 1153 | m_savedScriptState[itemid] = node.InnerXml; |
1154 | } | 1154 | } |
1155 | } | 1155 | } |
1156 | } | 1156 | } |
1157 | } | 1157 | } |
1158 | 1158 | ||
@@ -1211,11 +1211,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
1211 | 1211 | ||
1212 | if (!Backup) | 1212 | if (!Backup) |
1213 | m_scene.EventManager.OnBackup += ProcessBackup; | 1213 | m_scene.EventManager.OnBackup += ProcessBackup; |
1214 | 1214 | ||
1215 | Backup = true; | 1215 | Backup = true; |
1216 | } | 1216 | } |
1217 | } | 1217 | } |
1218 | 1218 | ||
1219 | /// <summary> | 1219 | /// <summary> |
1220 | /// Attach this object to a scene. It will also now appear to agents. | 1220 | /// Attach this object to a scene. It will also now appear to agents. |
1221 | /// </summary> | 1221 | /// </summary> |
@@ -1378,7 +1378,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1378 | backBottomRight.Y = orig.Y + (part.Scale.Y / 2); | 1378 | backBottomRight.Y = orig.Y + (part.Scale.Y / 2); |
1379 | backBottomRight.Z = orig.Z - (part.Scale.Z / 2); | 1379 | backBottomRight.Z = orig.Z - (part.Scale.Z / 2); |
1380 | 1380 | ||
1381 | 1381 | ||
1382 | 1382 | ||
1383 | //m_log.InfoFormat("pre corner 1 is {0} {1} {2}", frontTopLeft.X, frontTopLeft.Y, frontTopLeft.Z); | 1383 | //m_log.InfoFormat("pre corner 1 is {0} {1} {2}", frontTopLeft.X, frontTopLeft.Y, frontTopLeft.Z); |
1384 | //m_log.InfoFormat("pre corner 2 is {0} {1} {2}", frontTopRight.X, frontTopRight.Y, frontTopRight.Z); | 1384 | //m_log.InfoFormat("pre corner 2 is {0} {1} {2}", frontTopRight.X, frontTopRight.Y, frontTopRight.Z); |
@@ -1675,7 +1675,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1675 | } | 1675 | } |
1676 | 1676 | ||
1677 | int nparts = parts.Length; | 1677 | int nparts = parts.Length; |
1678 | 1678 | ||
1679 | 1679 | ||
1680 | for (int i = 0; i < nparts; i++) | 1680 | for (int i = 0; i < nparts; i++) |
1681 | { | 1681 | { |
@@ -1692,7 +1692,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1692 | { | 1692 | { |
1693 | linksetResCost = 0; | 1693 | linksetResCost = 0; |
1694 | linksetPhysCost = 0; | 1694 | linksetPhysCost = 0; |
1695 | partCost = 0; | 1695 | partCost = 0; |
1696 | partPhysCost = 0; | 1696 | partPhysCost = 0; |
1697 | 1697 | ||
1698 | for (int i = 0; i < nparts; i++) | 1698 | for (int i = 0; i < nparts; i++) |
@@ -1838,7 +1838,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1838 | else | 1838 | else |
1839 | { | 1839 | { |
1840 | m_log.WarnFormat( | 1840 | m_log.WarnFormat( |
1841 | "[SOG]: Tried to add attachment {0} to avatar with UUID {1} in region {2} but the avatar is not present", | 1841 | "[SOG]: Tried to add attachment {0} to avatar with UUID {1} in region {2} but the avatar is not present", |
1842 | UUID, avatar.ControllingClient.AgentId, Scene.RegionInfo.RegionName); | 1842 | UUID, avatar.ControllingClient.AgentId, Scene.RegionInfo.RegionName); |
1843 | } | 1843 | } |
1844 | } | 1844 | } |
@@ -1925,7 +1925,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1925 | { | 1925 | { |
1926 | return Utils.FloatToUInt16(m_scene.TimeDilation, 0.0f, 1.0f); | 1926 | return Utils.FloatToUInt16(m_scene.TimeDilation, 0.0f, 1.0f); |
1927 | } | 1927 | } |
1928 | 1928 | ||
1929 | /// <summary> | 1929 | /// <summary> |
1930 | /// Set a part to act as the root part for this scene object | 1930 | /// Set a part to act as the root part for this scene object |
1931 | /// </summary> | 1931 | /// </summary> |
@@ -1940,7 +1940,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1940 | if (!IsAttachment) | 1940 | if (!IsAttachment) |
1941 | part.ParentID = 0; | 1941 | part.ParentID = 0; |
1942 | part.LinkNum = 0; | 1942 | part.LinkNum = 0; |
1943 | 1943 | ||
1944 | m_parts.Add(m_rootPart.UUID, m_rootPart); | 1944 | m_parts.Add(m_rootPart.UUID, m_rootPart); |
1945 | } | 1945 | } |
1946 | 1946 | ||
@@ -1991,19 +1991,19 @@ namespace OpenSim.Region.Framework.Scenes | |||
1991 | // justincc: I don't believe this hack is needed any longer, especially since the physics | 1991 | // justincc: I don't believe this hack is needed any longer, especially since the physics |
1992 | // parts of set AbsolutePosition were already commented out. By changing HasGroupChanged to false | 1992 | // parts of set AbsolutePosition were already commented out. By changing HasGroupChanged to false |
1993 | // this method was preventing proper reload of scene objects. | 1993 | // this method was preventing proper reload of scene objects. |
1994 | 1994 | ||
1995 | // dahlia: I had to uncomment it, without it meshing was failing on some prims and objects | 1995 | // dahlia: I had to uncomment it, without it meshing was failing on some prims and objects |
1996 | // at region startup | 1996 | // at region startup |
1997 | 1997 | ||
1998 | // teravus: After this was removed from the linking algorithm, Linked prims no longer collided | 1998 | // teravus: After this was removed from the linking algorithm, Linked prims no longer collided |
1999 | // properly when non-physical if they havn't been moved. This breaks ALL builds. | 1999 | // properly when non-physical if they havn't been moved. This breaks ALL builds. |
2000 | // see: http://opensimulator.org/mantis/view.php?id=3108 | 2000 | // see: http://opensimulator.org/mantis/view.php?id=3108 |
2001 | 2001 | ||
2002 | // Here's the deal, this is ABSOLUTELY CRITICAL so the physics scene gets the update about the | 2002 | // Here's the deal, this is ABSOLUTELY CRITICAL so the physics scene gets the update about the |
2003 | // position of linkset prims. IF YOU CHANGE THIS, YOU MUST TEST colliding with just linked and | 2003 | // position of linkset prims. IF YOU CHANGE THIS, YOU MUST TEST colliding with just linked and |
2004 | // unmoved prims! As soon as you move a Prim/group, it will collide properly because Absolute | 2004 | // unmoved prims! As soon as you move a Prim/group, it will collide properly because Absolute |
2005 | // Position has been set! | 2005 | // Position has been set! |
2006 | 2006 | ||
2007 | public void ResetChildPrimPhysicsPositions() | 2007 | public void ResetChildPrimPhysicsPositions() |
2008 | { | 2008 | { |
2009 | // Setting this SOG's absolute position also loops through and sets the positions | 2009 | // Setting this SOG's absolute position also loops through and sets the positions |
@@ -2219,9 +2219,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
2219 | 2219 | ||
2220 | if (m_rootPart.PhysActor != null) | 2220 | if (m_rootPart.PhysActor != null) |
2221 | m_rootPart.PhysActor.Building = false; | 2221 | m_rootPart.PhysActor.Building = false; |
2222 | } | 2222 | } |
2223 | else | 2223 | else |
2224 | { | 2224 | { |
2225 | // Apply physics to the root prim | 2225 | // Apply physics to the root prim |
2226 | m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_rootPart.VolumeDetectActive, false); | 2226 | m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_rootPart.VolumeDetectActive, false); |
2227 | } | 2227 | } |
@@ -2309,7 +2309,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2309 | 2309 | ||
2310 | DetachFromBackup(); | 2310 | DetachFromBackup(); |
2311 | m_log.DebugFormat( | 2311 | m_log.DebugFormat( |
2312 | "[SCENE OBJECT GROUP]: Returning object {0} due to parcel autoreturn", | 2312 | "[SCENE OBJECT GROUP]: Returning object {0} due to parcel autoreturn", |
2313 | RootPart.UUID); | 2313 | RootPart.UUID); |
2314 | m_scene.AddReturn(OwnerID == GroupID ? LastOwnerID : OwnerID, Name, AbsolutePosition, "parcel autoreturn"); | 2314 | m_scene.AddReturn(OwnerID == GroupID ? LastOwnerID : OwnerID, Name, AbsolutePosition, "parcel autoreturn"); |
2315 | m_scene.DeRezObjects(null, new List<uint>() { RootPart.LocalId }, UUID.Zero, | 2315 | m_scene.DeRezObjects(null, new List<uint>() { RootPart.LocalId }, UUID.Zero, |
@@ -2364,9 +2364,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
2364 | 2364 | ||
2365 | datastore.StoreObject(backup_group, m_scene.RegionInfo.RegionID); | 2365 | datastore.StoreObject(backup_group, m_scene.RegionInfo.RegionID); |
2366 | 2366 | ||
2367 | backup_group.ForEachPart(delegate(SceneObjectPart part) | 2367 | backup_group.ForEachPart(delegate(SceneObjectPart part) |
2368 | { | 2368 | { |
2369 | part.Inventory.ProcessInventoryBackup(datastore); | 2369 | part.Inventory.ProcessInventoryBackup(datastore); |
2370 | 2370 | ||
2371 | if(part.KeyframeMotion != null) | 2371 | if(part.KeyframeMotion != null) |
2372 | { | 2372 | { |
@@ -2389,7 +2389,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2389 | catch (Exception e) | 2389 | catch (Exception e) |
2390 | { | 2390 | { |
2391 | m_log.ErrorFormat( | 2391 | m_log.ErrorFormat( |
2392 | "[SCENE]: Storing of {0}, {1} in {2} failed with exception {3}{4}", | 2392 | "[SCENE]: Storing of {0}, {1} in {2} failed with exception {3}{4}", |
2393 | Name, UUID, m_scene.RegionInfo.RegionName, e.Message, e.StackTrace); | 2393 | Name, UUID, m_scene.RegionInfo.RegionName, e.Message, e.StackTrace); |
2394 | } | 2394 | } |
2395 | } | 2395 | } |
@@ -2427,22 +2427,22 @@ namespace OpenSim.Region.Framework.Scenes | |||
2427 | { | 2427 | { |
2428 | m_dupeInProgress = true; | 2428 | m_dupeInProgress = true; |
2429 | SceneObjectGroup dupe = (SceneObjectGroup)MemberwiseClone(); | 2429 | SceneObjectGroup dupe = (SceneObjectGroup)MemberwiseClone(); |
2430 | 2430 | ||
2431 | dupe.m_parts = new MapAndArray<OpenMetaverse.UUID, SceneObjectPart>(); | 2431 | dupe.m_parts = new MapAndArray<OpenMetaverse.UUID, SceneObjectPart>(); |
2432 | 2432 | ||
2433 | // a copy isnt backedup | 2433 | // a copy isnt backedup |
2434 | dupe.Backup = false; | 2434 | dupe.Backup = false; |
2435 | dupe.InvalidBoundsRadius(); | 2435 | dupe.InvalidBoundsRadius(); |
2436 | 2436 | ||
2437 | // a copy is not in transit hopefully | 2437 | // a copy is not in transit hopefully |
2438 | dupe.inTransit = false; | 2438 | dupe.inTransit = false; |
2439 | 2439 | ||
2440 | // new group as no sitting avatars | 2440 | // new group as no sitting avatars |
2441 | dupe.m_sittingAvatars = new List<ScenePresence>(); | 2441 | dupe.m_sittingAvatars = new List<ScenePresence>(); |
2442 | 2442 | ||
2443 | dupe.CopyRootPart(m_rootPart, OwnerID, GroupID, userExposed); | 2443 | dupe.CopyRootPart(m_rootPart, OwnerID, GroupID, userExposed); |
2444 | dupe.m_rootPart.LinkNum = m_rootPart.LinkNum; | 2444 | dupe.m_rootPart.LinkNum = m_rootPart.LinkNum; |
2445 | 2445 | ||
2446 | 2446 | ||
2447 | if (userExposed) | 2447 | if (userExposed) |
2448 | dupe.m_rootPart.TrimPermissions(); | 2448 | dupe.m_rootPart.TrimPermissions(); |
@@ -2587,7 +2587,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2587 | 2587 | ||
2588 | if (pa != null) | 2588 | if (pa != null) |
2589 | { | 2589 | { |
2590 | // false to be applied as a impulse | 2590 | // false to be applied as a impulse |
2591 | pa.AddForce(impulse, false); | 2591 | pa.AddForce(impulse, false); |
2592 | m_scene.PhysicsScene.AddPhysicsActorTaint(pa); | 2592 | m_scene.PhysicsScene.AddPhysicsActorTaint(pa); |
2593 | } | 2593 | } |
@@ -2723,7 +2723,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2723 | if(IsAttachment) | 2723 | if(IsAttachment) |
2724 | { | 2724 | { |
2725 | ScenePresence avatar = m_scene.GetScenePresence(AttachedAvatar); | 2725 | ScenePresence avatar = m_scene.GetScenePresence(AttachedAvatar); |
2726 | if (avatar != null) | 2726 | if (avatar != null) |
2727 | pa = avatar.PhysicsActor; | 2727 | pa = avatar.PhysicsActor; |
2728 | } | 2728 | } |
2729 | else | 2729 | else |
@@ -2813,7 +2813,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2813 | public void ServiceObjectPropertiesFamilyRequest(IClientAPI remoteClient, UUID AgentID, uint RequestFlags) | 2813 | public void ServiceObjectPropertiesFamilyRequest(IClientAPI remoteClient, UUID AgentID, uint RequestFlags) |
2814 | { | 2814 | { |
2815 | remoteClient.SendObjectPropertiesFamilyData(RootPart, RequestFlags); | 2815 | remoteClient.SendObjectPropertiesFamilyData(RootPart, RequestFlags); |
2816 | 2816 | ||
2817 | // remoteClient.SendObjectPropertiesFamilyData(RequestFlags, RootPart.UUID, RootPart.OwnerID, RootPart.GroupID, RootPart.BaseMask, | 2817 | // remoteClient.SendObjectPropertiesFamilyData(RequestFlags, RootPart.UUID, RootPart.OwnerID, RootPart.GroupID, RootPart.BaseMask, |
2818 | // RootPart.OwnerMask, RootPart.GroupMask, RootPart.EveryoneMask, RootPart.NextOwnerMask, | 2818 | // RootPart.OwnerMask, RootPart.GroupMask, RootPart.EveryoneMask, RootPart.NextOwnerMask, |
2819 | // RootPart.OwnershipCost, RootPart.ObjectSaleType, RootPart.SalePrice, RootPart.Category, | 2819 | // RootPart.OwnershipCost, RootPart.ObjectSaleType, RootPart.SalePrice, RootPart.Category, |
@@ -2844,7 +2844,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2844 | // return; | 2844 | // return; |
2845 | 2845 | ||
2846 | // If we somehow got here to updating the SOG and its root part is not scheduled for update, | 2846 | // If we somehow got here to updating the SOG and its root part is not scheduled for update, |
2847 | // check to see if the physical position or rotation warrant an update. | 2847 | // check to see if the physical position or rotation warrant an update. |
2848 | if (m_rootPart.UpdateFlag == UpdateRequired.NONE) | 2848 | if (m_rootPart.UpdateFlag == UpdateRequired.NONE) |
2849 | { | 2849 | { |
2850 | // rootpart SendScheduledUpdates will check if a update is needed | 2850 | // rootpart SendScheduledUpdates will check if a update is needed |
@@ -2885,7 +2885,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2885 | { | 2885 | { |
2886 | // if (IsAttachment) | 2886 | // if (IsAttachment) |
2887 | // m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1}", Name, LocalId); | 2887 | // m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1}", Name, LocalId); |
2888 | 2888 | ||
2889 | checkAtTargets(); | 2889 | checkAtTargets(); |
2890 | RootPart.ScheduleFullUpdate(); | 2890 | RootPart.ScheduleFullUpdate(); |
2891 | 2891 | ||
@@ -2919,11 +2919,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
2919 | /// Immediately send a full update for this scene object. | 2919 | /// Immediately send a full update for this scene object. |
2920 | /// </summary> | 2920 | /// </summary> |
2921 | public void SendGroupFullUpdate() | 2921 | public void SendGroupFullUpdate() |
2922 | { | 2922 | { |
2923 | if (IsDeleted) | 2923 | if (IsDeleted) |
2924 | return; | 2924 | return; |
2925 | 2925 | ||
2926 | // m_log.DebugFormat("[SOG]: Sending immediate full group update for {0} {1}", Name, UUID); | 2926 | // m_log.DebugFormat("[SOG]: Sending immediate full group update for {0} {1}", Name, UUID); |
2927 | 2927 | ||
2928 | if (IsAttachment) | 2928 | if (IsAttachment) |
2929 | { | 2929 | { |
@@ -2964,7 +2964,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2964 | { | 2964 | { |
2965 | if (m_scene == null) // Need to check here as it's null during object creation | 2965 | if (m_scene == null) // Need to check here as it's null during object creation |
2966 | return; | 2966 | return; |
2967 | 2967 | ||
2968 | m_scene.SceneGraph.AddToUpdateList(this); | 2968 | m_scene.SceneGraph.AddToUpdateList(this); |
2969 | } | 2969 | } |
2970 | 2970 | ||
@@ -3139,7 +3139,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3139 | Vector3 oldGroupPosition = linkPart.GroupPosition; | 3139 | Vector3 oldGroupPosition = linkPart.GroupPosition; |
3140 | Quaternion oldRootRotation = linkPart.RotationOffset; | 3140 | Quaternion oldRootRotation = linkPart.RotationOffset; |
3141 | 3141 | ||
3142 | // A linked SOP remembers its location and rotation relative to the root of a group. | 3142 | // A linked SOP remembers its location and rotation relative to the root of a group. |
3143 | // Convert the root of the group being linked to be relative to the | 3143 | // Convert the root of the group being linked to be relative to the |
3144 | // root of the group being linked to. | 3144 | // root of the group being linked to. |
3145 | // Note: Some of the assignments have complex side effects. | 3145 | // Note: Some of the assignments have complex side effects. |
@@ -3247,7 +3247,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3247 | objectGroup.IsDeleted = true; | 3247 | objectGroup.IsDeleted = true; |
3248 | 3248 | ||
3249 | objectGroup.m_parts.Clear(); | 3249 | objectGroup.m_parts.Clear(); |
3250 | 3250 | ||
3251 | // Can't do this yet since backup still makes use of the root part without any synchronization | 3251 | // Can't do this yet since backup still makes use of the root part without any synchronization |
3252 | // objectGroup.m_rootPart = null; | 3252 | // objectGroup.m_rootPart = null; |
3253 | 3253 | ||
@@ -3258,8 +3258,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
3258 | 3258 | ||
3259 | AttachToBackup(); | 3259 | AttachToBackup(); |
3260 | 3260 | ||
3261 | // Here's the deal, this is ABSOLUTELY CRITICAL so the physics scene gets the update about the | 3261 | // Here's the deal, this is ABSOLUTELY CRITICAL so the physics scene gets the update about the |
3262 | // position of linkset prims. IF YOU CHANGE THIS, YOU MUST TEST colliding with just linked and | 3262 | // position of linkset prims. IF YOU CHANGE THIS, YOU MUST TEST colliding with just linked and |
3263 | // unmoved prims! | 3263 | // unmoved prims! |
3264 | ResetChildPrimPhysicsPositions(); | 3264 | ResetChildPrimPhysicsPositions(); |
3265 | 3265 | ||
@@ -3453,7 +3453,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3453 | lock (m_parts.SyncRoot) | 3453 | lock (m_parts.SyncRoot) |
3454 | if(!m_parts.Remove(linkPart.UUID)) | 3454 | if(!m_parts.Remove(linkPart.UUID)) |
3455 | continue; | 3455 | continue; |
3456 | 3456 | ||
3457 | linkPart.ClearUndoState(); | 3457 | linkPart.ClearUndoState(); |
3458 | 3458 | ||
3459 | Vector3 worldPos = linkPart.GetWorldPosition(); | 3459 | Vector3 worldPos = linkPart.GetWorldPosition(); |
@@ -3580,7 +3580,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3580 | part.setOffsetPosition(newPos - AbsolutePosition); | 3580 | part.setOffsetPosition(newPos - AbsolutePosition); |
3581 | 3581 | ||
3582 | // (radams1 20120711: I don't know why part.OffsetPosition is set multiple times. | 3582 | // (radams1 20120711: I don't know why part.OffsetPosition is set multiple times. |
3583 | // It would have the affect of setting the physics engine position multiple | 3583 | // It would have the affect of setting the physics engine position multiple |
3584 | // times. In theory, that is not necessary but I don't have a good linkset | 3584 | // times. In theory, that is not necessary but I don't have a good linkset |
3585 | // test to know that cleaning up this code wouldn't break things.) | 3585 | // test to know that cleaning up this code wouldn't break things.) |
3586 | 3586 | ||
@@ -3685,29 +3685,29 @@ namespace OpenSim.Region.Framework.Scenes | |||
3685 | /// <param name="remoteClient"></param> | 3685 | /// <param name="remoteClient"></param> |
3686 | public void SpinMovement(Quaternion newOrientation, IClientAPI remoteClient) | 3686 | public void SpinMovement(Quaternion newOrientation, IClientAPI remoteClient) |
3687 | { | 3687 | { |
3688 | // The incoming newOrientation, sent by the client, "seems" to be the | 3688 | // The incoming newOrientation, sent by the client, "seems" to be the |
3689 | // desired target orientation. This needs further verification; in particular, | 3689 | // desired target orientation. This needs further verification; in particular, |
3690 | // one would expect that the initial incoming newOrientation should be | 3690 | // one would expect that the initial incoming newOrientation should be |
3691 | // fairly close to the original prim's physical orientation, | 3691 | // fairly close to the original prim's physical orientation, |
3692 | // m_rootPart.PhysActor.Orientation. This however does not seem to be the | 3692 | // m_rootPart.PhysActor.Orientation. This however does not seem to be the |
3693 | // case (might just be an issue with different quaternions representing the | 3693 | // case (might just be an issue with different quaternions representing the |
3694 | // same rotation, or it might be a coordinate system issue). | 3694 | // same rotation, or it might be a coordinate system issue). |
3695 | // | 3695 | // |
3696 | // Since it's not clear what the relationship is between the PhysActor.Orientation | 3696 | // Since it's not clear what the relationship is between the PhysActor.Orientation |
3697 | // and the incoming orientations sent by the client, we take an alternative approach | 3697 | // and the incoming orientations sent by the client, we take an alternative approach |
3698 | // of calculating the delta rotation between the orientations being sent by the | 3698 | // of calculating the delta rotation between the orientations being sent by the |
3699 | // client. (Since a spin is invoked by ctrl+shift+drag in the client, we expect | 3699 | // client. (Since a spin is invoked by ctrl+shift+drag in the client, we expect |
3700 | // a steady stream of several new orientations coming in from the client.) | 3700 | // a steady stream of several new orientations coming in from the client.) |
3701 | // This ensures that the delta rotations are being calculated from self-consistent | 3701 | // This ensures that the delta rotations are being calculated from self-consistent |
3702 | // pairs of old/new rotations. Given the delta rotation, we apply a torque around | 3702 | // pairs of old/new rotations. Given the delta rotation, we apply a torque around |
3703 | // the delta rotation axis, scaled by the object mass times an arbitrary scaling | 3703 | // the delta rotation axis, scaled by the object mass times an arbitrary scaling |
3704 | // factor (to ensure the resulting torque is not "too strong" or "too weak"). | 3704 | // factor (to ensure the resulting torque is not "too strong" or "too weak"). |
3705 | // | 3705 | // |
3706 | // Ideally we need to calculate (probably iteratively) the exact torque or series | 3706 | // Ideally we need to calculate (probably iteratively) the exact torque or series |
3707 | // of torques needed to arrive exactly at the destination orientation. However, since | 3707 | // of torques needed to arrive exactly at the destination orientation. However, since |
3708 | // it is not yet clear how to map the destination orientation (provided by the viewer) | 3708 | // it is not yet clear how to map the destination orientation (provided by the viewer) |
3709 | // into PhysActor orientations (needed by the physics engine), we omit this step. | 3709 | // into PhysActor orientations (needed by the physics engine), we omit this step. |
3710 | // This means that the resulting torque will at least be in the correct direction, | 3710 | // This means that the resulting torque will at least be in the correct direction, |
3711 | // but it will result in over-shoot or under-shoot of the target orientation. | 3711 | // but it will result in over-shoot or under-shoot of the target orientation. |
3712 | // For the end user, this means that ctrl+shift+drag can be used for relative, | 3712 | // For the end user, this means that ctrl+shift+drag can be used for relative, |
3713 | // but not absolute, adjustments of orientation for physical prims. | 3713 | // but not absolute, adjustments of orientation for physical prims. |
@@ -3750,7 +3750,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3750 | if(rotationAngle > 0) | 3750 | if(rotationAngle > 0) |
3751 | spinforce = spinforce * pa.Mass * 0.1f; // 0.1 is an arbitrary torque scaling factor | 3751 | spinforce = spinforce * pa.Mass * 0.1f; // 0.1 is an arbitrary torque scaling factor |
3752 | else | 3752 | else |
3753 | spinforce = spinforce * pa.Mass * -0.1f; // 0.1 is an arbitrary torque scaling | 3753 | spinforce = spinforce * pa.Mass * -0.1f; // 0.1 is an arbitrary torque scaling |
3754 | pa.AddAngularForce(spinforce,true); | 3754 | pa.AddAngularForce(spinforce,true); |
3755 | m_scene.PhysicsScene.AddPhysicsActorTaint(pa); | 3755 | m_scene.PhysicsScene.AddPhysicsActorTaint(pa); |
3756 | } | 3756 | } |
@@ -3870,8 +3870,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
3870 | if (selectionPart != null) | 3870 | if (selectionPart != null) |
3871 | { | 3871 | { |
3872 | SceneObjectPart[] parts = m_parts.GetArray(); | 3872 | SceneObjectPart[] parts = m_parts.GetArray(); |
3873 | 3873 | ||
3874 | if (Scene != null && UsePhysics) | 3874 | if (Scene != null && UsePhysics) |
3875 | { | 3875 | { |
3876 | int maxprims = m_scene.m_linksetPhysCapacity; | 3876 | int maxprims = m_scene.m_linksetPhysCapacity; |
3877 | bool checkShape = (maxprims > 0 && | 3877 | bool checkShape = (maxprims > 0 && |
@@ -3975,7 +3975,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3975 | RootPart.OwnerMask = (RootPart.OwnerMask & lockBit) | ((newOwnerMask | foldedPerms) & lockMask); | 3975 | RootPart.OwnerMask = (RootPart.OwnerMask & lockBit) | ((newOwnerMask | foldedPerms) & lockMask); |
3976 | 3976 | ||
3977 | // m_log.DebugFormat( | 3977 | // m_log.DebugFormat( |
3978 | // "[SCENE OBJECT GROUP]: RootPart.OwnerMask now {0} for {1} in {2}", | 3978 | // "[SCENE OBJECT GROUP]: RootPart.OwnerMask now {0} for {1} in {2}", |
3979 | // (OpenMetaverse.PermissionMask)RootPart.OwnerMask, Name, Scene.Name); | 3979 | // (OpenMetaverse.PermissionMask)RootPart.OwnerMask, Name, Scene.Name); |
3980 | 3980 | ||
3981 | RootPart.ScheduleFullUpdate(); | 3981 | RootPart.ScheduleFullUpdate(); |
@@ -4273,7 +4273,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4273 | { | 4273 | { |
4274 | if (Scene == null || IsDeleted || inTransit) | 4274 | if (Scene == null || IsDeleted || inTransit) |
4275 | return 1.0f; | 4275 | return 1.0f; |
4276 | 4276 | ||
4277 | float maxsize = Scene.m_maxNonphys; | 4277 | float maxsize = Scene.m_maxNonphys; |
4278 | PhysicsActor pa = m_rootPart.PhysActor; | 4278 | PhysicsActor pa = m_rootPart.PhysActor; |
4279 | // assuming physics is more restrictive | 4279 | // assuming physics is more restrictive |
@@ -4282,7 +4282,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4282 | 4282 | ||
4283 | SceneObjectPart[] parts = m_parts.GetArray(); | 4283 | SceneObjectPart[] parts = m_parts.GetArray(); |
4284 | float larger = float.MinValue; | 4284 | float larger = float.MinValue; |
4285 | 4285 | ||
4286 | for(int i = 0; i < parts.Length; i++) | 4286 | for(int i = 0; i < parts.Length; i++) |
4287 | { | 4287 | { |
4288 | SceneObjectPart obPart = parts[i]; | 4288 | SceneObjectPart obPart = parts[i]; |
@@ -4310,7 +4310,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4310 | { | 4310 | { |
4311 | if (Scene == null || IsDeleted || inTransit) | 4311 | if (Scene == null || IsDeleted || inTransit) |
4312 | return 1.0f; | 4312 | return 1.0f; |
4313 | 4313 | ||
4314 | float minsize = Scene.m_minNonphys; | 4314 | float minsize = Scene.m_minNonphys; |
4315 | PhysicsActor pa = m_rootPart.PhysActor; | 4315 | PhysicsActor pa = m_rootPart.PhysActor; |
4316 | // assuming physics is more restrictive | 4316 | // assuming physics is more restrictive |
@@ -4319,7 +4319,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4319 | 4319 | ||
4320 | SceneObjectPart[] parts = m_parts.GetArray(); | 4320 | SceneObjectPart[] parts = m_parts.GetArray(); |
4321 | float smaller = float.MaxValue; | 4321 | float smaller = float.MaxValue; |
4322 | 4322 | ||
4323 | for(int i = 0; i < parts.Length; i++) | 4323 | for(int i = 0; i < parts.Length; i++) |
4324 | { | 4324 | { |
4325 | SceneObjectPart obPart = parts[i]; | 4325 | SceneObjectPart obPart = parts[i]; |
@@ -4388,7 +4388,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4388 | /// </summary> | 4388 | /// </summary> |
4389 | /// <param name="pos"></param> | 4389 | /// <param name="pos"></param> |
4390 | /// <param name="localID"></param> | 4390 | /// <param name="localID"></param> |
4391 | /// | 4391 | /// |
4392 | 4392 | ||
4393 | public void UpdateSinglePosition(Vector3 pos, uint localID) | 4393 | public void UpdateSinglePosition(Vector3 pos, uint localID) |
4394 | { | 4394 | { |
@@ -4443,7 +4443,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4443 | } | 4443 | } |
4444 | 4444 | ||
4445 | AbsolutePosition = newPos; | 4445 | AbsolutePosition = newPos; |
4446 | 4446 | ||
4447 | if (IsAttachment) | 4447 | if (IsAttachment) |
4448 | m_rootPart.AttachedPos = newPos; | 4448 | m_rootPart.AttachedPos = newPos; |
4449 | 4449 | ||
@@ -4469,7 +4469,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4469 | public void UpdateGroupRotationR(Quaternion rot) | 4469 | public void UpdateGroupRotationR(Quaternion rot) |
4470 | { | 4470 | { |
4471 | m_rootPart.UpdateRotation(rot); | 4471 | m_rootPart.UpdateRotation(rot); |
4472 | 4472 | ||
4473 | /* this is done by rootpart RotationOffset set called by UpdateRotation | 4473 | /* this is done by rootpart RotationOffset set called by UpdateRotation |
4474 | PhysicsActor actor = m_rootPart.PhysActor; | 4474 | PhysicsActor actor = m_rootPart.PhysActor; |
4475 | if (actor != null) | 4475 | if (actor != null) |
@@ -4747,7 +4747,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4747 | if (setX || setY || setZ) | 4747 | if (setX || setY || setZ) |
4748 | { | 4748 | { |
4749 | bool lockaxis = (rotate10 == 0); // zero means axis locked | 4749 | bool lockaxis = (rotate10 == 0); // zero means axis locked |
4750 | 4750 | ||
4751 | byte locks = RootPart.RotationAxisLocks; | 4751 | byte locks = RootPart.RotationAxisLocks; |
4752 | 4752 | ||
4753 | if (setX) | 4753 | if (setX) |
@@ -4757,7 +4757,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4757 | else | 4757 | else |
4758 | locks &= (byte)SceneObjectGroup.axisSelect.NOT_STATUS_ROTATE_X; | 4758 | locks &= (byte)SceneObjectGroup.axisSelect.NOT_STATUS_ROTATE_X; |
4759 | } | 4759 | } |
4760 | 4760 | ||
4761 | if (setY) | 4761 | if (setY) |
4762 | { | 4762 | { |
4763 | if(lockaxis) | 4763 | if(lockaxis) |
@@ -4791,7 +4791,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4791 | if (axis == (int)SceneObjectGroup.axisSelect.STATUS_ROTATE_X) | 4791 | if (axis == (int)SceneObjectGroup.axisSelect.STATUS_ROTATE_X) |
4792 | return (rotAxislocks & (byte)SceneObjectGroup.axisSelect.STATUS_ROTATE_X) == 0 ? 1:0; | 4792 | return (rotAxislocks & (byte)SceneObjectGroup.axisSelect.STATUS_ROTATE_X) == 0 ? 1:0; |
4793 | 4793 | ||
4794 | return 0; | 4794 | return 0; |
4795 | } | 4795 | } |
4796 | 4796 | ||
4797 | public int registerRotTargetWaypoint(Quaternion target, float tolerance) | 4797 | public int registerRotTargetWaypoint(Quaternion target, float tolerance) |
@@ -4837,7 +4837,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4837 | m_scene.AddGroupTarget(this); | 4837 | m_scene.AddGroupTarget(this); |
4838 | return (int)handle; | 4838 | return (int)handle; |
4839 | } | 4839 | } |
4840 | 4840 | ||
4841 | public void unregisterTargetWaypoint(int handle) | 4841 | public void unregisterTargetWaypoint(int handle) |
4842 | { | 4842 | { |
4843 | lock (m_targets) | 4843 | lock (m_targets) |
@@ -4879,14 +4879,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
4879 | } | 4879 | } |
4880 | } | 4880 | } |
4881 | } | 4881 | } |
4882 | 4882 | ||
4883 | if (atTargets.Count > 0) | 4883 | if (atTargets.Count > 0) |
4884 | { | 4884 | { |
4885 | SceneObjectPart[] parts = m_parts.GetArray(); | 4885 | SceneObjectPart[] parts = m_parts.GetArray(); |
4886 | uint[] localids = new uint[parts.Length]; | 4886 | uint[] localids = new uint[parts.Length]; |
4887 | for (int i = 0; i < parts.Length; i++) | 4887 | for (int i = 0; i < parts.Length; i++) |
4888 | localids[i] = parts[i].LocalId; | 4888 | localids[i] = parts[i].LocalId; |
4889 | 4889 | ||
4890 | for (int ctr = 0; ctr < localids.Length; ctr++) | 4890 | for (int ctr = 0; ctr < localids.Length; ctr++) |
4891 | { | 4891 | { |
4892 | foreach (uint target in atTargets.Keys) | 4892 | foreach (uint target in atTargets.Keys) |
@@ -4896,10 +4896,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
4896 | localids[ctr], att.handle, att.targetPos, m_rootPart.GroupPosition); | 4896 | localids[ctr], att.handle, att.targetPos, m_rootPart.GroupPosition); |
4897 | } | 4897 | } |
4898 | } | 4898 | } |
4899 | 4899 | ||
4900 | return; | 4900 | return; |
4901 | } | 4901 | } |
4902 | 4902 | ||
4903 | if (m_scriptListens_notAtTarget && !at_target) | 4903 | if (m_scriptListens_notAtTarget && !at_target) |
4904 | { | 4904 | { |
4905 | //trigger not_at_target | 4905 | //trigger not_at_target |
@@ -4907,7 +4907,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4907 | uint[] localids = new uint[parts.Length]; | 4907 | uint[] localids = new uint[parts.Length]; |
4908 | for (int i = 0; i < parts.Length; i++) | 4908 | for (int i = 0; i < parts.Length; i++) |
4909 | localids[i] = parts[i].LocalId; | 4909 | localids[i] = parts[i].LocalId; |
4910 | 4910 | ||
4911 | for (int ctr = 0; ctr < localids.Length; ctr++) | 4911 | for (int ctr = 0; ctr < localids.Length; ctr++) |
4912 | { | 4912 | { |
4913 | m_scene.EventManager.TriggerNotAtTargetEvent(localids[ctr]); | 4913 | m_scene.EventManager.TriggerNotAtTargetEvent(localids[ctr]); |
@@ -4994,7 +4994,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4994 | // http://wiki.secondlife.com/wiki/llGetGeometricCenter | 4994 | // http://wiki.secondlife.com/wiki/llGetGeometricCenter |
4995 | // ignoring tortured prims details since sl also seems to ignore | 4995 | // ignoring tortured prims details since sl also seems to ignore |
4996 | // so no real use in doing it on physics | 4996 | // so no real use in doing it on physics |
4997 | 4997 | ||
4998 | Vector3 gc = Vector3.Zero; | 4998 | Vector3 gc = Vector3.Zero; |
4999 | 4999 | ||
5000 | SceneObjectPart[] parts = m_parts.GetArray(); | 5000 | SceneObjectPart[] parts = m_parts.GetArray(); |
@@ -5034,7 +5034,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
5034 | Vector3 tmp = pa.CenterOfMass; | 5034 | Vector3 tmp = pa.CenterOfMass; |
5035 | return tmp; | 5035 | return tmp; |
5036 | } | 5036 | } |
5037 | 5037 | ||
5038 | Vector3 Ptot = Vector3.Zero; | 5038 | Vector3 Ptot = Vector3.Zero; |
5039 | float totmass = 0f; | 5039 | float totmass = 0f; |
5040 | float m; | 5040 | float m; |
@@ -5072,7 +5072,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
5072 | } | 5072 | } |
5073 | 5073 | ||
5074 | HasGroupChanged = true; | 5074 | HasGroupChanged = true; |
5075 | 5075 | ||
5076 | // Don't trigger the update here - otherwise some client issues occur when multiple updates are scheduled | 5076 | // Don't trigger the update here - otherwise some client issues occur when multiple updates are scheduled |
5077 | // for the same object with very different properties. The caller must schedule the update. | 5077 | // for the same object with very different properties. The caller must schedule the update. |
5078 | //ScheduleGroupForFullUpdate(); | 5078 | //ScheduleGroupForFullUpdate(); |