diff options
Diffstat (limited to 'OpenSim/Region/Framework')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 33 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.cs | 18 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneGraph.cs | 36 |
3 files changed, 62 insertions, 25 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 9c62ad3..01be491 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |||
@@ -1983,11 +1983,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1983 | 1983 | ||
1984 | group.ResetIDs(); | 1984 | group.ResetIDs(); |
1985 | 1985 | ||
1986 | AddNewSceneObject(group, true); | ||
1987 | |||
1988 | // we set it's position in world. | ||
1989 | group.AbsolutePosition = pos; | ||
1990 | |||
1991 | SceneObjectPart rootPart = group.GetChildPart(group.UUID); | 1986 | SceneObjectPart rootPart = group.GetChildPart(group.UUID); |
1992 | 1987 | ||
1993 | // Since renaming the item in the inventory does not affect the name stored | 1988 | // Since renaming the item in the inventory does not affect the name stored |
@@ -2027,31 +2022,21 @@ namespace OpenSim.Region.Framework.Scenes | |||
2027 | part.NextOwnerMask = item.NextPermissions; | 2022 | part.NextOwnerMask = item.NextPermissions; |
2028 | } | 2023 | } |
2029 | 2024 | ||
2030 | rootPart.TrimPermissions(); | 2025 | rootPart.TrimPermissions(); |
2031 | |||
2032 | if (group.RootPart.Shape.PCode == (byte)PCode.Prim) | ||
2033 | { | ||
2034 | group.ClearPartAttachmentData(); | ||
2035 | } | ||
2036 | |||
2037 | group.UpdateGroupRotationR(rot); | ||
2038 | |||
2039 | //group.ApplyPhysics(m_physicalPrim); | ||
2040 | if (group.RootPart.PhysActor != null && group.RootPart.PhysActor.IsPhysical && vel != Vector3.Zero) | ||
2041 | { | ||
2042 | group.RootPart.ApplyImpulse((vel * group.GetMass()), false); | ||
2043 | group.Velocity = vel; | ||
2044 | rootPart.ScheduleFullUpdate(); | ||
2045 | } | ||
2046 | |||
2047 | group.CreateScriptInstances(param, true, DefaultScriptEngine, 2); | ||
2048 | rootPart.ScheduleFullUpdate(); | ||
2049 | 2026 | ||
2050 | if (!Permissions.BypassPermissions()) | 2027 | if (!Permissions.BypassPermissions()) |
2051 | { | 2028 | { |
2052 | if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0) | 2029 | if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0) |
2053 | sourcePart.Inventory.RemoveInventoryItem(item.ItemID); | 2030 | sourcePart.Inventory.RemoveInventoryItem(item.ItemID); |
2054 | } | 2031 | } |
2032 | |||
2033 | AddNewSceneObject(group, true, pos, rot, vel); | ||
2034 | |||
2035 | // We can only call this after adding the scene object, since the scene object references the scene | ||
2036 | // to find out if scripts should be activated at all. | ||
2037 | group.CreateScriptInstances(param, true, DefaultScriptEngine, 2); | ||
2038 | |||
2039 | group.ScheduleGroupForFullUpdate(); | ||
2055 | 2040 | ||
2056 | return rootPart.ParentGroup; | 2041 | return rootPart.ParentGroup; |
2057 | } | 2042 | } |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index a147628..b808c6d 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -42,7 +42,6 @@ using OpenMetaverse.Imaging; | |||
42 | using OpenSim.Framework; | 42 | using OpenSim.Framework; |
43 | using OpenSim.Services.Interfaces; | 43 | using OpenSim.Services.Interfaces; |
44 | using OpenSim.Framework.Communications; | 44 | using OpenSim.Framework.Communications; |
45 | |||
46 | using OpenSim.Framework.Console; | 45 | using OpenSim.Framework.Console; |
47 | using OpenSim.Region.Framework.Interfaces; | 46 | using OpenSim.Region.Framework.Interfaces; |
48 | using OpenSim.Region.Framework.Scenes.Scripting; | 47 | using OpenSim.Region.Framework.Scenes.Scripting; |
@@ -2008,6 +2007,23 @@ namespace OpenSim.Region.Framework.Scenes | |||
2008 | { | 2007 | { |
2009 | return m_sceneGraph.AddNewSceneObject(sceneObject, attachToBackup, sendClientUpdates); | 2008 | return m_sceneGraph.AddNewSceneObject(sceneObject, attachToBackup, sendClientUpdates); |
2010 | } | 2009 | } |
2010 | |||
2011 | /// <summary> | ||
2012 | /// Add a newly created object to the scene. | ||
2013 | /// </summary> | ||
2014 | /// | ||
2015 | /// This method does not send updates to the client - callers need to handle this themselves. | ||
2016 | /// <param name="sceneObject"></param> | ||
2017 | /// <param name="attachToBackup"></param> | ||
2018 | /// <param name="pos">Position of the object</param> | ||
2019 | /// <param name="rot">Rotation of the object</param> | ||
2020 | /// <param name="vel">Velocity of the object. This parameter only has an effect if the object is physical</param> | ||
2021 | /// <returns></returns> | ||
2022 | public bool AddNewSceneObject( | ||
2023 | SceneObjectGroup sceneObject, bool attachToBackup, Vector3 pos, Quaternion rot, Vector3 vel) | ||
2024 | { | ||
2025 | return m_sceneGraph.AddNewSceneObject(sceneObject, attachToBackup, pos, rot, vel); | ||
2026 | } | ||
2011 | 2027 | ||
2012 | /// <summary> | 2028 | /// <summary> |
2013 | /// Delete every object from the scene. This does not include attachments worn by avatars. | 2029 | /// Delete every object from the scene. This does not include attachments worn by avatars. |
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 9f38a99..31faeec 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs | |||
@@ -292,6 +292,42 @@ namespace OpenSim.Region.Framework.Scenes | |||
292 | 292 | ||
293 | return AddSceneObject(sceneObject, attachToBackup, sendClientUpdates); | 293 | return AddSceneObject(sceneObject, attachToBackup, sendClientUpdates); |
294 | } | 294 | } |
295 | |||
296 | /// <summary> | ||
297 | /// Add a newly created object to the scene. | ||
298 | /// </summary> | ||
299 | /// | ||
300 | /// This method does not send updates to the client - callers need to handle this themselves. | ||
301 | /// <param name="sceneObject"></param> | ||
302 | /// <param name="attachToBackup"></param> | ||
303 | /// <param name="pos">Position of the object</param> | ||
304 | /// <param name="rot">Rotation of the object</param> | ||
305 | /// <param name="vel">Velocity of the object. This parameter only has an effect if the object is physical</param> | ||
306 | /// <returns></returns> | ||
307 | public bool AddNewSceneObject( | ||
308 | SceneObjectGroup sceneObject, bool attachToBackup, Vector3 pos, Quaternion rot, Vector3 vel) | ||
309 | { | ||
310 | AddNewSceneObject(sceneObject, true, false); | ||
311 | |||
312 | // we set it's position in world. | ||
313 | sceneObject.AbsolutePosition = pos; | ||
314 | |||
315 | if (sceneObject.RootPart.Shape.PCode == (byte)PCode.Prim) | ||
316 | { | ||
317 | sceneObject.ClearPartAttachmentData(); | ||
318 | } | ||
319 | |||
320 | sceneObject.UpdateGroupRotationR(rot); | ||
321 | |||
322 | //group.ApplyPhysics(m_physicalPrim); | ||
323 | if (sceneObject.RootPart.PhysActor != null && sceneObject.RootPart.PhysActor.IsPhysical && vel != Vector3.Zero) | ||
324 | { | ||
325 | sceneObject.RootPart.ApplyImpulse((vel * sceneObject.GetMass()), false); | ||
326 | sceneObject.Velocity = vel; | ||
327 | } | ||
328 | |||
329 | return true; | ||
330 | } | ||
295 | 331 | ||
296 | /// <summary> | 332 | /// <summary> |
297 | /// Add an object to the scene. This will both update the scene, and send information about the | 333 | /// Add an object to the scene. This will both update the scene, and send information about the |