aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/OptionalModules/Scripting/Minimodule/InventoryItem.cs
blob: d85066b4cb5f90eeff322bc3e97fee1083c5362c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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;
		}

		/// <summary>
		/// This will attempt to convert from an IInventoryItem to an InventoryItem object
		/// </summary>
		/// <description>
		/// In order for this to work the object which implements IInventoryItem must inherit from InventoryItem, otherwise
		/// an exception is thrown.
		/// </description>
		/// <param name="i">
		/// The interface to upcast <see cref="IInventoryItem"/>
		/// </param>
		/// <returns>
		/// The object backing the interface implementation <see cref="InventoryItem"/>
		/// </returns>
		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<T>() 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;
		}
	}
}