diff --git a/OpenMetaverse/AssetManager.cs b/OpenMetaverse/AssetManager.cs
index 251543a3..659d285b 100644
--- a/OpenMetaverse/AssetManager.cs
+++ b/OpenMetaverse/AssetManager.cs
@@ -1226,7 +1226,7 @@ namespace OpenMetaverse
#region Helpers
- private Asset CreateAssetWrapper(AssetType type)
+ public Asset CreateAssetWrapper(AssetType type)
{
Asset asset;
@@ -1265,9 +1265,13 @@ namespace OpenMetaverse
case AssetType.Gesture:
asset = new AssetGesture();
break;
+ case AssetType.CallingCard:
+ asset = new AssetCallingCard();
+ break;
default:
- Logger.Log("Unimplemented asset type: " + type, Helpers.LogLevel.Error, Client);
- return null;
+ asset = new AssetMutable(type);
+ Logger.Log("Unimplemented asset type: " + type, Helpers.LogLevel.Error);
+ break;
}
return asset;
diff --git a/OpenMetaverse/Assets/AssetTypes/AssetCallingCard.cs b/OpenMetaverse/Assets/AssetTypes/AssetCallingCard.cs
new file mode 100644
index 00000000..6ee1fc79
--- /dev/null
+++ b/OpenMetaverse/Assets/AssetTypes/AssetCallingCard.cs
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2009, openmetaverse.org
+ * All rights reserved.
+ *
+ * - 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.
+ * - Neither the name of the openmetaverse.org 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 COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR 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 OpenMetaverse;
+
+namespace OpenMetaverse.Assets
+{
+ ///
+ /// Represents a Callingcard with AvatarID and Position vector
+ ///
+ public class AssetCallingCard : Asset
+ {
+ /// Override the base classes AssetType
+ public override AssetType AssetType { get { return AssetType.CallingCard; } }
+
+ /// UUID of the Callingcard target avatar
+ public UUID AvatarID = UUID.Zero;
+
+ /// Construct an Asset of type Callingcard
+ public AssetCallingCard() { }
+
+ ///
+ /// Construct an Asset object of type Callingcard
+ ///
+ /// A unique specific to this asset
+ /// A byte array containing the raw asset data
+ public AssetCallingCard(UUID assetID, byte[] assetData)
+ : base(assetID, assetData)
+ {
+ Decode();
+ }
+
+ ///
+ /// Constuct an asset of type Callingcard
+ ///
+ /// UUID of the target avatar
+ /// Local position of callingcard
+ public AssetCallingCard(UUID avatarID)
+ {
+ AvatarID = avatarID;
+ Encode();
+ }
+
+ ///
+ /// Encode the raw contents of a string with the specific Callingcard format
+ ///
+ public override void Encode()
+ {
+ string temp = "Callingcard version 2\n";
+ temp += "avatar_id " + AvatarID + "\n";
+ AssetData = Utils.StringToBytes(temp);
+ }
+
+ ///
+ /// Decode the raw asset data, populating the AvatarID and Position
+ ///
+ /// true if the AssetData was successfully decoded to a UUID and Vector
+ public override bool Decode()
+ {
+ String text = Utils.BytesToString(AssetData);
+ if (text.ToLower().Contains("callingcard version 2"))
+ {
+ AvatarID = new UUID(text.Substring(text.IndexOf("avatar_id") + 10, 36));
+ String vecDelim = " ";
+ return true;
+ }
+ return false;
+ }
+ }
+}
diff --git a/OpenMetaverse/Assets/AssetTypes/AssetMutable.cs b/OpenMetaverse/Assets/AssetTypes/AssetMutable.cs
new file mode 100644
index 00000000..59c6baae
--- /dev/null
+++ b/OpenMetaverse/Assets/AssetTypes/AssetMutable.cs
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2009, openmetaverse.org
+ * All rights reserved.
+ *
+ * - 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.
+ * - Neither the name of the openmetaverse.org 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 COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR 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 OpenMetaverse;
+
+namespace OpenMetaverse.Assets
+{
+ ///
+ /// Represents an Animation
+ ///
+ public class AssetMutable : Asset
+ {
+ public AssetType currentType;
+
+ /// Override the base classes AssetType
+ public override AssetType AssetType { get { return currentType; } }
+
+ /// Default Constructor
+ public AssetMutable(AssetType type)
+ {
+ currentType = type;
+ }
+
+ ///
+ /// Construct an Asset object of type Animation
+ ///
+ /// A unique specific to this asset
+ /// A byte array containing the raw asset data
+ public AssetMutable(AssetType type, UUID assetID, byte[] assetData)
+ : base(assetID, assetData)
+ {
+ currentType = type;
+ }
+
+ public override void Encode() { }
+ public override bool Decode() { return true; }
+ }
+}