diff options
author | Melanie Thielker | 2008-10-18 05:51:36 +0000 |
---|---|---|
committer | Melanie Thielker | 2008-10-18 05:51:36 +0000 |
commit | efe3f3eb2a0a31b1da474974c7d8193c2b28e13f (patch) | |
tree | df1d30ad2f9230ea4e8fbfd1e6368d539600c785 /OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs | |
parent | * Fix an over compensation for bounciness on flat Primitive (diff) | |
download | opensim-SC_OLD-efe3f3eb2a0a31b1da474974c7d8193c2b28e13f.zip opensim-SC_OLD-efe3f3eb2a0a31b1da474974c7d8193c2b28e13f.tar.gz opensim-SC_OLD-efe3f3eb2a0a31b1da474974c7d8193c2b28e13f.tar.bz2 opensim-SC_OLD-efe3f3eb2a0a31b1da474974c7d8193c2b28e13f.tar.xz |
Megapatch. :) Fix skull attachment editing. Streamline Object terse updates.
Add rezzing time to objects. Add Object return and traffic fields to land
database. Add plumbing for auto return. Implement auto return.
Contains a migration. May contain nuts.
Diffstat (limited to 'OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs')
-rw-r--r-- | OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs | 72 |
1 files changed, 40 insertions, 32 deletions
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs index 8c5afab..60cf061 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs | |||
@@ -99,6 +99,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
99 | private Vector3 lastPhysGroupPos; | 99 | private Vector3 lastPhysGroupPos; |
100 | private Quaternion lastPhysGroupRot; | 100 | private Quaternion lastPhysGroupRot; |
101 | 101 | ||
102 | private bool m_isBackedUp = false; | ||
103 | |||
102 | /// <summary> | 104 | /// <summary> |
103 | /// The constituent parts of this group | 105 | /// The constituent parts of this group |
104 | /// </summary> | 106 | /// </summary> |
@@ -120,7 +122,11 @@ namespace OpenSim.Region.Environment.Scenes | |||
120 | /// </summary> | 122 | /// </summary> |
121 | public override string Name | 123 | public override string Name |
122 | { | 124 | { |
123 | get { return RootPart.Name; } | 125 | get { |
126 | if (RootPart == null) | ||
127 | return ""; | ||
128 | return RootPart.Name; | ||
129 | } | ||
124 | set { RootPart.Name = value; } | 130 | set { RootPart.Name = value; } |
125 | } | 131 | } |
126 | 132 | ||
@@ -544,7 +550,9 @@ namespace OpenSim.Region.Environment.Scenes | |||
544 | //m_log.DebugFormat( | 550 | //m_log.DebugFormat( |
545 | // "[SCENE OBJECT GROUP]: Attaching object {0} {1} to scene presistence sweep", Name, UUID); | 551 | // "[SCENE OBJECT GROUP]: Attaching object {0} {1} to scene presistence sweep", Name, UUID); |
546 | 552 | ||
547 | m_scene.EventManager.OnBackup += ProcessBackup; | 553 | if (!m_isBackedUp) |
554 | m_scene.EventManager.OnBackup += ProcessBackup; | ||
555 | m_isBackedUp = true; | ||
548 | } | 556 | } |
549 | } | 557 | } |
550 | 558 | ||
@@ -786,6 +794,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
786 | SetAttachmentPoint((byte)0); | 794 | SetAttachmentPoint((byte)0); |
787 | m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_scene.m_physicalPrim); | 795 | m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_scene.m_physicalPrim); |
788 | HasGroupChanged = true; | 796 | HasGroupChanged = true; |
797 | RootPart.Rezzed = DateTime.Now; | ||
789 | AttachToBackup(); | 798 | AttachToBackup(); |
790 | m_scene.EventManager.TriggerParcelPrimCountTainted(); | 799 | m_scene.EventManager.TriggerParcelPrimCountTainted(); |
791 | m_rootPart.ScheduleFullUpdate(); | 800 | m_rootPart.ScheduleFullUpdate(); |
@@ -1000,6 +1009,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
1000 | // that they don't happen, otherwise the deleted objects will reappear | 1009 | // that they don't happen, otherwise the deleted objects will reappear |
1001 | m_isDeleted = true; | 1010 | m_isDeleted = true; |
1002 | 1011 | ||
1012 | DetachFromBackup(); | ||
1013 | |||
1003 | foreach (SceneObjectPart part in m_parts.Values) | 1014 | foreach (SceneObjectPart part in m_parts.Values) |
1004 | { | 1015 | { |
1005 | List<ScenePresence> avatars = Scene.GetScenePresences(); | 1016 | List<ScenePresence> avatars = Scene.GetScenePresences(); |
@@ -1149,6 +1160,28 @@ namespace OpenSim.Region.Environment.Scenes | |||
1149 | // any exception propogate upwards. | 1160 | // any exception propogate upwards. |
1150 | try | 1161 | try |
1151 | { | 1162 | { |
1163 | ILandObject parcel = m_scene.LandChannel.GetLandObject( | ||
1164 | m_rootPart.GroupPosition.X, m_rootPart.GroupPosition.Y); | ||
1165 | |||
1166 | if (parcel.landData.OtherCleanTime != 0) | ||
1167 | { | ||
1168 | if (parcel.landData.OwnerID != OwnerID && | ||
1169 | (parcel.landData.GroupID != GroupID || | ||
1170 | parcel.landData.GroupID == UUID.Zero)) | ||
1171 | { | ||
1172 | if ((DateTime.Now - RootPart.Rezzed).TotalMinutes > | ||
1173 | parcel.landData.OtherCleanTime) | ||
1174 | { | ||
1175 | m_log.InfoFormat("[SCENE] Returning object {0} due to parcel auto return", RootPart.UUID.ToString()); | ||
1176 | m_scene.AddReturn(OwnerID, Name, AbsolutePosition); | ||
1177 | m_scene.DeRezObject(null, RootPart.LocalId, | ||
1178 | RootPart.GroupID, 9, UUID.Zero); | ||
1179 | |||
1180 | return; | ||
1181 | } | ||
1182 | } | ||
1183 | } | ||
1184 | |||
1152 | if (HasGroupChanged) | 1185 | if (HasGroupChanged) |
1153 | { | 1186 | { |
1154 | // don't backup while it's selected or you're asking for changes mid stream. | 1187 | // don't backup while it's selected or you're asking for changes mid stream. |
@@ -1226,35 +1259,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
1226 | } | 1259 | } |
1227 | } | 1260 | } |
1228 | 1261 | ||
1229 | /// <summary> | ||
1230 | /// Send a terse update to the client for the given part | ||
1231 | /// </summary> | ||
1232 | /// <param name="remoteClient"></param> | ||
1233 | /// <param name="part"></param> | ||
1234 | internal void SendPartTerseUpdate(IClientAPI remoteClient, SceneObjectPart part) | ||
1235 | { | ||
1236 | SceneObjectPart rootPart = m_rootPart; | ||
1237 | |||
1238 | // TODO: that could by caused by some race condition with attachments on sim-crossing | ||
1239 | if (rootPart == null) return; | ||
1240 | |||
1241 | if (rootPart.UUID == part.UUID) | ||
1242 | { | ||
1243 | if (rootPart.IsAttachment) | ||
1244 | { | ||
1245 | part.SendTerseUpdateToClient(remoteClient, rootPart.AttachedPos); | ||
1246 | } | ||
1247 | else | ||
1248 | { | ||
1249 | part.SendTerseUpdateToClient(remoteClient, AbsolutePosition); | ||
1250 | } | ||
1251 | } | ||
1252 | else | ||
1253 | { | ||
1254 | part.SendTerseUpdateToClient(remoteClient); | ||
1255 | } | ||
1256 | } | ||
1257 | |||
1258 | #endregion | 1262 | #endregion |
1259 | 1263 | ||
1260 | #region Copying | 1264 | #region Copying |
@@ -1920,6 +1924,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
1920 | if (sendEvents) | 1924 | if (sendEvents) |
1921 | linkPart.TriggerScriptChangedEvent(Changed.LINK); | 1925 | linkPart.TriggerScriptChangedEvent(Changed.LINK); |
1922 | 1926 | ||
1927 | linkPart.Rezzed = RootPart.Rezzed; | ||
1928 | |||
1923 | HasGroupChanged = true; | 1929 | HasGroupChanged = true; |
1924 | ScheduleGroupForFullUpdate(); | 1930 | ScheduleGroupForFullUpdate(); |
1925 | } | 1931 | } |
@@ -1937,7 +1943,9 @@ namespace OpenSim.Region.Environment.Scenes | |||
1937 | /// <param name="objectGroup"></param> | 1943 | /// <param name="objectGroup"></param> |
1938 | public void DetachFromBackup() | 1944 | public void DetachFromBackup() |
1939 | { | 1945 | { |
1940 | m_scene.EventManager.OnBackup -= ProcessBackup; | 1946 | if (m_isBackedUp) |
1947 | m_scene.EventManager.OnBackup -= ProcessBackup; | ||
1948 | m_isBackedUp = false; | ||
1941 | } | 1949 | } |
1942 | 1950 | ||
1943 | private void LinkNonRootPart(SceneObjectPart part, Vector3 oldGroupPosition, Quaternion oldGroupRotation) | 1951 | private void LinkNonRootPart(SceneObjectPart part, Vector3 oldGroupPosition, Quaternion oldGroupRotation) |