Merge commit 'cmickeyb/dev-appearance'

This commit is contained in:
Melanie
2010-10-29 21:06:46 +01:00
14 changed files with 583 additions and 319 deletions

View File

@@ -206,16 +206,18 @@ namespace OpenSim.Framework
args["service_session_id"] = OSD.FromString(ServiceSessionID);
args["start_pos"] = OSD.FromString(startpos.ToString());
args["appearance_serial"] = OSD.FromInteger(Appearance.Serial);
args["client_ip"] = OSD.FromString(IPAddress);
args["viewer"] = OSD.FromString(Viewer);
args["channel"] = OSD.FromString(Channel);
args["mac"] = OSD.FromString(Mac);
args["id0"] = OSD.FromString(Id0);
/*
// Eventually this code should be deprecated, use full appearance
// packing in packed_appearance
if (Appearance != null)
{
args["appearance_serial"] = OSD.FromInteger(Appearance.Serial);
//System.Console.WriteLine("XXX Before packing Wearables");
if ((Appearance.Wearables != null) && (Appearance.Wearables.Length > 0))
{
@@ -230,20 +232,19 @@ namespace OpenSim.Framework
}
//System.Console.WriteLine("XXX Before packing Attachments");
Dictionary<int, AvatarAttachment> attachments = Appearance.Attachments;
List<AvatarAttachment> attachments = Appearance.GetAttachments();
if ((attachments != null) && (attachments.Count > 0))
{
OSDArray attachs = new OSDArray(attachments.Count);
foreach (KeyValuePair<int, AvatarAttachment> kvp in attachments)
foreach (AvatarAttachment attach in attachments)
{
AvatarAttachment adata = new AvatarAttachment(kvp.Value);
attachs.Add(adata.Pack());
attachs.Add(attach.Pack());
//System.Console.WriteLine("XXX att.pt=" + kvp.Key + "; itemID=" + kvp.Value[0] + "; assetID=" + kvp.Value[1]);
}
args["attachments"] = attachs;
}
}
*/
if (Appearance != null)
{
OSDMap appmap = Appearance.Pack();
@@ -339,15 +340,40 @@ namespace OpenSim.Framework
try {
// Unpack various appearance elements
Appearance = new AvatarAppearance(AgentID);
if (args["packed_appearance"] != null)
// Eventually this code should be deprecated, use full appearance
// packing in packed_appearance
if (args["appearance_serial"] != null)
Appearance.Serial = args["appearance_serial"].AsInteger();
if ((args["wearables"] != null) && (args["wearables"]).Type == OSDType.Array)
{
if (args["packed_appearance"].Type == OSDType.Map)
OSDArray wears = (OSDArray)(args["wearables"]);
for (int i = 0; i < wears.Count / 2; i++)
{
Appearance.Unpack((OSDMap)args["packed_appearance"]);
m_log.WarnFormat("[AGENTCIRCUITDATA] unpacked appearance");
AvatarWearable awear = new AvatarWearable(wears[i*2].AsUUID(),wears[(i*2)+1].AsUUID());
Appearance.SetWearable(i,awear);
}
else
m_log.WarnFormat("[AGENTCIRCUITDATA] packed_appearance is not a map:\n{0}",args["packed_appearance"].ToString());
}
if ((args["attachments"] != null) && (args["attachments"]).Type == OSDType.Array)
{
OSDArray attachs = (OSDArray)(args["attachments"]);
foreach (OSD o in attachs)
{
if (o.Type == OSDType.Map)
{
Appearance.AppendAttachment(new AvatarAttachment((OSDMap)o));
}
}
}
if (args.ContainsKey("packed_appearance") && (args["packed_appearance"].Type == OSDType.Map))
{
Appearance.Unpack((OSDMap)args["packed_appearance"]);
// DEBUG ON
m_log.WarnFormat("[AGENTCIRCUITDATA] unpacked appearance");
// DEBUG OFF
}
// DEBUG ON
else
@@ -358,36 +384,6 @@ namespace OpenSim.Framework
m_log.ErrorFormat("[AGENTCIRCUITDATA] failed to unpack appearance; {0}",e.Message);
}
/*
if (args["appearance_serial"] != null)
Appearance.Serial = args["appearance_serial"].AsInteger();
if ((args["wearables"] != null) && (args["wearables"]).Type == OSDType.Array)
{
OSDArray wears = (OSDArray)(args["wearables"]);
for (int i = 0; i < wears.Count / 2; i++)
{
Appearance.Wearables[i].ItemID = wears[i*2].AsUUID();
Appearance.Wearables[i].AssetID = wears[(i*2)+1].AsUUID();
}
}
if ((args["attachments"] != null) && (args["attachments"]).Type == OSDType.Array)
{
OSDArray attachs = (OSDArray)(args["attachments"]);
AvatarAttachment[] attachments = new AvatarAttachment[attachs.Count];
int i = 0;
foreach (OSD o in attachs)
{
if (o.Type == OSDType.Map)
{
attachments[i++] = new AvatarAttachment((OSDMap)o);
}
}
Appearance.SetAttachments(attachments);
}
*/
ServiceURLs = new Dictionary<string, object>();
if (args.ContainsKey("service_urls") && args["service_urls"] != null && (args["service_urls"]).Type == OSDType.Array)
{

View File

@@ -143,13 +143,14 @@ namespace OpenSim.Framework
public readonly static int VISUALPARAM_COUNT = 218;
public readonly static int TEXTURE_COUNT = 21;
public readonly static byte[] BAKE_INDICES = new byte[] { 8, 9, 10, 11, 19, 20 };
protected UUID m_owner;
protected int m_serial = 1;
protected byte[] m_visualparams;
protected Primitive.TextureEntry m_texture;
protected AvatarWearable[] m_wearables;
protected Dictionary<int, AvatarAttachment> m_attachments;
protected Dictionary<int, List<AvatarAttachment>> m_attachments;
protected float m_avatarHeight = 0;
protected float m_hipOffset = 0;
@@ -183,11 +184,6 @@ namespace OpenSim.Framework
set { m_wearables = value; }
}
public virtual Dictionary<int, AvatarAttachment> Attachments
{
get { return m_attachments; }
}
public virtual UUID BodyItem {
get { return m_wearables[AvatarWearable.BODY].ItemID; }
set { m_wearables[AvatarWearable.BODY].ItemID = value; }
@@ -336,7 +332,7 @@ namespace OpenSim.Framework
// DEBUG ON
m_log.WarnFormat("[AVATAR APPEARANCE] create empty appearance for {0}",owner);
// DEBUG OFF
m_serial = 0;
m_serial = 1;
m_owner = owner;
SetDefaultWearables();
@@ -344,7 +340,7 @@ namespace OpenSim.Framework
SetDefaultParams();
SetHeight();
m_attachments = new Dictionary<int, AvatarAttachment>();
m_attachments = new Dictionary<int, List<AvatarAttachment>>();
}
public AvatarAppearance(UUID avatarID, OSDMap map)
@@ -382,7 +378,7 @@ namespace OpenSim.Framework
SetHeight();
m_attachments = new Dictionary<int, AvatarAttachment>();
m_attachments = new Dictionary<int, List<AvatarAttachment>>();
}
public AvatarAppearance(AvatarAppearance appearance)
@@ -392,7 +388,7 @@ namespace OpenSim.Framework
// DEBUG OFF
if (appearance == null)
{
m_serial = 0;
m_serial = 1;
m_owner = UUID.Zero;
SetDefaultWearables();
@@ -400,7 +396,7 @@ namespace OpenSim.Framework
SetDefaultParams();
SetHeight();
m_attachments = new Dictionary<int, AvatarAttachment>();
m_attachments = new Dictionary<int, List<AvatarAttachment>>();
return;
}
@@ -427,9 +423,10 @@ namespace OpenSim.Framework
if (appearance.VisualParams != null)
m_visualparams = (byte[])appearance.VisualParams.Clone();
m_attachments = new Dictionary<int, AvatarAttachment>();
foreach (KeyValuePair<int, AvatarAttachment> kvp in appearance.Attachments)
m_attachments[kvp.Key] = new AvatarAttachment(kvp.Value);
// Copy the attachment, force append mode since that ensures consistency
m_attachments = new Dictionary<int, List<AvatarAttachment>>();
foreach (AvatarAttachment attachment in appearance.GetAttachments())
AppendAttachment(new AvatarAttachment(attachment));
}
protected virtual void SetDefaultWearables()
@@ -449,14 +446,8 @@ namespace OpenSim.Framework
protected virtual void SetDefaultTexture()
{
m_texture = new Primitive.TextureEntry(new UUID("C228D1CF-4B5D-4BA8-84F4-899A0796AA97"));
// The initialization of these seems to force a rebake regardless of whether it is needed
// m_textures.CreateFace(0).TextureID = new UUID("00000000-0000-1111-9999-000000000012");
// m_textures.CreateFace(1).TextureID = Util.BLANK_TEXTURE_UUID;
// m_textures.CreateFace(2).TextureID = Util.BLANK_TEXTURE_UUID;
// m_textures.CreateFace(3).TextureID = new UUID("6522E74D-1660-4E7F-B601-6F48C1659A77");
// m_textures.CreateFace(4).TextureID = new UUID("7CA39B4C-BD19-4699-AFF7-F93FD03D3E7B");
// m_textures.CreateFace(5).TextureID = new UUID("00000000-0000-1111-9999-000000000010");
// m_textures.CreateFace(6).TextureID = new UUID("00000000-0000-1111-9999-000000000011");
for (uint i = 0; i < TEXTURE_COUNT; i++)
m_texture.CreateFace(i).TextureID = new UUID(AppearanceManager.DEFAULT_AVATAR_TEXTURE);
}
/// <summary>
@@ -473,7 +464,7 @@ namespace OpenSim.Framework
// made. We determine if any of the textures actually
// changed to know if the appearance should be saved later
bool changed = false;
for (int i = 0; i < AvatarAppearance.TEXTURE_COUNT; i++)
for (uint i = 0; i < AvatarAppearance.TEXTURE_COUNT; i++)
{
Primitive.TextureEntryFace newface = textureEntry.FaceTextures[i];
Primitive.TextureEntryFace oldface = m_texture.FaceTextures[i];
@@ -487,14 +478,14 @@ namespace OpenSim.Framework
if (oldface != null && oldface.TextureID == newface.TextureID) continue;
}
m_texture.FaceTextures[i] = (newface != null) ? new Primitive.TextureEntryFace(newface) : null;
changed = true;
// DEBUG ON
if (newface != null)
m_log.WarnFormat("[SCENEPRESENCE] index {0}, new texture id {1}",i,newface.TextureID);
m_log.WarnFormat("[AVATAR APPEARANCE] index {0}, new texture id {1}",i,newface.TextureID);
// DEBUG OFF
}
m_texture = textureEntry;
return changed;
}
@@ -517,8 +508,8 @@ namespace OpenSim.Framework
if (visualParams[i] != m_visualparams[i])
{
// DEBUG ON
m_log.WarnFormat("[AVATARAPPEARANCE] vparams changed [{0}] {1} ==> {2}",
i,m_visualparams[i],visualParams[i]);
// m_log.WarnFormat("[AVATARAPPEARANCE] vparams changed [{0}] {1} ==> {2}",
// i,m_visualparams[i],visualParams[i]);
// DEBUG OFF
m_visualparams[i] = visualParams[i];
changed = true;
@@ -569,6 +560,9 @@ namespace OpenSim.Framework
public override String ToString()
{
String s = "";
s += String.Format("Serial: {0}\n",m_serial);
for (uint i = 0; i < AvatarAppearance.TEXTURE_COUNT; i++)
if (m_texture.FaceTextures[i] != null)
s += String.Format("Texture: {0} --> {1}\n",i,m_texture.FaceTextures[i].TextureID);
@@ -585,12 +579,41 @@ namespace OpenSim.Framework
}
// DEBUG OFF
public void SetAttachments(AvatarAttachment[] data)
/// <summary>
/// Get a list of the attachments, note that there may be
/// duplicate attachpoints
/// </summary>
public List<AvatarAttachment> GetAttachments()
{
foreach (AvatarAttachment attach in data)
m_attachments[attach.AttachPoint] = new AvatarAttachment(attach);
List<AvatarAttachment> alist = new List<AvatarAttachment>();
foreach (KeyValuePair<int, List<AvatarAttachment>> kvp in m_attachments)
{
foreach (AvatarAttachment attach in kvp.Value)
alist.Add(new AvatarAttachment(attach));
}
return alist;
}
internal void AppendAttachment(AvatarAttachment attach)
{
if (! m_attachments.ContainsKey(attach.AttachPoint))
m_attachments[attach.AttachPoint] = new List<AvatarAttachment>();
m_attachments[attach.AttachPoint].Add(attach);
}
internal void ReplaceAttachment(AvatarAttachment attach)
{
m_attachments[attach.AttachPoint] = new List<AvatarAttachment>();
m_attachments[attach.AttachPoint].Add(attach);
}
/// <summary>
/// Add an attachment, if the attachpoint has the
/// 0x80 bit set then we assume this is an append
/// operation otherwise we replace whatever is
/// currently attached at the attachpoint
/// </summary>
public void SetAttachment(int attachpoint, UUID item, UUID asset)
{
if (attachpoint == 0)
@@ -603,67 +626,47 @@ namespace OpenSim.Framework
return;
}
m_attachments[attachpoint] = new AvatarAttachment(attachpoint,item,asset);
}
public Hashtable GetAttachments()
{
if (m_attachments.Count == 0)
return null;
Hashtable ret = new Hashtable();
foreach (KeyValuePair<int, AvatarAttachment> kvp in m_attachments)
// check if this is an append or a replace, 0x80 marks it as an append
if ((attachpoint & 0x80) > 0)
{
Hashtable data = new Hashtable();
data["item"] = kvp.Value.ItemID.ToString();
data["asset"] = kvp.Value.AssetID.ToString();
ret[kvp.Key] = data;
// strip the append bit
int point = attachpoint & 0x7F;
AppendAttachment(new AvatarAttachment(point, item, asset));
}
else
{
ReplaceAttachment(new AvatarAttachment(attachpoint,item,asset));
}
return ret;
}
public List<int> GetAttachedPoints()
{
return new List<int>(m_attachments.Keys);
}
public UUID GetAttachedItem(int attachpoint)
{
if (!m_attachments.ContainsKey(attachpoint))
return UUID.Zero;
return m_attachments[attachpoint].ItemID;
}
public UUID GetAttachedAsset(int attachpoint)
{
if (!m_attachments.ContainsKey(attachpoint))
return UUID.Zero;
return m_attachments[attachpoint].AssetID;
}
public int GetAttachpoint(UUID itemID)
{
foreach (KeyValuePair<int, AvatarAttachment> kvp in m_attachments)
foreach (KeyValuePair<int, List<AvatarAttachment>> kvp in m_attachments)
{
if (kvp.Value.ItemID == itemID)
{
int index = kvp.Value.FindIndex(delegate(AvatarAttachment a) { return a.ItemID == itemID; });
if (index >= 0)
return kvp.Key;
}
}
return 0;
}
public void DetachAttachment(UUID itemID)
{
int attachpoint = GetAttachpoint(itemID);
foreach (KeyValuePair<int, List<AvatarAttachment>> kvp in m_attachments)
{
int index = kvp.Value.FindIndex(delegate(AvatarAttachment a) { return a.ItemID == itemID; });
if (index >= 0)
{
// Remove it from the list of attachments at that attach point
m_attachments[kvp.Key].RemoveAt(index);
if (attachpoint > 0)
m_attachments.Remove(attachpoint);
// And remove the list if there are no more attachments here
if (m_attachments[kvp.Key].Count == 0)
m_attachments.Remove(kvp.Key);
return;
}
}
}
public void ClearAttachments()
@@ -671,6 +674,8 @@ namespace OpenSim.Framework
m_attachments.Clear();
}
#region Packing Functions
/// <summary>
/// Create an OSDMap from the appearance data
/// </summary>
@@ -695,7 +700,7 @@ namespace OpenSim.Framework
if (m_texture.FaceTextures[i] != null)
textures.Add(OSD.FromUUID(m_texture.FaceTextures[i].TextureID));
else
textures.Add(OSD.FromUUID(UUID.Zero));
textures.Add(OSD.FromUUID(AppearanceManager.DEFAULT_AVATAR_TEXTURE));
}
data["textures"] = textures;
@@ -705,8 +710,8 @@ namespace OpenSim.Framework
// Attachments
OSDArray attachs = new OSDArray(m_attachments.Count);
foreach (KeyValuePair<int, AvatarAttachment> kvp in m_attachments)
attachs.Add(kvp.Value.Pack());
foreach (AvatarAttachment attach in GetAttachments())
attachs.Add(attach.Pack());
data["attachments"] = attachs;
return data;
@@ -718,8 +723,8 @@ namespace OpenSim.Framework
/// </summary>
public void Unpack(OSDMap data)
{
if ((data != null) && (data["appearance_serial"] != null))
m_serial = data["appearance_serial"].AsInteger();
if ((data != null) && (data["serial"] != null))
m_serial = data["serial"].AsInteger();
if ((data != null) && (data["height"] != null))
m_avatarHeight = (float)data["height"].AsReal();
if ((data != null) && (data["hipoffset"] != null))
@@ -747,12 +752,10 @@ namespace OpenSim.Framework
OSDArray textures = (OSDArray)(data["textures"]);
for (int i = 0; i < AvatarAppearance.TEXTURE_COUNT && i < textures.Count; i++)
{
UUID textureID = AppearanceManager.DEFAULT_AVATAR_TEXTURE;
if (textures[i] != null)
{
UUID textureID = textures[i].AsUUID();
if (textureID != UUID.Zero)
m_texture.CreateFace((uint)i).TextureID = textureID;
}
textureID = textures[i].AsUUID();
m_texture.CreateFace((uint)i).TextureID = new UUID(textureID);
}
}
else
@@ -773,15 +776,12 @@ namespace OpenSim.Framework
}
// Attachments
m_attachments = new Dictionary<int, AvatarAttachment>();
m_attachments = new Dictionary<int, List<AvatarAttachment>>();
if ((data != null) && (data["attachments"] != null) && (data["attachments"]).Type == OSDType.Array)
{
OSDArray attachs = (OSDArray)(data["attachments"]);
for (int i = 0; i < attachs.Count; i++)
{
AvatarAttachment attach = new AvatarAttachment((OSDMap)attachs[i]);
m_attachments[attach.AttachPoint] = attach;
}
AppendAttachment(new AvatarAttachment((OSDMap)attachs[i]));
}
}
catch (Exception e)
@@ -790,6 +790,9 @@ namespace OpenSim.Framework
}
}
#endregion
#region VPElement
/// <summary>
/// Viewer Params Array Element for AgentSetAppearance
@@ -1553,5 +1556,6 @@ namespace OpenSim.Framework
SKIRT_SKIRT_GREEN = 216,
SKIRT_SKIRT_BLUE = 217
}
#endregion
}
}

View File

@@ -31,6 +31,7 @@ using System.Collections.Generic;
using System.IO;
using System.Reflection;
using log4net;
using Nini.Config;
using OpenMetaverse;
using OpenSim.Framework.Servers;
using OpenSim.Framework.Servers.HttpServer;
@@ -112,6 +113,8 @@ namespace OpenSim.Framework.Capabilities
private string m_regionName;
private object m_fetchLock = new Object();
private bool m_persistBakedTextures = false;
public bool SSLCaps
{
get { return m_httpListener.UseSSL; }
@@ -145,6 +148,15 @@ namespace OpenSim.Framework.Capabilities
m_httpListenPort = httpPort;
m_persistBakedTextures = false;
IConfigSource config = m_Scene.Config;
if (config != null)
{
IConfig sconfig = config.Configs["Startup"];
if (sconfig != null)
m_persistBakedTextures = sconfig.GetBoolean("PersistBakedTextures",m_persistBakedTextures);
}
if (httpServer != null && httpServer.UseSSL)
{
m_httpListenPort = httpServer.SSLPort;
@@ -983,7 +995,7 @@ namespace OpenSim.Framework.Capabilities
asset = new AssetBase(assetID, "Baked Texture", (sbyte)AssetType.Texture, m_agentID.ToString());
asset.Data = data;
asset.Temporary = true;
asset.Local = true;
asset.Local = ! m_persistBakedTextures; // Local assets aren't persisted, non-local are
m_assetCache.Store(asset);
}

View File

@@ -28,6 +28,8 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using log4net;
using OpenMetaverse;
using OpenMetaverse.StructuredData;
@@ -310,6 +312,12 @@ namespace OpenSim.Framework
// Appearance
public AvatarAppearance Appearance;
// DEBUG ON
private static readonly ILog m_log =
LogManager.GetLogger(
MethodBase.GetCurrentMethod().DeclaringType);
// DEBUG OFF
/*
public byte[] AgentTextures;
public byte[] VisualParams;
@@ -323,6 +331,10 @@ namespace OpenSim.Framework
public virtual OSDMap Pack()
{
// DEBUG ON
m_log.WarnFormat("[CHILDAGENTDATAUPDATE] Pack data");
// DEBUG OFF
OSDMap args = new OSDMap();
args["message_type"] = OSD.FromString("AgentData");
@@ -387,31 +399,40 @@ namespace OpenSim.Framework
// args["agent_textures"] = textures;
//}
/*
if ((AgentTextures != null) && (AgentTextures.Length > 0))
args["texture_entry"] = OSD.FromBinary(AgentTextures);
// The code to pack textures, visuals, wearables and attachments
// should be removed; packed appearance contains the full appearance
// This is retained for backward compatibility only
if (Appearance.Texture != null)
{
byte[] rawtextures = Appearance.Texture.GetBytes();
args["texture_entry"] = OSD.FromBinary(rawtextures);
}
if ((VisualParams != null) && (VisualParams.Length > 0))
args["visual_params"] = OSD.FromBinary(VisualParams);
if ((Appearance.VisualParams != null) && (Appearance.VisualParams.Length > 0))
args["visual_params"] = OSD.FromBinary(Appearance.VisualParams);
// We might not pass this in all cases...
if ((Wearables != null) && (Wearables.Length > 0))
if ((Appearance.Wearables != null) && (Appearance.Wearables.Length > 0))
{
OSDArray wears = new OSDArray(Wearables.Length);
foreach (UUID uuid in Wearables)
wears.Add(OSD.FromUUID(uuid));
OSDArray wears = new OSDArray(Appearance.Wearables.Length * 2);
foreach (AvatarWearable awear in Appearance.Wearables)
{
wears.Add(OSD.FromUUID(awear.ItemID));
wears.Add(OSD.FromUUID(awear.AssetID));
}
args["wearables"] = wears;
}
if ((Attachments != null) && (Attachments.Length > 0))
List<AvatarAttachment> attachments = Appearance.GetAttachments();
if ((attachments != null) && (attachments.Count > 0))
{
OSDArray attachs = new OSDArray(Attachments.Length);
foreach (AvatarAttachment att in Attachments)
OSDArray attachs = new OSDArray(attachments.Count);
foreach (AvatarAttachment att in attachments)
attachs.Add(att.Pack());
args["attachments"] = attachs;
}
*/
// End of code to remove
if ((Controllers != null) && (Controllers.Length > 0))
{
OSDArray controls = new OSDArray(Controllers.Length);
@@ -435,6 +456,10 @@ namespace OpenSim.Framework
/// <param name="hash"></param>
public virtual void Unpack(OSDMap args)
{
// DEBUG ON
m_log.WarnFormat("[CHILDAGENTDATAUPDATE] Unpack data");
// DEBUG OFF
if (args.ContainsKey("region_id"))
UUID.TryParse(args["region_id"].AsString(), out RegionID);
@@ -547,41 +572,54 @@ namespace OpenSim.Framework
// AgentTextures[i++] = o.AsUUID();
//}
if (args["packed_appearance"] != null)
Appearance = new AvatarAppearance(AgentID,(OSDMap)args["packed_appearance"]);
else
Appearance = new AvatarAppearance(AgentID);
/*
Appearance = new AvatarAppearance(AgentID);
// The code to unpack textures, visuals, wearables and attachments
// should be removed; packed appearance contains the full appearance
// This is retained for backward compatibility only
if (args["texture_entry"] != null)
AgentTextures = args["texture_entry"].AsBinary();
{
byte[] rawtextures = args["texture_entry"].AsBinary();
Primitive.TextureEntry textures = new Primitive.TextureEntry(rawtextures,0,rawtextures.Length);
Appearance.SetTextureEntries(textures);
}
if (args["visual_params"] != null)
VisualParams = args["visual_params"].AsBinary();
Appearance.SetVisualParams(args["visual_params"].AsBinary());
if ((args["wearables"] != null) && (args["wearables"]).Type == OSDType.Array)
{
OSDArray wears = (OSDArray)(args["wearables"]);
Wearables = new UUID[wears.Count];
int i = 0;
foreach (OSD o in wears)
Wearables[i++] = o.AsUUID();
for (int i = 0; i < wears.Count / 2; i++)
{
AvatarWearable awear = new AvatarWearable(wears[i*2].AsUUID(),wears[(i*2)+1].AsUUID());
Appearance.SetWearable(i,awear);
}
}
if ((args["attachments"] != null) && (args["attachments"]).Type == OSDType.Array)
{
OSDArray attachs = (OSDArray)(args["attachments"]);
Attachments = new AvatarAttachment[attachs.Count];
int i = 0;
foreach (OSD o in attachs)
{
if (o.Type == OSDType.Map)
{
Attachments[i++] = new AvatarAttachment((OSDMap)o);
// We know all of these must end up as attachments so we
// append rather than replace to ensure multiple attachments
// per point continues to work
Appearance.AppendAttachment(new AvatarAttachment((OSDMap)o));
}
}
}
*/
// end of code to remove
if (args.ContainsKey("packed_appearance") && (args["packed_appearance"]).Type == OSDType.Map)
Appearance = new AvatarAppearance(AgentID,(OSDMap)args["packed_appearance"]);
// DEBUG ON
else
m_log.WarnFormat("[CHILDAGENTDATAUPDATE] No packed appearance");
// DEBUG OFF
if ((args["controllers"] != null) && (args["controllers"]).Type == OSDType.Array)
{
OSDArray controls = (OSDArray)(args["controllers"]);