aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/Framework/Scenes/ChildAgentDataUpdate.cs91
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs50
2 files changed, 75 insertions, 66 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ChildAgentDataUpdate.cs b/OpenSim/Region/Framework/Scenes/ChildAgentDataUpdate.cs
index 38eceb1..be3069a 100644
--- a/OpenSim/Region/Framework/Scenes/ChildAgentDataUpdate.cs
+++ b/OpenSim/Region/Framework/Scenes/ChildAgentDataUpdate.cs
@@ -207,39 +207,6 @@ namespace OpenSim.Region.Framework.Scenes
207 } 207 }
208 } 208 }
209 209
210 //public class AgentAnimationData
211 //{
212 // public UUID Animation;
213 // public UUID ObjectID;
214
215 // public AgentAnimationData(UUID anim, UUID obj)
216 // {
217 // Animation = anim;
218 // ObjectID = obj;
219 // }
220
221 // public AgentAnimationData(OSDMap args)
222 // {
223 // UnpackUpdateMessage(args);
224 // }
225
226 // public OSDMap PackUpdateMessage()
227 // {
228 // OSDMap anim = new OSDMap();
229 // anim["animation"] = OSD.FromUUID(Animation);
230 // anim["object_id"] = OSD.FromUUID(ObjectID);
231 // return anim;
232 // }
233
234 // public void UnpackUpdateMessage(OSDMap args)
235 // {
236 // if (args["animation"] != null)
237 // Animation = args["animation"].AsUUID();
238 // if (args["object_id"] != null)
239 // ObjectID = args["object_id"].AsUUID();
240 // }
241 //}
242
243 public class AgentData : IAgentData 210 public class AgentData : IAgentData
244 { 211 {
245 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 212 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
@@ -276,16 +243,17 @@ namespace OpenSim.Region.Framework.Scenes
276 public bool AlwaysRun; 243 public bool AlwaysRun;
277 public UUID PreyAgent; 244 public UUID PreyAgent;
278 public Byte AgentAccess; 245 public Byte AgentAccess;
279 public UUID[] AgentTextures;
280 public UUID ActiveGroupID; 246 public UUID ActiveGroupID;
281 247
282 public AgentGroupData[] Groups; 248 public AgentGroupData[] Groups;
283 public Animation[] Anims; 249 public Animation[] Anims;
284 250
285 public UUID GranterID; 251 public UUID GranterID;
286 public Dictionary<string, string> NVPairs;
287 252
253 // Appearance
254 public UUID[] AgentTextures;
288 public byte[] VisualParams; 255 public byte[] VisualParams;
256 public UUID[] Wearables;
289 257
290 public string CallbackURI; 258 public string CallbackURI;
291 259
@@ -325,14 +293,6 @@ namespace OpenSim.Region.Framework.Scenes
325 args["prey_agent"] = OSD.FromUUID(PreyAgent); 293 args["prey_agent"] = OSD.FromUUID(PreyAgent);
326 args["agent_access"] = OSD.FromString(AgentAccess.ToString()); 294 args["agent_access"] = OSD.FromString(AgentAccess.ToString());
327 295
328 if ((AgentTextures != null) && (AgentTextures.Length > 0))
329 {
330 OSDArray textures = new OSDArray(AgentTextures.Length);
331 foreach (UUID uuid in AgentTextures)
332 textures.Add(OSD.FromUUID(uuid));
333 args["agent_textures"] = textures;
334 }
335
336 args["active_group_id"] = OSD.FromUUID(ActiveGroupID); 296 args["active_group_id"] = OSD.FromUUID(ActiveGroupID);
337 297
338 if ((Groups != null) && (Groups.Length > 0)) 298 if ((Groups != null) && (Groups.Length > 0))
@@ -351,10 +311,26 @@ namespace OpenSim.Region.Framework.Scenes
351 args["animations"] = anims; 311 args["animations"] = anims;
352 } 312 }
353 313
314 if ((AgentTextures != null) && (AgentTextures.Length > 0))
315 {
316 OSDArray textures = new OSDArray(AgentTextures.Length);
317 foreach (UUID uuid in AgentTextures)
318 textures.Add(OSD.FromUUID(uuid));
319 args["agent_textures"] = textures;
320 }
321
354 if ((VisualParams != null) && (VisualParams.Length > 0)) 322 if ((VisualParams != null) && (VisualParams.Length > 0))
355 args["visual_params"] = OSD.FromBinary(VisualParams); 323 args["visual_params"] = OSD.FromBinary(VisualParams);
356 324
357 // Last few fields are still missing: granter and NVPais 325 // We might not pass this in all cases...
326 if ((Wearables != null) && (Wearables.Length > 0))
327 {
328 OSDArray wears = new OSDArray(Wearables.Length);
329 foreach (UUID uuid in Wearables)
330 wears.Add(OSD.FromUUID(uuid));
331 args["wearables"] = wears;
332 }
333
358 334
359 if ((CallbackURI != null) && (!CallbackURI.Equals(""))) 335 if ((CallbackURI != null) && (!CallbackURI.Equals("")))
360 args["callback_uri"] = OSD.FromString(CallbackURI); 336 args["callback_uri"] = OSD.FromString(CallbackURI);
@@ -441,15 +417,6 @@ namespace OpenSim.Region.Framework.Scenes
441 if (args["agent_access"] != null) 417 if (args["agent_access"] != null)
442 Byte.TryParse(args["agent_access"].AsString(), out AgentAccess); 418 Byte.TryParse(args["agent_access"].AsString(), out AgentAccess);
443 419
444 if ((args["agent_textures"] != null) && (args["agent_textures"]).Type == OSDType.Array)
445 {
446 OSDArray textures = (OSDArray)(args["agent_textures"]);
447 AgentTextures = new UUID[textures.Count];
448 int i = 0;
449 foreach (OSD o in textures)
450 AgentTextures[i++] = o.AsUUID();
451 }
452
453 if (args["active_group_id"] != null) 420 if (args["active_group_id"] != null)
454 ActiveGroupID = args["active_group_id"].AsUUID(); 421 ActiveGroupID = args["active_group_id"].AsUUID();
455 422
@@ -481,9 +448,27 @@ namespace OpenSim.Region.Framework.Scenes
481 } 448 }
482 } 449 }
483 450
451 if ((args["agent_textures"] != null) && (args["agent_textures"]).Type == OSDType.Array)
452 {
453 OSDArray textures = (OSDArray)(args["agent_textures"]);
454 AgentTextures = new UUID[textures.Count];
455 int i = 0;
456 foreach (OSD o in textures)
457 AgentTextures[i++] = o.AsUUID();
458 }
459
484 if (args["visual_params"] != null) 460 if (args["visual_params"] != null)
485 VisualParams = args["visual_params"].AsBinary(); 461 VisualParams = args["visual_params"].AsBinary();
486 462
463 if ((args["wearables"] != null) && (args["wearables"]).Type == OSDType.Array)
464 {
465 OSDArray wears = (OSDArray)(args["wearables"]);
466 Wearables = new UUID[wears.Count];
467 int i = 0;
468 foreach (OSD o in wears)
469 Wearables[i++] = o.AsUUID();
470 }
471
487 if (args["callback_uri"] != null) 472 if (args["callback_uri"] != null)
488 CallbackURI = args["callback_uri"].AsString(); 473 CallbackURI = args["callback_uri"].AsString();
489 } 474 }
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index dd8c719..85437f6 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -2646,20 +2646,43 @@ namespace OpenSim.Region.Framework.Scenes
2646 2646
2647 try 2647 try
2648 { 2648 {
2649 // We might not pass the Wearables in all cases...
2650 // They're only needed so that persistent changes to the appearance
2651 // are preserved in the new region where the user is moving to.
2652 // But in Hypergrid we might not let this happen.
2649 int i = 0; 2653 int i = 0;
2650 UUID[] textures = new UUID[m_appearance.Wearables.Length * 2]; 2654 UUID[] wears = new UUID[m_appearance.Wearables.Length * 2];
2651 foreach (AvatarWearable aw in m_appearance.Wearables) 2655 foreach (AvatarWearable aw in m_appearance.Wearables)
2652 { 2656 {
2653 if (aw != null) 2657 if (aw != null)
2654 { 2658 {
2655 textures[i++] = aw.ItemID; 2659 wears[i++] = aw.ItemID;
2656 textures[i++] = aw.AssetID; 2660 wears[i++] = aw.AssetID;
2657 } 2661 }
2658 else 2662 else
2659 m_log.DebugFormat("[SCENE PRESENCE]: Null wearable in CopyTo"); 2663 {
2664 wears[i++] = UUID.Zero;
2665 wears[i++] = UUID.Zero;
2666 }
2660 } 2667 }
2661 cAgent.AgentTextures = textures; 2668 cAgent.Wearables = wears;
2669
2662 cAgent.VisualParams = m_appearance.VisualParams; 2670 cAgent.VisualParams = m_appearance.VisualParams;
2671
2672 // Textures is not really needed in the base case, I think. But it's handy for
2673 // the Hypergrid and other decentralized models, so that we know which
2674 // textures to fecth from the user's asset server.
2675 i = 0;
2676 UUID[] textures = new UUID[m_appearance.Texture.FaceTextures.Length];
2677 foreach (Primitive.TextureEntryFace face in m_appearance.Texture.FaceTextures)
2678 {
2679 if (face != null)
2680 textures[i] = face.TextureID;
2681 else
2682 textures[i] = UUID.Zero;
2683 ++i;
2684 }
2685 cAgent.AgentTextures = textures;
2663 } 2686 }
2664 catch (Exception e) 2687 catch (Exception e)
2665 { 2688 {
@@ -2707,18 +2730,19 @@ namespace OpenSim.Region.Framework.Scenes
2707 uint i = 0; 2730 uint i = 0;
2708 try 2731 try
2709 { 2732 {
2710 AvatarWearable[] wearables = new AvatarWearable[cAgent.AgentTextures.Length / 2]; 2733 AvatarWearable[] wears = new AvatarWearable[cAgent.Wearables.Length / 2];
2711 for (uint n = 0; n < cAgent.AgentTextures.Length; n += 2) 2734 for (uint n = 0; n < cAgent.Wearables.Length; n += 2)
2712 { 2735 {
2713 UUID itemId = cAgent.AgentTextures[n]; 2736 UUID itemId = cAgent.Wearables[n];
2714 UUID assetId = cAgent.AgentTextures[n + 1]; 2737 UUID assetId = cAgent.Wearables[n + 1];
2715 wearables[i++] = new AvatarWearable(itemId, assetId); 2738 wears[i++] = new AvatarWearable(itemId, assetId);
2716 //te.CreateFace(i++).TextureID = assetId;
2717 } 2739 }
2718 m_appearance.Wearables = wearables; 2740 m_appearance.Wearables = wears;
2719 2741
2720 // We're setting it here to default, but the viewer will soon send a SetAppearance that will 2742 // We're setting it here to default, but the viewer will soon send a SetAppearance that will
2721 // set things straight. We should probably pass these textures too... 2743 // set things straight. We should probably parse these textures too, we have them...
2744 // In any case, the least we need to do is to check if this is HG and fetch the textures
2745 // so that they can then be distributed to the other clients that ask for them later.
2722 Primitive.TextureEntry te = AvatarAppearance.GetDefaultTexture(); //new Primitive.TextureEntry(UUID.Random()); 2746 Primitive.TextureEntry te = AvatarAppearance.GetDefaultTexture(); //new Primitive.TextureEntry(UUID.Random());
2723 2747
2724 m_appearance.SetAppearance(te.ToBytes(), new List<byte>(cAgent.VisualParams)); 2748 m_appearance.SetAppearance(te.ToBytes(), new List<byte>(cAgent.VisualParams));