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