From 4a6adff4cd66a3bfeaa99af10caf9136e011df46 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 1 Jul 2010 19:25:46 +0100
Subject: start storing a mediaurl on the scene object part
not yet persisted or sent in the update
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
(limited to 'OpenSim/Region/Framework')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index e331bb0..c25c973 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -970,13 +970,18 @@ namespace OpenSim.Region.Framework.Scenes
get { return m_updateFlag; }
set { m_updateFlag = value; }
}
+
+ ///
+ /// Used for media on a prim
+ ///
+ public string MediaUrl { get; set; }
[XmlIgnore]
public bool CreateSelected
{
get { return m_createSelected; }
set { m_createSelected = value; }
- }
+ }
#endregion
--
cgit v1.1
From 9682e0c73310dae496912d7b8bc54add0fd0c3e7 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Thu, 1 Jul 2010 22:52:31 +0100
Subject: Implement media texture persistence over server restarts for sqlite
This is currently persisting media as an OSDArray serialized to LLSD XML.
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 22 +++++++++++++++++++++-
1 file changed, 21 insertions(+), 1 deletion(-)
(limited to 'OpenSim/Region/Framework')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index c25c973..a8c20dd 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -320,6 +320,11 @@ namespace OpenSim.Region.Framework.Scenes
protected Vector3 m_lastAcceleration;
protected Vector3 m_lastAngularVelocity;
protected int m_lastTerseSent;
+
+ ///
+ /// Stores media texture data
+ ///
+ protected string m_mediaUrl;
// TODO: Those have to be changed into persistent properties at some later point,
// or sit-camera on vehicles will break on sim-crossing.
@@ -965,6 +970,7 @@ namespace OpenSim.Region.Framework.Scenes
TriggerScriptChangedEvent(Changed.SCALE);
}
}
+
public byte UpdateFlag
{
get { return m_updateFlag; }
@@ -974,7 +980,21 @@ namespace OpenSim.Region.Framework.Scenes
///
/// Used for media on a prim
///
- public string MediaUrl { get; set; }
+ public string MediaUrl
+ {
+ get
+ {
+ return m_mediaUrl;
+ }
+
+ set
+ {
+ m_mediaUrl = value;
+
+ if (ParentGroup != null)
+ ParentGroup.HasGroupChanged = true;
+ }
+ }
[XmlIgnore]
public bool CreateSelected
--
cgit v1.1
From 8f403cb4b87fc99c0274929464229b1497395b86 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Mon, 12 Jul 2010 15:47:56 +0100
Subject: Implement llGetPrimMediaParams()
Exposes method to get media entry via IMoapModule
As yet untested.
---
OpenSim/Region/Framework/Interfaces/IMoapModule.cs | 47 ++++++++++++++++++++++
1 file changed, 47 insertions(+)
create mode 100644 OpenSim/Region/Framework/Interfaces/IMoapModule.cs
(limited to 'OpenSim/Region/Framework')
diff --git a/OpenSim/Region/Framework/Interfaces/IMoapModule.cs b/OpenSim/Region/Framework/Interfaces/IMoapModule.cs
new file mode 100644
index 0000000..4447f34
--- /dev/null
+++ b/OpenSim/Region/Framework/Interfaces/IMoapModule.cs
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSimulator Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using OpenMetaverse;
+using OpenSim.Region.Framework.Scenes;
+
+namespace OpenSim.Region.Framework.Interfaces
+{
+ ///
+ /// Provides methods from manipulating media-on-a-prim
+ ///
+ public interface IMoapModule
+ {
+ ///
+ /// Get the media entry for a given prim face.
+ ///
+ ///
+ ///
+ ///
+ MediaEntry GetMediaEntry(SceneObjectPart part, int face);
+ }
+}
\ No newline at end of file
--
cgit v1.1
From a5ad792e6c90eb9412325e636c6e4eafc4a8a91d Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Mon, 12 Jul 2010 19:46:23 +0100
Subject: implement llSetPrimMediaParams()
Untested
---
OpenSim/Region/Framework/Interfaces/IMoapModule.cs | 14 ++++++++++++--
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 3 ++-
2 files changed, 14 insertions(+), 3 deletions(-)
(limited to 'OpenSim/Region/Framework')
diff --git a/OpenSim/Region/Framework/Interfaces/IMoapModule.cs b/OpenSim/Region/Framework/Interfaces/IMoapModule.cs
index 4447f34..31bb6d8 100644
--- a/OpenSim/Region/Framework/Interfaces/IMoapModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IMoapModule.cs
@@ -39,9 +39,19 @@ namespace OpenSim.Region.Framework.Interfaces
///
/// Get the media entry for a given prim face.
///
+ /// A copy of the media entry is returned rather than the original, so this can be altered at will without
+ /// affecting the original settings.
///
///
///
- MediaEntry GetMediaEntry(SceneObjectPart part, int face);
- }
+ MediaEntry GetMediaEntry(SceneObjectPart part, int face);
+
+ ///
+ /// Set the media entry for a given prim face.
+ ///
+ ///
+ ///
+ ///
+ void SetMediaEntry(SceneObjectPart part, int face, MediaEntry me);
+ }
}
\ No newline at end of file
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index a8c20dd..e6a1696 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -978,8 +978,9 @@ namespace OpenSim.Region.Framework.Scenes
}
///
- /// Used for media on a prim
+ /// Used for media on a prim.
///
+ /// Do not change this value directly - always do it through an IMoapModule.
public string MediaUrl
{
get
--
cgit v1.1
From 39a38c4901f00eae15c2eed38191944f8f419f8b Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Mon, 12 Jul 2010 22:00:45 +0100
Subject: implement llClearPrimMedia()
untested
---
OpenSim/Region/Framework/Interfaces/IMoapModule.cs | 10 ++++++++++
1 file changed, 10 insertions(+)
(limited to 'OpenSim/Region/Framework')
diff --git a/OpenSim/Region/Framework/Interfaces/IMoapModule.cs b/OpenSim/Region/Framework/Interfaces/IMoapModule.cs
index 31bb6d8..24b6860 100644
--- a/OpenSim/Region/Framework/Interfaces/IMoapModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IMoapModule.cs
@@ -53,5 +53,15 @@ namespace OpenSim.Region.Framework.Interfaces
///
///
void SetMediaEntry(SceneObjectPart part, int face, MediaEntry me);
+
+ ///
+ /// Clear the media entry for a given prim face.
+ ///
+ ///
+ /// This is the equivalent of setting a media entry of null
+ ///
+ ///
+ /// /param>
+ void ClearMediaEntry(SceneObjectPart part, int face);
}
}
\ No newline at end of file
--
cgit v1.1
From eb5e39d6efed2516883c729eded38454d05aec68 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Mon, 12 Jul 2010 22:27:11 +0100
Subject: Fire CHANGED_MEDIA event if a media texture is set or cleared
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
(limited to 'OpenSim/Region/Framework')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index e6a1696..444a239 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -58,7 +58,8 @@ namespace OpenSim.Region.Framework.Scenes
OWNER = 128,
REGION_RESTART = 256,
REGION = 512,
- TELEPORT = 1024
+ TELEPORT = 1024,
+ MEDIA = 2048
}
// I don't really know where to put this except here.
--
cgit v1.1
From 51b208e96c881bd322b3769b843f0ebae3c09a84 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 13 Jul 2010 23:19:45 +0100
Subject: implement prim media control permissions serverside in order to stop
bad clients
---
.../Region/Framework/Scenes/Scene.Permissions.cs | 21 +++++++++++++++++++--
1 file changed, 19 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Region/Framework')
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs b/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs
index 7dab04f..70af978 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
@@ -81,6 +81,7 @@ namespace OpenSim.Region.Framework.Scenes
public delegate bool CopyUserInventoryHandler(UUID itemID, UUID userID);
public delegate bool DeleteUserInventoryHandler(UUID itemID, UUID userID);
public delegate bool TeleportHandler(UUID userID, Scene scene);
+ public delegate bool ControlPrimMediaHandler(UUID userID, UUID primID, int face);
#endregion
public class ScenePermissions
@@ -139,6 +140,7 @@ namespace OpenSim.Region.Framework.Scenes
public event CopyUserInventoryHandler OnCopyUserInventory;
public event DeleteUserInventoryHandler OnDeleteUserInventory;
public event TeleportHandler OnTeleport;
+ public event ControlPrimMediaHandler OnControlPrimMedia;
#endregion
#region Object Permission Checks
@@ -947,5 +949,20 @@ namespace OpenSim.Region.Framework.Scenes
}
return true;
}
+
+ public bool CanControlPrimMedia(UUID userID, UUID primID, int face)
+ {
+ ControlPrimMediaHandler handler = OnControlPrimMedia;
+ if (handler != null)
+ {
+ Delegate[] list = handler.GetInvocationList();
+ foreach (ControlPrimMediaHandler h in list)
+ {
+ if (h(userID, primID, face) == false)
+ return false;
+ }
+ }
+ return true;
+ }
}
-}
+}
\ No newline at end of file
--
cgit v1.1
From ee6cd884c9732b492675e043fe318ffcdfecc45d Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 13 Jul 2010 23:58:19 +0100
Subject: implement serverside checks for media texture navigation in order to
stop naughty clients
---
OpenSim/Region/Framework/Scenes/Scene.Permissions.cs | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
(limited to 'OpenSim/Region/Framework')
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs b/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs
index 70af978..0033900 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs
@@ -82,6 +82,7 @@ namespace OpenSim.Region.Framework.Scenes
public delegate bool DeleteUserInventoryHandler(UUID itemID, UUID userID);
public delegate bool TeleportHandler(UUID userID, Scene scene);
public delegate bool ControlPrimMediaHandler(UUID userID, UUID primID, int face);
+ public delegate bool InteractWithPrimMediaHandler(UUID userID, UUID primID, int face);
#endregion
public class ScenePermissions
@@ -141,6 +142,7 @@ namespace OpenSim.Region.Framework.Scenes
public event DeleteUserInventoryHandler OnDeleteUserInventory;
public event TeleportHandler OnTeleport;
public event ControlPrimMediaHandler OnControlPrimMedia;
+ public event InteractWithPrimMediaHandler OnInteractWithPrimMedia;
#endregion
#region Object Permission Checks
@@ -963,6 +965,21 @@ namespace OpenSim.Region.Framework.Scenes
}
}
return true;
- }
+ }
+
+ public bool CanInteractWithPrimMedia(UUID userID, UUID primID, int face)
+ {
+ InteractWithPrimMediaHandler handler = OnInteractWithPrimMedia;
+ if (handler != null)
+ {
+ Delegate[] list = handler.GetInvocationList();
+ foreach (InteractWithPrimMediaHandler h in list)
+ {
+ if (h(userID, primID, face) == false)
+ return false;
+ }
+ }
+ return true;
+ }
}
}
\ No newline at end of file
--
cgit v1.1
From 586ae0f6a07358f8367c4f916bff9fd688a43aa3 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Mon, 26 Jul 2010 20:13:26 +0100
Subject: Add EventManager.OnSceneObjectLoaded() for future use. This is fired
immediately after a scene object is loaded from storage.
---
OpenSim/Region/Framework/Scenes/EventManager.cs | 32 +++++++++++++++++++++++--
OpenSim/Region/Framework/Scenes/Scene.cs | 4 +++-
2 files changed, 33 insertions(+), 3 deletions(-)
(limited to 'OpenSim/Region/Framework')
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index 9db2e41..0b1f593 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -331,9 +331,16 @@ namespace OpenSim.Region.Framework.Scenes
/// the avatarID is UUID.Zero (I know, this doesn't make much sense but now it's historical).
public delegate void Attach(uint localID, UUID itemID, UUID avatarID);
public event Attach OnAttach;
+
+ public delegate void SceneObjectDelegate(SceneObjectGroup so);
+
+ ///
+ /// Called immediately after an object is loaded from storage.
+ ///
+ public event SceneObjectDelegate OnSceneObjectLoaded;
public delegate void RegionUp(GridRegion region);
- public event RegionUp OnRegionUp;
+ public event RegionUp OnRegionUp;
public class MoneyTransferArgs : EventArgs
{
@@ -2013,5 +2020,26 @@ namespace OpenSim.Region.Framework.Scenes
}
}
}
+
+ public void TriggerOnSceneObjectLoaded(SceneObjectGroup so)
+ {
+ SceneObjectDelegate handler = OnSceneObjectLoaded;
+ if (handler != null)
+ {
+ foreach (SceneObjectDelegate d in handler.GetInvocationList())
+ {
+ try
+ {
+ d(so);
+ }
+ catch (Exception e)
+ {
+ m_log.ErrorFormat(
+ "[EVENT MANAGER]: Delegate for TriggerOnSceneObjectLoaded failed - continuing. {0} {1}",
+ e.Message, e.StackTrace);
+ }
+ }
+ }
+ }
}
-}
+}
\ No newline at end of file
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 9141d44..e8dce08 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -1887,9 +1887,11 @@ namespace OpenSim.Region.Framework.Scenes
foreach (SceneObjectGroup group in PrimsFromDB)
{
+ EventManager.TriggerOnSceneObjectLoaded(group);
+
if (group.RootPart == null)
{
- m_log.ErrorFormat("[SCENE] Found a SceneObjectGroup with m_rootPart == null and {0} children",
+ m_log.ErrorFormat("[SCENE]: Found a SceneObjectGroup with m_rootPart == null and {0} children",
group.Children == null ? 0 : group.Children.Count);
}
--
cgit v1.1
From b51b2efdc8059548e1da7ac13ee858673b71592f Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Mon, 26 Jul 2010 20:36:28 +0100
Subject: Add EventManager.OnSceneObjectPreSave() for future use. This is
triggered immediately before a copy of the group is persisted to storage
---
OpenSim/Region/Framework/Scenes/EventManager.cs | 39 ++++++++++++++++++++--
.../Region/Framework/Scenes/SceneObjectGroup.cs | 1 +
2 files changed, 37 insertions(+), 3 deletions(-)
(limited to 'OpenSim/Region/Framework')
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index 0b1f593..3b8d727 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -330,14 +330,26 @@ namespace OpenSim.Region.Framework.Scenes
/// If the object is being attached, then the avatarID will be present. If the object is being detached then
/// the avatarID is UUID.Zero (I know, this doesn't make much sense but now it's historical).
public delegate void Attach(uint localID, UUID itemID, UUID avatarID);
- public event Attach OnAttach;
-
- public delegate void SceneObjectDelegate(SceneObjectGroup so);
+ public event Attach OnAttach;
///
/// Called immediately after an object is loaded from storage.
///
public event SceneObjectDelegate OnSceneObjectLoaded;
+ public delegate void SceneObjectDelegate(SceneObjectGroup so);
+
+ ///
+ /// Called immediately before an object is saved to storage.
+ ///
+ ///
+ /// The scene object being persisted.
+ /// This is actually a copy of the original scene object so changes made here will be saved to storage but will not be kept in memory.
+ ///
+ ///
+ /// The original scene object being persisted. Changes here will stay in memory but will not be saved to storage on this save.
+ ///
+ public event SceneObjectPreSaveDelegate OnSceneObjectPreSave;
+ public delegate void SceneObjectPreSaveDelegate(SceneObjectGroup persistingSo, SceneObjectGroup originalSo);
public delegate void RegionUp(GridRegion region);
public event RegionUp OnRegionUp;
@@ -2040,6 +2052,27 @@ namespace OpenSim.Region.Framework.Scenes
}
}
}
+ }
+
+ public void TriggerOnSceneObjectPreSave(SceneObjectGroup persistingSo, SceneObjectGroup originalSo)
+ {
+ SceneObjectPreSaveDelegate handler = OnSceneObjectPreSave;
+ if (handler != null)
+ {
+ foreach (SceneObjectPreSaveDelegate d in handler.GetInvocationList())
+ {
+ try
+ {
+ d(persistingSo, originalSo);
+ }
+ catch (Exception e)
+ {
+ m_log.ErrorFormat(
+ "[EVENT MANAGER]: Delegate for TriggerOnSceneObjectPreSave failed - continuing. {0} {1}",
+ e.Message, e.StackTrace);
+ }
+ }
+ }
}
}
}
\ No newline at end of file
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 17275d0..c2f9117 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -1479,6 +1479,7 @@ namespace OpenSim.Region.Framework.Scenes
backup_group.RootPart.ParticleSystem = RootPart.ParticleSystem;
HasGroupChanged = false;
+ m_scene.EventManager.TriggerOnSceneObjectPreSave(backup_group, this);
datastore.StoreObject(backup_group, m_scene.RegionInfo.RegionID);
backup_group.ForEachPart(delegate(SceneObjectPart part)
--
cgit v1.1
From 5aa56b12743c19a68cb371609be797e5fb3e2c4b Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Wed, 28 Jul 2010 18:55:29 +0100
Subject: Fix problem where changes to media textures for prims duplicated by
shify copy would change both prims until server restart
I also found out that you can crash the current viewer by giving it more media entrys than it's expecting
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
(limited to 'OpenSim/Region/Framework')
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 444a239..085da19 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1617,7 +1617,24 @@ namespace OpenSim.Region.Framework.Scenes
dupe.DoPhysicsPropertyUpdate(UsePhysics, true);
}
- return dupe;
+ if (Shape.Media != null)
+ {
+ List dupeMedia = new List();
+
+ foreach (MediaEntry me in Shape.Media)
+ {
+ if (me != null)
+ dupeMedia.Add(MediaEntry.FromOSD(me.GetOSD()));
+ else
+ dupeMedia.Add(null);
+ }
+
+ dupe.Shape.Media = dupeMedia;
+ }
+
+// m_log.DebugFormat("[SCENE OBJECT PART]: Clone of {0} {1} finished", Name, UUID);
+
+ return dupe;
}
protected void AssetReceived(string id, Object sender, AssetBase asset)
--
cgit v1.1
From 0f15ccb2cf994c64fb8c7f71a64721a3e5fe3085 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Wed, 28 Jul 2010 19:23:30 +0100
Subject: relocate moap specific cloning code to MoapModule
---
OpenSim/Region/Framework/Scenes/EventManager.cs | 29 +++++++++++++++++++++-
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 15 +----------
2 files changed, 29 insertions(+), 15 deletions(-)
(limited to 'OpenSim/Region/Framework')
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index 3b8d727..0a9a29e 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -350,6 +350,12 @@ namespace OpenSim.Region.Framework.Scenes
///
public event SceneObjectPreSaveDelegate OnSceneObjectPreSave;
public delegate void SceneObjectPreSaveDelegate(SceneObjectGroup persistingSo, SceneObjectGroup originalSo);
+
+ ///
+ /// Called when a scene object part is cloned within the region.
+ ///
+ public event SceneObjectPartCopyDelegate OnSceneObjectPartCopy;
+ public delegate void SceneObjectPartCopyDelegate(SceneObjectPart copy, SceneObjectPart original);
public delegate void RegionUp(GridRegion region);
public event RegionUp OnRegionUp;
@@ -2073,6 +2079,27 @@ namespace OpenSim.Region.Framework.Scenes
}
}
}
- }
+ }
+
+ public void TriggerOnSceneObjectPartCopy(SceneObjectPart copy, SceneObjectPart original)
+ {
+ SceneObjectPartCopyDelegate handler = OnSceneObjectPartCopy;
+ if (handler != null)
+ {
+ foreach (SceneObjectPartCopyDelegate d in handler.GetInvocationList())
+ {
+ try
+ {
+ d(copy, original);
+ }
+ catch (Exception e)
+ {
+ m_log.ErrorFormat(
+ "[EVENT MANAGER]: Delegate for TriggerOnSceneObjectPartCopy failed - continuing. {0} {1}",
+ e.Message, e.StackTrace);
+ }
+ }
+ }
+ }
}
}
\ No newline at end of file
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 085da19..71ca605 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1617,20 +1617,7 @@ namespace OpenSim.Region.Framework.Scenes
dupe.DoPhysicsPropertyUpdate(UsePhysics, true);
}
- if (Shape.Media != null)
- {
- List dupeMedia = new List();
-
- foreach (MediaEntry me in Shape.Media)
- {
- if (me != null)
- dupeMedia.Add(MediaEntry.FromOSD(me.GetOSD()));
- else
- dupeMedia.Add(null);
- }
-
- dupe.Shape.Media = dupeMedia;
- }
+ ParentGroup.Scene.EventManager.TriggerOnSceneObjectPartCopy(dupe, this);
// m_log.DebugFormat("[SCENE OBJECT PART]: Clone of {0} {1} finished", Name, UUID);
--
cgit v1.1
From f067f733ea60cc821d51889871f1f8d476aebd76 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Wed, 28 Jul 2010 19:38:20 +0100
Subject: add userExposed parameter to part copy event
---
OpenSim/Region/Framework/Scenes/EventManager.cs | 9 ++++++---
OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 1 +
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 7 ++++++-
3 files changed, 13 insertions(+), 4 deletions(-)
(limited to 'OpenSim/Region/Framework')
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index 0a9a29e..0ae3146 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -354,8 +354,11 @@ namespace OpenSim.Region.Framework.Scenes
///
/// Called when a scene object part is cloned within the region.
///
+ ///
+ ///
+ /// True if the duplicate will immediately be in the scene, false otherwise
public event SceneObjectPartCopyDelegate OnSceneObjectPartCopy;
- public delegate void SceneObjectPartCopyDelegate(SceneObjectPart copy, SceneObjectPart original);
+ public delegate void SceneObjectPartCopyDelegate(SceneObjectPart copy, SceneObjectPart original, bool userExposed);
public delegate void RegionUp(GridRegion region);
public event RegionUp OnRegionUp;
@@ -2081,7 +2084,7 @@ namespace OpenSim.Region.Framework.Scenes
}
}
- public void TriggerOnSceneObjectPartCopy(SceneObjectPart copy, SceneObjectPart original)
+ public void TriggerOnSceneObjectPartCopy(SceneObjectPart copy, SceneObjectPart original, bool userExposed)
{
SceneObjectPartCopyDelegate handler = OnSceneObjectPartCopy;
if (handler != null)
@@ -2090,7 +2093,7 @@ namespace OpenSim.Region.Framework.Scenes
{
try
{
- d(copy, original);
+ d(copy, original, userExposed);
}
catch (Exception e)
{
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index c2f9117..e26e4ae 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -1528,6 +1528,7 @@ namespace OpenSim.Region.Framework.Scenes
///
/// Duplicates this object, including operations such as physics set up and attaching to the backup event.
///
+ /// True if the duplicate will immediately be in the scene, false otherwise
///
public SceneObjectGroup Copy(bool userExposed)
{
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 71ca605..32332f7 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1554,6 +1554,11 @@ namespace OpenSim.Region.Framework.Scenes
///
/// Duplicates this part.
///
+ ///
+ ///
+ ///
+ ///
+ /// True if the duplicate will immediately be in the scene, false otherwise
///
public SceneObjectPart Copy(uint localID, UUID AgentID, UUID GroupID, int linkNum, bool userExposed)
{
@@ -1617,7 +1622,7 @@ namespace OpenSim.Region.Framework.Scenes
dupe.DoPhysicsPropertyUpdate(UsePhysics, true);
}
- ParentGroup.Scene.EventManager.TriggerOnSceneObjectPartCopy(dupe, this);
+ ParentGroup.Scene.EventManager.TriggerOnSceneObjectPartCopy(dupe, this, userExposed);
// m_log.DebugFormat("[SCENE OBJECT PART]: Clone of {0} {1} finished", Name, UUID);
--
cgit v1.1