mirror of
https://github.com/opensim/opensim.git
synced 2026-08-09 18:55:58 +08:00
Merge commit 'cmickeyb/dev-appearance'
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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"]);
|
||||
|
||||
Reference in New Issue
Block a user