diff options
Diffstat (limited to 'OpenSim/Framework')
-rw-r--r-- | OpenSim/Framework/AgentCircuitData.cs | 4 | ||||
-rw-r--r-- | OpenSim/Framework/AvatarAppearance.cs | 50 | ||||
-rw-r--r-- | OpenSim/Framework/AvatarWearable.cs | 7 | ||||
-rw-r--r-- | OpenSim/Framework/ChildAgentDataUpdate.cs | 30 | ||||
-rw-r--r-- | OpenSim/Framework/Tests/AgentCircuitDataTest.cs | 3 | ||||
-rw-r--r-- | OpenSim/Framework/Tests/MundaneFrameworkTests.cs | 5 |
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 | } |