remove duplication of textures, wearables and attachments on crossings.

receiver checks old method if it doesnt get packed appeareace
avinationmerge
UbitUmarov 2014-08-15 21:39:37 +01:00
parent 72a6bca033
commit 447fd0850a
1 changed files with 50 additions and 35 deletions

View File

@ -431,6 +431,8 @@ namespace OpenSim.Framework
// The code to pack textures, visuals, wearables and attachments // The code to pack textures, visuals, wearables and attachments
// should be removed; packed appearance contains the full appearance // should be removed; packed appearance contains the full appearance
// This is retained for backward compatibility only // This is retained for backward compatibility only
/* then lets remove
if (Appearance.Texture != null) if (Appearance.Texture != null)
{ {
byte[] rawtextures = Appearance.Texture.GetBytes(); byte[] rawtextures = Appearance.Texture.GetBytes();
@ -459,7 +461,7 @@ namespace OpenSim.Framework
args["attachments"] = attachs; args["attachments"] = attachs;
} }
// End of code to remove // End of code to remove
*/
if ((Controllers != null) && (Controllers.Length > 0)) if ((Controllers != null) && (Controllers.Length > 0))
{ {
OSDArray controls = new OSDArray(Controllers.Length); OSDArray controls = new OSDArray(Controllers.Length);
@ -647,58 +649,71 @@ namespace OpenSim.Framework
// AgentTextures[i++] = o.AsUUID(); // AgentTextures[i++] = o.AsUUID();
//} //}
Appearance = new AvatarAppearance();
// The code to unpack textures, visuals, wearables and attachments // packed_appearence should contain all appearance information
// should be removed; packed appearance contains the full appearance if (args.ContainsKey("packed_appearance") && (args["packed_appearance"]).Type == OSDType.Map)
// This is retained for backward compatibility only
if (args["texture_entry"] != null)
{ {
byte[] rawtextures = args["texture_entry"].AsBinary(); m_log.WarnFormat("[CHILDAGENTDATAUPDATE] got packed appearance");
Primitive.TextureEntry textures = new Primitive.TextureEntry(rawtextures,0,rawtextures.Length); Appearance = new AvatarAppearance((OSDMap)args["packed_appearance"]);
Appearance.SetTextureEntries(textures);
} }
else
if (args["visual_params"] != null)
Appearance.SetVisualParams(args["visual_params"].AsBinary());
if ((args["wearables"] != null) && (args["wearables"]).Type == OSDType.Array)
{ {
OSDArray wears = (OSDArray)(args["wearables"]); // if missing try the old pack method
m_log.WarnFormat("[CHILDAGENTDATAUPDATE] No packed appearance, checking old method");
int count = wears.Count; Appearance = new AvatarAppearance();
if (count > AvatarWearable.MAX_WEARABLES)
count = AvatarWearable.MAX_WEARABLES;
for (int i = 0; i < count / 2; i++) // 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)
{ {
AvatarWearable awear = new AvatarWearable((OSDArray)wears[i]); byte[] rawtextures = args["texture_entry"].AsBinary();
Appearance.SetWearable(i,awear); Primitive.TextureEntry textures = new Primitive.TextureEntry(rawtextures, 0, rawtextures.Length);
Appearance.SetTextureEntries(textures);
} }
}
if ((args["attachments"] != null) && (args["attachments"]).Type == OSDType.Array) if (args["visual_params"] != null)
{ Appearance.SetVisualParams(args["visual_params"].AsBinary());
OSDArray attachs = (OSDArray)(args["attachments"]);
foreach (OSD o in attachs) if ((args["wearables"] != null) && (args["wearables"]).Type == OSDType.Array)
{ {
if (o.Type == OSDType.Map) OSDArray wears = (OSDArray)(args["wearables"]);
int count = wears.Count;
if (count > AvatarWearable.MAX_WEARABLES)
count = AvatarWearable.MAX_WEARABLES;
for (int i = 0; i < count / 2; i++)
{ {
// We know all of these must end up as attachments so we AvatarWearable awear = new AvatarWearable((OSDArray)wears[i]);
// append rather than replace to ensure multiple attachments Appearance.SetWearable(i, awear);
// per point continues to work
// m_log.DebugFormat("[CHILDAGENTDATAUPDATE]: Appending attachments for {0}", AgentID);
Appearance.AppendAttachment(new AvatarAttachment((OSDMap)o));
} }
} }
}
// end of code to remove
if ((args["attachments"] != null) && (args["attachments"]).Type == OSDType.Array)
{
OSDArray attachs = (OSDArray)(args["attachments"]);
foreach (OSD o in attachs)
{
if (o.Type == OSDType.Map)
{
// 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
// m_log.DebugFormat("[CHILDAGENTDATAUPDATE]: Appending attachments for {0}", AgentID);
Appearance.AppendAttachment(new AvatarAttachment((OSDMap)o));
}
}
}
// end of code to remove
}
/* moved above
if (args.ContainsKey("packed_appearance") && (args["packed_appearance"]).Type == OSDType.Map) if (args.ContainsKey("packed_appearance") && (args["packed_appearance"]).Type == OSDType.Map)
Appearance = new AvatarAppearance((OSDMap)args["packed_appearance"]); Appearance = new AvatarAppearance((OSDMap)args["packed_appearance"]);
else else
m_log.WarnFormat("[CHILDAGENTDATAUPDATE] No packed appearance"); m_log.WarnFormat("[CHILDAGENTDATAUPDATE] No packed appearance");
*/
if ((args["controllers"] != null) && (args["controllers"]).Type == OSDType.Array) if ((args["controllers"] != null) && (args["controllers"]).Type == OSDType.Array)
{ {
OSDArray controls = (OSDArray)(args["controllers"]); OSDArray controls = (OSDArray)(args["controllers"]);