From 04bafd21221a789b83b039efd1c52e141944cde0 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 30 Aug 2011 23:05:43 +0100
Subject: refactor: Move ScenePresence.RezAttachments() into AttachmentsModule
This adds an incomplete IScenePresence to match ISceneEntity
---
.../Avatar/Attachments/AttachmentsModule.cs | 38 +++++++++++++++
.../Framework/Interfaces/IAttachmentsModule.cs | 6 +++
.../Region/Framework/Interfaces/IScenePresence.cs | 56 ++++++++++++++++++++++
OpenSim/Region/Framework/Scenes/Scene.cs | 2 +-
OpenSim/Region/Framework/Scenes/ScenePresence.cs | 46 +-----------------
.../Region/OptionalModules/World/NPC/NPCModule.cs | 2 +-
6 files changed, 103 insertions(+), 47 deletions(-)
create mode 100644 OpenSim/Region/Framework/Interfaces/IScenePresence.cs
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
index 02fd387..f6aea89 100644
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
@@ -95,6 +95,44 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
client.OnDetachAttachmentIntoInv -= DetachSingleAttachmentToInv;
client.OnObjectDrop -= DetachSingleAttachmentToGround;
}
+
+ ///
+ /// RezAttachments. This should only be called upon login on the first region.
+ /// Attachment rezzings on crossings and TPs are done in a different way.
+ ///
+ public void RezAttachments(IScenePresence sp)
+ {
+ if (null == sp.Appearance)
+ {
+ m_log.WarnFormat("[ATTACHMENTS MODULE]: Appearance has not been initialized for agent {0}", sp.UUID);
+ return;
+ }
+
+ List attachments = sp.Appearance.GetAttachments();
+ foreach (AvatarAttachment attach in attachments)
+ {
+ int p = attach.AttachPoint;
+ UUID itemID = attach.ItemID;
+
+ //UUID assetID = attach.AssetID;
+ // For some reason assetIDs are being written as Zero's in the DB -- need to track tat down
+ // But they're not used anyway, the item is being looked up for now, so let's proceed.
+ //if (UUID.Zero == assetID)
+ //{
+ // m_log.DebugFormat("[ATTACHMENT]: Cannot rez attachment in point {0} with itemID {1}", p, itemID);
+ // continue;
+ //}
+
+ try
+ {
+ RezSingleAttachmentFromInventory(sp.ControllingClient, itemID, (uint)p);
+ }
+ catch (Exception e)
+ {
+ m_log.ErrorFormat("[ATTACHMENTS MODULE]: Unable to rez attachment: {0}{1}", e.Message, e.StackTrace);
+ }
+ }
+ }
///
/// Called by client
diff --git a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs
index c910289..1833dce 100644
--- a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs
@@ -36,6 +36,12 @@ namespace OpenSim.Region.Framework.Interfaces
public interface IAttachmentsModule
{
///
+ /// RezAttachments. This should only be called upon login on the first region.
+ /// Attachment rezzings on crossings and TPs are done in a different way.
+ ///
+ void RezAttachments(IScenePresence sp);
+
+ ///
/// Attach an object to an avatar from the world.
///
///
diff --git a/OpenSim/Region/Framework/Interfaces/IScenePresence.cs b/OpenSim/Region/Framework/Interfaces/IScenePresence.cs
new file mode 100644
index 0000000..d700d79
--- /dev/null
+++ b/OpenSim/Region/Framework/Interfaces/IScenePresence.cs
@@ -0,0 +1,56 @@
+/*
+ * 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 OpenSim.Framework;
+
+namespace OpenSim.Region.Framework.Interfaces
+{
+ ///
+ /// An agent in the scene.
+ ///
+ ///
+ /// Interface is a work in progress. Please feel free to add other required properties and methods.
+ ///
+ public interface IScenePresence : ISceneEntity
+ {
+ ///
+ /// The client controlling this presence
+ ///
+ IClientAPI ControllingClient { get; }
+
+ ///
+ /// Avatar appearance data.
+ ///
+ ///
+ // Because appearance setting is in a module, we actually need
+ // to give it access to our appearance directly, otherwise we
+ // get a synchronization issue.
+ ///
+ AvatarAppearance Appearance { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index e0250de..e7fe8df 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -2578,7 +2578,7 @@ namespace OpenSim.Region.Framework.Scenes
if (aCircuit.child == false)
{
sp.IsChildAgent = false;
- Util.FireAndForget(delegate(object o) { sp.RezAttachments(); });
+ Util.FireAndForget(delegate(object o) { AttachmentsModule.RezAttachments(sp); });
}
}
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 4143d44..040e801 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -66,7 +66,7 @@ namespace OpenSim.Region.Framework.Scenes
public delegate void SendCourseLocationsMethod(UUID scene, ScenePresence presence, List coarseLocations, List avatarUUIDs);
- public class ScenePresence : EntityBase, ISceneEntity
+ public class ScenePresence : EntityBase, IScenePresence
{
// ~ScenePresence()
// {
@@ -444,9 +444,6 @@ namespace OpenSim.Region.Framework.Scenes
protected PhysicsActor m_physicsActor;
- ///
- /// The client controlling this presence
- ///
public IClientAPI ControllingClient
{
get { return m_controllingClient; }
@@ -2689,9 +2686,6 @@ namespace OpenSim.Region.Framework.Scenes
UUID, m_appearance.VisualParams, m_appearance.Texture.GetBytes());
}
- // Because appearance setting is in a module, we actually need
- // to give it access to our appearance directly, otherwise we
- // get a synchronization issue.
public AvatarAppearance Appearance
{
get { return m_appearance; }
@@ -3813,44 +3807,6 @@ namespace OpenSim.Region.Framework.Scenes
return flags;
}
- ///
- /// RezAttachments. This should only be called upon login on the first region.
- /// Attachment rezzings on crossings and TPs are done in a different way.
- ///
- public void RezAttachments()
- {
- if (null == m_appearance)
- {
- m_log.WarnFormat("[ATTACHMENT]: Appearance has not been initialized for agent {0}", UUID);
- return;
- }
-
- List attachments = m_appearance.GetAttachments();
- foreach (AvatarAttachment attach in attachments)
- {
- int p = attach.AttachPoint;
- UUID itemID = attach.ItemID;
-
- //UUID assetID = attach.AssetID;
- // For some reason assetIDs are being written as Zero's in the DB -- need to track tat down
- // But they're not used anyway, the item is being looked up for now, so let's proceed.
- //if (UUID.Zero == assetID)
- //{
- // m_log.DebugFormat("[ATTACHMENT]: Cannot rez attachment in point {0} with itemID {1}", p, itemID);
- // continue;
- //}
-
- try
- {
- m_scene.AttachmentsModule.RezSingleAttachmentFromInventory(ControllingClient, itemID, (uint)p);
- }
- catch (Exception e)
- {
- m_log.ErrorFormat("[ATTACHMENT]: Unable to rez attachment: {0}{1}", e.Message, e.StackTrace);
- }
- }
- }
-
private void ReprioritizeUpdates()
{
if (Scene.IsReprioritizationEnabled && Scene.UpdatePrioritizationScheme != UpdatePrioritizationSchemes.Time)
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
index c1da803..79c79e4 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
@@ -155,7 +155,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
AvatarAppearance npcAppearance = new AvatarAppearance(appearance, true);
sp.Appearance = npcAppearance;
- sp.RezAttachments();
+ scene.AttachmentsModule.RezAttachments(sp);
IAvatarFactory module = scene.RequestModuleInterface();
module.SendAppearance(sp.UUID);
--
cgit v1.1