From 69585a4824a7814bbe543d624de6c3627e0b927b Mon Sep 17 00:00:00 2001
From: Melanie Thielker
Date: Sun, 1 Nov 2015 19:11:14 +0100
Subject: More plumbing of the EntityTransferContext (not yet complete)
---
OpenSim/Framework/AgentCircuitData.cs | 4 +-
OpenSim/Framework/AvatarAppearance.cs | 50 ++++++++++++++++---------
OpenSim/Framework/AvatarWearable.cs | 7 ++--
OpenSim/Framework/ChildAgentDataUpdate.cs | 28 ++++++++------
OpenSim/Framework/Tests/AgentCircuitDataTest.cs | 2 +-
5 files changed, 57 insertions(+), 34 deletions(-)
(limited to 'OpenSim/Framework')
diff --git a/OpenSim/Framework/AgentCircuitData.cs b/OpenSim/Framework/AgentCircuitData.cs
index 0d053e4..f4b35a6 100644
--- a/OpenSim/Framework/AgentCircuitData.cs
+++ b/OpenSim/Framework/AgentCircuitData.cs
@@ -184,7 +184,7 @@ namespace OpenSim.Framework
/// Pack AgentCircuitData into an OSDMap for transmission over LLSD XML or LLSD json
///
/// map of the agent circuit data
- public OSDMap PackAgentCircuitData()
+ public OSDMap PackAgentCircuitData(int wearablesCount)
{
OSDMap args = new OSDMap();
args["agent_id"] = OSD.FromUUID(AgentID);
@@ -224,7 +224,7 @@ namespace OpenSim.Framework
{
args["appearance_serial"] = OSD.FromInteger(Appearance.Serial);
- OSDMap appmap = Appearance.Pack();
+ OSDMap appmap = Appearance.Pack(wearablesCount);
args["packed_appearance"] = appmap;
}
diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs
index 72c6bfc..50746a0 100644
--- a/OpenSim/Framework/AvatarAppearance.cs
+++ b/OpenSim/Framework/AvatarAppearance.cs
@@ -211,13 +211,12 @@ namespace OpenSim.Framework
m_serial = appearance.Serial;
- m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES];
- for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
- m_wearables[i] = new AvatarWearable();
+ ClearWearables();
if (copyWearables && (appearance.Wearables != null))
{
- for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
+ m_wearables = new AvatarWearable[appearance.Wearables.Length];
+ for (int i = 0; i < appearance.Wearables.Length; i++)
SetWearable(i,appearance.Wearables[i]);
}
@@ -247,7 +246,7 @@ namespace OpenSim.Framework
public void GetAssetsFrom(AvatarAppearance app)
{
- for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
+ for (int i = 0; i < m_wearables.Length; i++)
{
for (int j = 0; j < m_wearables[i].Count; j++)
{
@@ -262,8 +261,8 @@ namespace OpenSim.Framework
public void ClearWearables()
{
- m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES];
- for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
+ m_wearables = new AvatarWearable[AvatarWearable.LEGACY_VERSION_MAX_WEARABLES];
+ for (int i = 0; i < AvatarWearable.LEGACY_VERSION_MAX_WEARABLES; i++)
m_wearables[i] = new AvatarWearable();
}
@@ -470,11 +469,15 @@ namespace OpenSim.Framework
// DEBUG ON
// m_log.WarnFormat("[AVATARAPPEARANCE] set wearable {0} --> {1}:{2}",wearableId,wearable.ItemID,wearable.AssetID);
// DEBUG OFF
+ if (wearableId >= m_wearables.Length)
+ {
+ int currentLength = m_wearables.Length;
+ Array.Resize(ref m_wearables, wearableId + 1);
+ for (int i = currentLength ; i < m_wearables.Length ; i++)
+ m_wearables[i] = new AvatarWearable();
+ }
m_wearables[wearableId].Clear();
- int count = wearable.Count;
- if (count > AvatarWearable.MAX_WEARABLES)
- count = AvatarWearable.MAX_WEARABLES;
- for (int i = 0; i < count; i++)
+ for (int i = 0; i < wearable.Count; i++)
m_wearables[wearableId].Add(wearable[i].ItemID, wearable[i].AssetID);
}
@@ -714,7 +717,7 @@ namespace OpenSim.Framework
///
/// Create an OSDMap from the appearance data
///
- public OSDMap Pack()
+ public OSDMap Pack(int wearablesCount)
{
OSDMap data = new OSDMap();
@@ -722,9 +725,22 @@ namespace OpenSim.Framework
data["height"] = OSD.FromReal(m_avatarHeight);
// Wearables
- OSDArray wears = new OSDArray(AvatarWearable.MAX_WEARABLES);
- for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
- wears.Add(m_wearables[i].Pack());
+ //
+ // This will send as many or as few wearables as we have, unless a count
+ // is given. Used for legacy (pre 0.4) versions.
+ int count = wearablesCount;
+ if (wearablesCount == -1)
+ count = m_wearables.Length;
+ OSDArray wears = new OSDArray(count);
+ for (int i = 0; i < count; i++)
+ {
+ AvatarWearable dummyWearable = new AvatarWearable();
+
+ if (i < m_wearables.Length)
+ wears.Add(m_wearables[i].Pack());
+ else
+ wears.Add(dummyWearable.Pack());
+ }
data["wearables"] = wears;
// Avatar Textures
@@ -782,8 +798,8 @@ namespace OpenSim.Framework
OSDArray wears = (OSDArray)(data["wearables"]);
int count = wears.Count;
- if (count > AvatarWearable.MAX_WEARABLES)
- count = AvatarWearable.MAX_WEARABLES;
+
+ m_wearables = new AvatarWearable[count];
for (int i = 0; i < count; i++)
m_wearables[i] = new AvatarWearable((OSDArray)wears[i]);
diff --git a/OpenSim/Framework/AvatarWearable.cs b/OpenSim/Framework/AvatarWearable.cs
index e662d5f..80ed77f 100644
--- a/OpenSim/Framework/AvatarWearable.cs
+++ b/OpenSim/Framework/AvatarWearable.cs
@@ -68,7 +68,7 @@ namespace OpenSim.Framework
public static readonly int ALPHA = 13;
public static readonly int TATTOO = 14;
- public static readonly int MAX_WEARABLES = 15;
+ public static readonly int LEGACY_VERSION_MAX_WEARABLES = 15;
// public static readonly int PHYSICS = 15;
// public static int MAX_WEARABLES = 16;
@@ -225,8 +225,9 @@ namespace OpenSim.Framework
{
get
{
- AvatarWearable[] defaultWearables = new AvatarWearable[MAX_WEARABLES];
- for (int i = 0; i < MAX_WEARABLES; i++)
+ // We use the legacy count here because this is just a fallback anyway
+ AvatarWearable[] defaultWearables = new AvatarWearable[LEGACY_VERSION_MAX_WEARABLES];
+ for (int i = 0; i < LEGACY_VERSION_MAX_WEARABLES; i++)
{
defaultWearables[i] = new AvatarWearable();
}
diff --git a/OpenSim/Framework/ChildAgentDataUpdate.cs b/OpenSim/Framework/ChildAgentDataUpdate.cs
index a714d86..2fce155 100644
--- a/OpenSim/Framework/ChildAgentDataUpdate.cs
+++ b/OpenSim/Framework/ChildAgentDataUpdate.cs
@@ -61,7 +61,7 @@ namespace OpenSim.Framework
{
UUID AgentID { get; set; }
- OSDMap Pack();
+ OSDMap Pack(Object parms = null);
void Unpack(OSDMap map, IScene scene);
}
@@ -96,7 +96,7 @@ namespace OpenSim.Framework
public Dictionary ChildrenCapSeeds = null;
- public OSDMap Pack()
+ public OSDMap Pack(Object parms = null)
{
OSDMap args = new OSDMap();
args["message_type"] = OSD.FromString("AgentPosition");
@@ -391,8 +391,18 @@ namespace OpenSim.Framework
public Dictionary MovementAnimationOverRides = new Dictionary();
- public virtual OSDMap Pack()
+ public virtual OSDMap Pack(Object parms = null)
{
+ int wearablesCount = -1;
+
+ if (parms != null)
+ {
+ Hashtable p = (Hashtable)parms;
+
+ if (p.ContainsKey("wearablesCount"))
+ wearablesCount = (int)p["wearablesCount"];
+ }
+
// m_log.InfoFormat("[CHILDAGENTDATAUPDATE] Pack data");
OSDMap args = new OSDMap();
@@ -493,7 +503,7 @@ namespace OpenSim.Framework
}
if (Appearance != null)
- args["packed_appearance"] = Appearance.Pack();
+ args["packed_appearance"] = Appearance.Pack(wearablesCount);
//if ((AgentTextures != null) && (AgentTextures.Length > 0))
//{
@@ -800,11 +810,7 @@ namespace OpenSim.Framework
{
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++)
+ for (int i = 0; i < wears.Count / 2; i++)
{
AvatarWearable awear = new AvatarWearable((OSDArray)wears[i]);
Appearance.SetWearable(i, awear);
@@ -897,9 +903,9 @@ namespace OpenSim.Framework
public class CompleteAgentData : AgentData
{
- public override OSDMap Pack()
+ public override OSDMap Pack(object parms = null)
{
- return base.Pack();
+ return base.Pack(parms);
}
public override void Unpack(OSDMap map, IScene scene)
diff --git a/OpenSim/Framework/Tests/AgentCircuitDataTest.cs b/OpenSim/Framework/Tests/AgentCircuitDataTest.cs
index 95e9439..a2a2eea 100644
--- a/OpenSim/Framework/Tests/AgentCircuitDataTest.cs
+++ b/OpenSim/Framework/Tests/AgentCircuitDataTest.cs
@@ -312,7 +312,7 @@ namespace OpenSim.Framework.Tests
Agent1Data.startpos = StartPos;
OSDMap map2;
- OSDMap map = Agent1Data.PackAgentCircuitData();
+ OSDMap map = Agent1Data.PackAgentCircuitData(-1);
try
{
string str = OSDParser.SerializeJsonString(map);
--
cgit v1.1