aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Framework')
-rw-r--r--OpenSim/Framework/AgentCircuitData.cs4
-rw-r--r--OpenSim/Framework/AvatarAppearance.cs50
-rw-r--r--OpenSim/Framework/AvatarWearable.cs7
-rw-r--r--OpenSim/Framework/ChildAgentDataUpdate.cs30
-rw-r--r--OpenSim/Framework/Tests/AgentCircuitDataTest.cs3
-rw-r--r--OpenSim/Framework/Tests/MundaneFrameworkTests.cs5
6 files changed, 58 insertions, 41 deletions
diff --git a/OpenSim/Framework/AgentCircuitData.cs b/OpenSim/Framework/AgentCircuitData.cs
index 0d053e4..4529944 100644
--- a/OpenSim/Framework/AgentCircuitData.cs
+++ b/OpenSim/Framework/AgentCircuitData.cs
@@ -184,7 +184,7 @@ namespace OpenSim.Framework
184 /// Pack AgentCircuitData into an OSDMap for transmission over LLSD XML or LLSD json 184 /// Pack AgentCircuitData into an OSDMap for transmission over LLSD XML or LLSD json
185 /// </summary> 185 /// </summary>
186 /// <returns>map of the agent circuit data</returns> 186 /// <returns>map of the agent circuit data</returns>
187 public OSDMap PackAgentCircuitData() 187 public OSDMap PackAgentCircuitData(EntityTransferContext ctx)
188 { 188 {
189 OSDMap args = new OSDMap(); 189 OSDMap args = new OSDMap();
190 args["agent_id"] = OSD.FromUUID(AgentID); 190 args["agent_id"] = OSD.FromUUID(AgentID);
@@ -224,7 +224,7 @@ namespace OpenSim.Framework
224 { 224 {
225 args["appearance_serial"] = OSD.FromInteger(Appearance.Serial); 225 args["appearance_serial"] = OSD.FromInteger(Appearance.Serial);
226 226
227 OSDMap appmap = Appearance.Pack(); 227 OSDMap appmap = Appearance.Pack(ctx);
228 args["packed_appearance"] = appmap; 228 args["packed_appearance"] = appmap;
229 } 229 }
230 230
diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs
index 72c6bfc..5258760 100644
--- a/OpenSim/Framework/AvatarAppearance.cs
+++ b/OpenSim/Framework/AvatarAppearance.cs
@@ -211,13 +211,12 @@ namespace OpenSim.Framework
211 211
212 m_serial = appearance.Serial; 212 m_serial = appearance.Serial;
213 213
214 m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES]; 214 ClearWearables();
215 for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
216 m_wearables[i] = new AvatarWearable();
217 215
218 if (copyWearables && (appearance.Wearables != null)) 216 if (copyWearables && (appearance.Wearables != null))
219 { 217 {
220 for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++) 218 m_wearables = new AvatarWearable[appearance.Wearables.Length];
219 for (int i = 0; i < appearance.Wearables.Length; i++)
221 SetWearable(i,appearance.Wearables[i]); 220 SetWearable(i,appearance.Wearables[i]);
222 } 221 }
223 222
@@ -247,7 +246,7 @@ namespace OpenSim.Framework
247 246
248 public void GetAssetsFrom(AvatarAppearance app) 247 public void GetAssetsFrom(AvatarAppearance app)
249 { 248 {
250 for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++) 249 for (int i = 0; i < m_wearables.Length; i++)
251 { 250 {
252 for (int j = 0; j < m_wearables[i].Count; j++) 251 for (int j = 0; j < m_wearables[i].Count; j++)
253 { 252 {
@@ -262,8 +261,8 @@ namespace OpenSim.Framework
262 261
263 public void ClearWearables() 262 public void ClearWearables()
264 { 263 {
265 m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES]; 264 m_wearables = new AvatarWearable[AvatarWearable.LEGACY_VERSION_MAX_WEARABLES];
266 for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++) 265 for (int i = 0; i < AvatarWearable.LEGACY_VERSION_MAX_WEARABLES; i++)
267 m_wearables[i] = new AvatarWearable(); 266 m_wearables[i] = new AvatarWearable();
268 } 267 }
269 268
@@ -470,11 +469,15 @@ namespace OpenSim.Framework
470// DEBUG ON 469// DEBUG ON
471// m_log.WarnFormat("[AVATARAPPEARANCE] set wearable {0} --> {1}:{2}",wearableId,wearable.ItemID,wearable.AssetID); 470// m_log.WarnFormat("[AVATARAPPEARANCE] set wearable {0} --> {1}:{2}",wearableId,wearable.ItemID,wearable.AssetID);
472// DEBUG OFF 471// DEBUG OFF
472 if (wearableId >= m_wearables.Length)
473 {
474 int currentLength = m_wearables.Length;
475 Array.Resize(ref m_wearables, wearableId + 1);
476 for (int i = currentLength ; i < m_wearables.Length ; i++)
477 m_wearables[i] = new AvatarWearable();
478 }
473 m_wearables[wearableId].Clear(); 479 m_wearables[wearableId].Clear();
474 int count = wearable.Count; 480 for (int i = 0; i < wearable.Count; i++)
475 if (count > AvatarWearable.MAX_WEARABLES)
476 count = AvatarWearable.MAX_WEARABLES;
477 for (int i = 0; i < count; i++)
478 m_wearables[wearableId].Add(wearable[i].ItemID, wearable[i].AssetID); 481 m_wearables[wearableId].Add(wearable[i].ItemID, wearable[i].AssetID);
479 } 482 }
480 483
@@ -714,7 +717,7 @@ namespace OpenSim.Framework
714 /// <summary> 717 /// <summary>
715 /// Create an OSDMap from the appearance data 718 /// Create an OSDMap from the appearance data
716 /// </summary> 719 /// </summary>
717 public OSDMap Pack() 720 public OSDMap Pack(EntityTransferContext ctx)
718 { 721 {
719 OSDMap data = new OSDMap(); 722 OSDMap data = new OSDMap();
720 723
@@ -722,9 +725,22 @@ namespace OpenSim.Framework
722 data["height"] = OSD.FromReal(m_avatarHeight); 725 data["height"] = OSD.FromReal(m_avatarHeight);
723 726
724 // Wearables 727 // Wearables
725 OSDArray wears = new OSDArray(AvatarWearable.MAX_WEARABLES); 728 //
726 for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++) 729 // This will send as many or as few wearables as we have, unless a count
727 wears.Add(m_wearables[i].Pack()); 730 // is given. Used for legacy (pre 0.4) versions.
731 int count = ctx.WearablesCount;
732 if (ctx.WearablesCount == -1)
733 count = m_wearables.Length;
734 OSDArray wears = new OSDArray(count);
735 for (int i = 0; i < count; i++)
736 {
737 AvatarWearable dummyWearable = new AvatarWearable();
738
739 if (i < m_wearables.Length)
740 wears.Add(m_wearables[i].Pack());
741 else
742 wears.Add(dummyWearable.Pack());
743 }
728 data["wearables"] = wears; 744 data["wearables"] = wears;
729 745
730 // Avatar Textures 746 // Avatar Textures
@@ -782,8 +798,8 @@ namespace OpenSim.Framework
782 OSDArray wears = (OSDArray)(data["wearables"]); 798 OSDArray wears = (OSDArray)(data["wearables"]);
783 799
784 int count = wears.Count; 800 int count = wears.Count;
785 if (count > AvatarWearable.MAX_WEARABLES) 801
786 count = AvatarWearable.MAX_WEARABLES; 802 m_wearables = new AvatarWearable[count];
787 803
788 for (int i = 0; i < count; i++) 804 for (int i = 0; i < count; i++)
789 m_wearables[i] = new AvatarWearable((OSDArray)wears[i]); 805 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
68 public static readonly int ALPHA = 13; 68 public static readonly int ALPHA = 13;
69 public static readonly int TATTOO = 14; 69 public static readonly int TATTOO = 14;
70 70
71 public static readonly int MAX_WEARABLES = 15; 71 public static readonly int LEGACY_VERSION_MAX_WEARABLES = 15;
72// public static readonly int PHYSICS = 15; 72// public static readonly int PHYSICS = 15;
73// public static int MAX_WEARABLES = 16; 73// public static int MAX_WEARABLES = 16;
74 74
@@ -225,8 +225,9 @@ namespace OpenSim.Framework
225 { 225 {
226 get 226 get
227 { 227 {
228 AvatarWearable[] defaultWearables = new AvatarWearable[MAX_WEARABLES]; 228 // We use the legacy count here because this is just a fallback anyway
229 for (int i = 0; i < MAX_WEARABLES; i++) 229 AvatarWearable[] defaultWearables = new AvatarWearable[LEGACY_VERSION_MAX_WEARABLES];
230 for (int i = 0; i < LEGACY_VERSION_MAX_WEARABLES; i++)
230 { 231 {
231 defaultWearables[i] = new AvatarWearable(); 232 defaultWearables[i] = new AvatarWearable();
232 } 233 }
diff --git a/OpenSim/Framework/ChildAgentDataUpdate.cs b/OpenSim/Framework/ChildAgentDataUpdate.cs
index a714d86..72c2c34 100644
--- a/OpenSim/Framework/ChildAgentDataUpdate.cs
+++ b/OpenSim/Framework/ChildAgentDataUpdate.cs
@@ -61,8 +61,8 @@ namespace OpenSim.Framework
61 { 61 {
62 UUID AgentID { get; set; } 62 UUID AgentID { get; set; }
63 63
64 OSDMap Pack(); 64 OSDMap Pack(EntityTransferContext ctx);
65 void Unpack(OSDMap map, IScene scene); 65 void Unpack(OSDMap map, IScene scene, EntityTransferContext ctx);
66 } 66 }
67 67
68 /// <summary> 68 /// <summary>
@@ -96,7 +96,7 @@ namespace OpenSim.Framework
96 96
97 public Dictionary<ulong, string> ChildrenCapSeeds = null; 97 public Dictionary<ulong, string> ChildrenCapSeeds = null;
98 98
99 public OSDMap Pack() 99 public OSDMap Pack(EntityTransferContext ctx)
100 { 100 {
101 OSDMap args = new OSDMap(); 101 OSDMap args = new OSDMap();
102 args["message_type"] = OSD.FromString("AgentPosition"); 102 args["message_type"] = OSD.FromString("AgentPosition");
@@ -136,7 +136,7 @@ namespace OpenSim.Framework
136 return args; 136 return args;
137 } 137 }
138 138
139 public void Unpack(OSDMap args, IScene scene) 139 public void Unpack(OSDMap args, IScene scene, EntityTransferContext ctx)
140 { 140 {
141 if (args.ContainsKey("region_handle")) 141 if (args.ContainsKey("region_handle"))
142 UInt64.TryParse(args["region_handle"].AsString(), out RegionHandle); 142 UInt64.TryParse(args["region_handle"].AsString(), out RegionHandle);
@@ -391,8 +391,10 @@ namespace OpenSim.Framework
391 391
392 public Dictionary<string, UUID> MovementAnimationOverRides = new Dictionary<string, UUID>(); 392 public Dictionary<string, UUID> MovementAnimationOverRides = new Dictionary<string, UUID>();
393 393
394 public virtual OSDMap Pack() 394 public virtual OSDMap Pack(EntityTransferContext ctx)
395 { 395 {
396 int wearablesCount = -1;
397
396// m_log.InfoFormat("[CHILDAGENTDATAUPDATE] Pack data"); 398// m_log.InfoFormat("[CHILDAGENTDATAUPDATE] Pack data");
397 399
398 OSDMap args = new OSDMap(); 400 OSDMap args = new OSDMap();
@@ -493,7 +495,7 @@ namespace OpenSim.Framework
493 } 495 }
494 496
495 if (Appearance != null) 497 if (Appearance != null)
496 args["packed_appearance"] = Appearance.Pack(); 498 args["packed_appearance"] = Appearance.Pack(ctx);
497 499
498 //if ((AgentTextures != null) && (AgentTextures.Length > 0)) 500 //if ((AgentTextures != null) && (AgentTextures.Length > 0))
499 //{ 501 //{
@@ -584,7 +586,7 @@ namespace OpenSim.Framework
584 /// Avoiding reflection makes it painful to write, but that's the price! 586 /// Avoiding reflection makes it painful to write, but that's the price!
585 /// </summary> 587 /// </summary>
586 /// <param name="hash"></param> 588 /// <param name="hash"></param>
587 public virtual void Unpack(OSDMap args, IScene scene) 589 public virtual void Unpack(OSDMap args, IScene scene, EntityTransferContext ctx)
588 { 590 {
589 //m_log.InfoFormat("[CHILDAGENTDATAUPDATE] Unpack data"); 591 //m_log.InfoFormat("[CHILDAGENTDATAUPDATE] Unpack data");
590 592
@@ -800,11 +802,7 @@ namespace OpenSim.Framework
800 { 802 {
801 OSDArray wears = (OSDArray)(args["wearables"]); 803 OSDArray wears = (OSDArray)(args["wearables"]);
802 804
803 int count = wears.Count; 805 for (int i = 0; i < wears.Count / 2; i++)
804 if (count > AvatarWearable.MAX_WEARABLES)
805 count = AvatarWearable.MAX_WEARABLES;
806
807 for (int i = 0; i < count / 2; i++)
808 { 806 {
809 AvatarWearable awear = new AvatarWearable((OSDArray)wears[i]); 807 AvatarWearable awear = new AvatarWearable((OSDArray)wears[i]);
810 Appearance.SetWearable(i, awear); 808 Appearance.SetWearable(i, awear);
@@ -897,14 +895,14 @@ namespace OpenSim.Framework
897 895
898 public class CompleteAgentData : AgentData 896 public class CompleteAgentData : AgentData
899 { 897 {
900 public override OSDMap Pack() 898 public override OSDMap Pack(EntityTransferContext ctx)
901 { 899 {
902 return base.Pack(); 900 return base.Pack(ctx);
903 } 901 }
904 902
905 public override void Unpack(OSDMap map, IScene scene) 903 public override void Unpack(OSDMap map, IScene scene, EntityTransferContext ctx)
906 { 904 {
907 base.Unpack(map, scene); 905 base.Unpack(map, scene, ctx);
908 } 906 }
909 } 907 }
910} 908}
diff --git a/OpenSim/Framework/Tests/AgentCircuitDataTest.cs b/OpenSim/Framework/Tests/AgentCircuitDataTest.cs
index 95e9439..e8ae728 100644
--- a/OpenSim/Framework/Tests/AgentCircuitDataTest.cs
+++ b/OpenSim/Framework/Tests/AgentCircuitDataTest.cs
@@ -311,8 +311,9 @@ namespace OpenSim.Framework.Tests
311 Agent1Data.SessionID = SessionId; 311 Agent1Data.SessionID = SessionId;
312 Agent1Data.startpos = StartPos; 312 Agent1Data.startpos = StartPos;
313 313
314 EntityTransferContext ctx = new EntityTransferContext();
314 OSDMap map2; 315 OSDMap map2;
315 OSDMap map = Agent1Data.PackAgentCircuitData(); 316 OSDMap map = Agent1Data.PackAgentCircuitData(ctx);
316 try 317 try
317 { 318 {
318 string str = OSDParser.SerializeJsonString(map); 319 string str = OSDParser.SerializeJsonString(map);
diff --git a/OpenSim/Framework/Tests/MundaneFrameworkTests.cs b/OpenSim/Framework/Tests/MundaneFrameworkTests.cs
index 08f2af5..d8072c7 100644
--- a/OpenSim/Framework/Tests/MundaneFrameworkTests.cs
+++ b/OpenSim/Framework/Tests/MundaneFrameworkTests.cs
@@ -116,7 +116,8 @@ namespace OpenSim.Framework.Tests
116 position2 = new AgentPosition(); 116 position2 = new AgentPosition();
117 117
118 Assert.IsFalse(position2.AgentID == position1.AgentID, "Test Error, position2 should be a blank uninitialized AgentPosition"); 118 Assert.IsFalse(position2.AgentID == position1.AgentID, "Test Error, position2 should be a blank uninitialized AgentPosition");
119 position2.Unpack(position1.Pack(), null); 119 EntityTransferContext ctx = new EntityTransferContext();
120 position2.Unpack(position1.Pack(ctx), null, ctx);
120 121
121 Assert.IsTrue(position2.AgentID == position1.AgentID, "Agent ID didn't unpack the same way it packed"); 122 Assert.IsTrue(position2.AgentID == position1.AgentID, "Agent ID didn't unpack the same way it packed");
122 Assert.IsTrue(position2.Position == position1.Position, "Position didn't unpack the same way it packed"); 123 Assert.IsTrue(position2.Position == position1.Position, "Position didn't unpack the same way it packed");
@@ -305,4 +306,4 @@ namespace OpenSim.Framework.Tests
305 306
306 } 307 }
307 } 308 }
308} \ No newline at end of file 309}