From 6942eaed5b3d8065ebf01dc465e905ca456c0fa4 Mon Sep 17 00:00:00 2001
From: Charles Krinke
Date: Mon, 29 Jun 2009 21:47:47 +0000
Subject: Thank you kindly, Snowdrop, for a patch that solves: The current API
for MRM is quite sparse, this patch supplies basic support for accessing the
task inventory of object.
---
.../Scripting/Minimodule/InventoryItem.cs | 72 ++++++++++++++++++++++
1 file changed, 72 insertions(+)
create mode 100644 OpenSim/Region/OptionalModules/Scripting/Minimodule/InventoryItem.cs
(limited to 'OpenSim/Region/OptionalModules/Scripting/Minimodule/InventoryItem.cs')
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/InventoryItem.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/InventoryItem.cs
new file mode 100644
index 0000000..512a120
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/InventoryItem.cs
@@ -0,0 +1,72 @@
+
+using System;
+using System.Text;
+
+using OpenSim.Framework;
+using OpenSim.Region.Framework.Scenes;
+//using OpenSim.Services.AssetService;
+using OpenMetaverse;
+
+namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
+{
+
+
+ public class InventoryItem : IInventoryItem
+ {
+ TaskInventoryItem m_privateItem;
+ Scene m_rootSceene;
+
+ public InventoryItem(Scene rootScene, TaskInventoryItem internalItem)
+ {
+ m_rootSceene = rootScene;
+ m_privateItem = internalItem;
+ }
+
+ // Marked internal, to prevent scripts from accessing the internal type
+ internal TaskInventoryItem ToTaskInventoryItem()
+ {
+ return m_privateItem;
+ }
+
+ ///
+ /// This will attempt to convert from an IInventoryItem to an InventoryItem object
+ ///
+ ///
+ /// In order for this to work the object which implements IInventoryItem must inherit from InventoryItem, otherwise
+ /// an exception is thrown.
+ ///
+ ///
+ /// The interface to upcast
+ ///
+ ///
+ /// The object backing the interface implementation
+ ///
+ internal static InventoryItem FromInterface(IInventoryItem i)
+ {
+ if(typeof(InventoryItem).IsAssignableFrom(i.GetType()))
+ {
+ return (InventoryItem)i;
+ }
+ else
+ {
+ throw new ApplicationException("[MRM] There is no legal conversion from IInventoryItem to InventoryItem");
+ }
+ }
+
+ public int Type { get { return m_privateItem.Type; } }
+ public UUID AssetID { get { return m_privateItem.AssetID; } }
+
+ public T RetreiveAsset() where T : OpenMetaverse.Asset, new()
+ {
+ AssetBase a = m_rootSceene.AssetService.Get(AssetID.ToString());
+ T result = new T();
+
+ if((sbyte)result.AssetType != a.Type)
+ throw new ApplicationException("[MRM] The supplied asset class does not match the found asset");
+
+ result.AssetData = a.Data;
+ result.Decode();
+ return result;
+ }
+ }
+}
--
cgit v1.1