From 98d7de22dc44ca1e5971301c02a6a1fe49620889 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 12 Apr 2011 18:31:41 +0100
Subject: Fix (add) ability to rez objects by dragging them out of another
prim's inventory.
This should happen if the client supplies a task ID with the RezObject call.
The rez goes through the same code as llRezObject(), so the same perms are applied.
Rotation isn't yet preserved, this should be fixed shortly.
---
.../InventoryAccess/InventoryAccessModule.cs | 4 ++
OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 59 ++++++++++++++++++++--
2 files changed, 58 insertions(+), 5 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
index 9fbfc34..cdee53c 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
@@ -552,8 +552,10 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
///
/// Rez an object into the scene from the user's inventory
///
+ ///
/// FIXME: It would be really nice if inventory access modules didn't also actually do the work of rezzing
/// things to the scene. The caller should be doing that, I think.
+ ///
///
///
///
@@ -570,6 +572,8 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
UUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection,
bool RezSelected, bool RemoveItem, UUID fromTaskID, bool attachment)
{
+// m_log.DebugFormat("[INVENTORY ACCESS MODULE]: RezObject for {0}, item {1}", remoteClient.Name, itemID);
+
// Work out position details
byte bRayEndIsIntersection = (byte)0;
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index 73dd531..4370850 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -1955,11 +1955,60 @@ namespace OpenSim.Region.Framework.Scenes
UUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection,
bool RezSelected, bool RemoveItem, UUID fromTaskID)
{
- IInventoryAccessModule invAccess = RequestModuleInterface();
- if (invAccess != null)
- invAccess.RezObject(
- remoteClient, itemID, RayEnd, RayStart, RayTargetID, BypassRayCast, RayEndIsIntersection,
- RezSelected, RemoveItem, fromTaskID, false);
+// m_log.DebugFormat(
+// "[PRIM INVENTORY]: RezObject from {0} for item {1} from task id {2}",
+// remoteClient.Name, itemID, fromTaskID);
+
+ if (fromTaskID == UUID.Zero)
+ {
+ IInventoryAccessModule invAccess = RequestModuleInterface();
+ if (invAccess != null)
+ invAccess.RezObject(
+ remoteClient, itemID, RayEnd, RayStart, RayTargetID, BypassRayCast, RayEndIsIntersection,
+ RezSelected, RemoveItem, fromTaskID, false);
+ }
+ else
+ {
+ SceneObjectPart part = GetSceneObjectPart(fromTaskID);
+ if (part == null)
+ {
+ m_log.ErrorFormat(
+ "[TASK INVENTORY]: {0} tried to rez item id {1} from object id {2} but there is no such scene object",
+ remoteClient.Name, itemID, fromTaskID);
+
+ return;
+ }
+
+ TaskInventoryItem item = part.Inventory.GetInventoryItem(itemID);
+ if (item == null)
+ {
+ m_log.ErrorFormat(
+ "[TASK INVENTORY]: {0} tried to rez item id {1} from object id {2} but there is no such item",
+ remoteClient.Name, itemID, fromTaskID);
+
+ return;
+ }
+
+ // Work out position details
+ byte bRayEndIsIntersection = (byte)0;
+
+ if (RayEndIsIntersection)
+ {
+ bRayEndIsIntersection = (byte)1;
+ }
+ else
+ {
+ bRayEndIsIntersection = (byte)0;
+ }
+
+ Vector3 scale = new Vector3(0.5f, 0.5f, 0.5f);
+ Vector3 pos
+ = GetNewRezLocation(
+ RayStart, RayEnd, RayTargetID, Quaternion.Identity,
+ BypassRayCast, bRayEndIsIntersection, true, scale, false);
+
+ RezObject(part, item, pos, Quaternion.Identity, Vector3.Zero, 0);
+ }
}
///
--
cgit v1.1
From 3ba5eeb6c3b7c6381ca1e0ed87bce44049f96e37 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 12 Apr 2011 22:15:40 +0100
Subject: Allow a null rotation to be passed in to RezObject so that we can
control whether to use the serialized rotation or not. Not used yet.
---
OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index 4370850..87b4cb8 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -2016,14 +2016,14 @@ namespace OpenSim.Region.Framework.Scenes
///
///
///
- ///
- ///
- ///
+ /// The position of the rezzed object.
+ /// The rotation of the rezzed object. If null, then the rotation stored with the object
+ /// will be used if it exists.
+ /// The velocity of the rezzed object.
///
/// The SceneObjectGroup rezzed or null if rez was unsuccessful
public virtual SceneObjectGroup RezObject(
- SceneObjectPart sourcePart, TaskInventoryItem item,
- Vector3 pos, Quaternion rot, Vector3 vel, int param)
+ SceneObjectPart sourcePart, TaskInventoryItem item, Vector3 pos, Quaternion? rot, Vector3 vel, int param)
{
if (null == item)
return null;
@@ -2041,8 +2041,14 @@ namespace OpenSim.Region.Framework.Scenes
if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0)
sourcePart.Inventory.RemoveInventoryItem(item.ItemID);
}
-
- AddNewSceneObject(group, true, pos, rot, vel);
+
+ AddNewSceneObject(group, true);
+
+ group.AbsolutePosition = pos;
+ group.Velocity = vel;
+
+ if (rot != null)
+ group.UpdateGroupRotationR((Quaternion)rot);
// We can only call this after adding the scene object, since the scene object references the scene
// to find out if scripts should be activated at all.
--
cgit v1.1
From 8e0d2cc43b63046b0dd6b9a3a7dafd70a70362d0 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 12 Apr 2011 22:21:46 +0100
Subject: If an object is rezzed directly from a prim inventory then give it
the rotation it was stored with.
---
OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index 87b4cb8..254879b 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -2007,7 +2007,7 @@ namespace OpenSim.Region.Framework.Scenes
RayStart, RayEnd, RayTargetID, Quaternion.Identity,
BypassRayCast, bRayEndIsIntersection, true, scale, false);
- RezObject(part, item, pos, Quaternion.Identity, Vector3.Zero, 0);
+ RezObject(part, item, pos, null, Vector3.Zero, 0);
}
}
--
cgit v1.1
From b0889ed92a3c7d152f9b05aec1ce00dfc010e34e Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 12 Apr 2011 22:30:43 +0100
Subject: refactor: simplify bRayEndIsIntersection boolean set from
RayEndIsIntersection byte
---
.../Framework/InventoryAccess/InventoryAccessModule.cs | 15 +--------------
OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 13 +------------
2 files changed, 2 insertions(+), 26 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
index cdee53c..73b0a35 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
@@ -574,21 +574,8 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
{
// m_log.DebugFormat("[INVENTORY ACCESS MODULE]: RezObject for {0}, item {1}", remoteClient.Name, itemID);
- // Work out position details
- byte bRayEndIsIntersection = (byte)0;
-
- if (RayEndIsIntersection)
- {
- bRayEndIsIntersection = (byte)1;
- }
- else
- {
- bRayEndIsIntersection = (byte)0;
- }
-
+ byte bRayEndIsIntersection = (byte)(RayEndIsIntersection ? 1 : 0);
Vector3 scale = new Vector3(0.5f, 0.5f, 0.5f);
-
-
Vector3 pos = m_Scene.GetNewRezLocation(
RayStart, RayEnd, RayTargetID, Quaternion.Identity,
BypassRayCast, bRayEndIsIntersection, true, scale, false);
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index 254879b..0f85925 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -1989,18 +1989,7 @@ namespace OpenSim.Region.Framework.Scenes
return;
}
- // Work out position details
- byte bRayEndIsIntersection = (byte)0;
-
- if (RayEndIsIntersection)
- {
- bRayEndIsIntersection = (byte)1;
- }
- else
- {
- bRayEndIsIntersection = (byte)0;
- }
-
+ byte bRayEndIsIntersection = (byte)(RayEndIsIntersection ? 1 : 0);
Vector3 scale = new Vector3(0.5f, 0.5f, 0.5f);
Vector3 pos
= GetNewRezLocation(
--
cgit v1.1
From dec9c2283b548818409c91a93307334d1c0d9774 Mon Sep 17 00:00:00 2001
From: BlueWall
Date: Wed, 13 Apr 2011 16:10:18 -0400
Subject: Add ColladaMesh switch
---
OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs | 13 +++++++++++--
.../Assets/NewFileAgentInventoryVariablePriceModule.cs | 11 ++++++++++-
2 files changed, 21 insertions(+), 3 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs b/OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs
index 878242a..d2278bc 100644
--- a/OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Assets/GetMeshModule.cs
@@ -54,6 +54,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Assets
private Scene m_scene;
private IAssetService m_assetService;
+ private bool m_enabled = true;
#region IRegionModuleBase Members
@@ -65,7 +66,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Assets
public void Initialise(IConfigSource source)
{
-
+ IConfig startupConfig = source.Configs["Startup"];
+ if (startupConfig == null)
+ return;
+
+ if (!startupConfig.GetBoolean("ColladaMesh",true))
+ m_enabled = false;
}
public void AddRegion(Scene pScene)
@@ -101,16 +107,19 @@ namespace OpenSim.Region.CoreModules.Avatar.Assets
public void RegisterCaps(UUID agentID, Caps caps)
{
+ if(!m_enabled)
+ return;
+
UUID capID = UUID.Random();
// m_log.Info("[GETMESH]: /CAPS/" + capID);
+
caps.RegisterHandler("GetMesh",
new RestHTTPHandler("GET", "/CAPS/" + capID,
delegate(Hashtable m_dhttpMethod)
{
return ProcessGetMesh(m_dhttpMethod, agentID, caps);
}));
-
}
#endregion
diff --git a/OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs b/OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs
index 4a42c93..fb07cc9 100644
--- a/OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Assets/NewFileAgentInventoryVariablePriceModule.cs
@@ -56,6 +56,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Assets
private Scene m_scene;
// private IAssetService m_assetService;
private bool m_dumpAssetsToFile = false;
+ private bool m_enabled = true;
#region IRegionModuleBase Members
@@ -67,7 +68,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Assets
public void Initialise(IConfigSource source)
{
-
+ IConfig startupConfig = source.Configs["Startup"];
+ if (startupConfig == null)
+ return;
+
+ if (!startupConfig.GetBoolean("ColladaMesh",true))
+ m_enabled = false;
}
public void AddRegion(Scene pScene)
@@ -103,6 +109,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Assets
public void RegisterCaps(UUID agentID, Caps caps)
{
+ if(!m_enabled)
+ return;
+
UUID capID = UUID.Random();
// m_log.Debug("[NEW FILE AGENT INVENTORY VARIABLE PRICE]: /CAPS/" + capID);
--
cgit v1.1