aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Framework')
-rw-r--r--OpenSim/Framework/AvatarAppearance.cs101
1 files changed, 101 insertions, 0 deletions
diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs
index 3133f83..1c086d5 100644
--- a/OpenSim/Framework/AvatarAppearance.cs
+++ b/OpenSim/Framework/AvatarAppearance.cs
@@ -361,6 +361,11 @@ namespace OpenSim.Framework
361 h["underpants_asset"] = UnderPantsAsset.ToString(); 361 h["underpants_asset"] = UnderPantsAsset.ToString();
362 h["skirt_item"] = SkirtItem.ToString(); 362 h["skirt_item"] = SkirtItem.ToString();
363 h["skirt_asset"] = SkirtAsset.ToString(); 363 h["skirt_asset"] = SkirtAsset.ToString();
364
365 Hashtable attachments = GetAttachments();
366 if(attachments != null)
367 h["attachments"] = attachments;
368
364 return h; 369 return h;
365 } 370 }
366 371
@@ -405,6 +410,12 @@ namespace OpenSim.Framework
405 UnderPantsAsset = new LLUUID((string)h["underpants_asset"]); 410 UnderPantsAsset = new LLUUID((string)h["underpants_asset"]);
406 SkirtItem = new LLUUID((string)h["skirt_item"]); 411 SkirtItem = new LLUUID((string)h["skirt_item"]);
407 SkirtAsset = new LLUUID((string)h["skirt_asset"]); 412 SkirtAsset = new LLUUID((string)h["skirt_asset"]);
413
414 if(h.ContainsKey("attachments"))
415 {
416 Hashtable attachments = (Hashtable) h["attachments"];
417 SetAttachments(attachments);
418 }
408 } 419 }
409 420
410 [SecurityPermission(SecurityAction.LinkDemand, 421 [SecurityPermission(SecurityAction.LinkDemand,
@@ -424,5 +435,95 @@ namespace OpenSim.Framework
424 info.AddValue("m_textureEntry", m_texture.ToBytes()); 435 info.AddValue("m_textureEntry", m_texture.ToBytes());
425 info.AddValue("m_avatarHeight", m_avatarHeight); 436 info.AddValue("m_avatarHeight", m_avatarHeight);
426 } 437 }
438
439 private Dictionary<int, LLUUID[]> m_attachments = new Dictionary<int, LLUUID[]>();
440
441 public void SetAttachments(Hashtable data)
442 {
443 m_attachments.Clear();
444
445 if(data == null)
446 return;
447
448 foreach (DictionaryEntry e in data)
449 {
450 int attachpoint = Convert.ToInt32(e.Key);
451
452 if (m_attachments.ContainsKey(attachpoint))
453 continue;
454
455 LLUUID item;
456 LLUUID asset;
457
458 Hashtable uuids = (Hashtable) e.Value;
459 LLUUID.TryParse(uuids["item"].ToString(), out item);
460 LLUUID.TryParse(uuids["asset"].ToString(), out asset);
461
462 LLUUID[] attachment = new LLUUID[2];
463 attachment[0] = item;
464 attachment[1] = asset;
465
466 m_attachments[attachpoint] = attachment;
467 }
468 }
469
470 public Hashtable GetAttachments()
471 {
472 if(m_attachments.Count == 0)
473 return null;
474
475 Hashtable ret = new Hashtable();
476
477 foreach (KeyValuePair<int, LLUUID[]> kvp in m_attachments)
478 {
479 int attachpoint = kvp.Key;
480 LLUUID[] uuids = kvp.Value;
481
482 Hashtable data = new Hashtable();
483 data["item"] = uuids[0].ToString();
484 data["asset"] = uuids[1].ToString();
485
486 ret[attachpoint] = data;
487 }
488
489 return ret;
490 }
491
492 public List<int> GetAttachedPoints()
493 {
494 return new List<int>(m_attachments.Keys);
495 }
496
497 public LLUUID GetAttachedItem(int attachpoint)
498 {
499 if (!m_attachments.ContainsKey(attachpoint))
500 return LLUUID.Zero;
501
502 return m_attachments[attachpoint][0];
503 }
504
505 public LLUUID GetAttachedAsset(int attachpoint)
506 {
507 if (!m_attachments.ContainsKey(attachpoint))
508 return LLUUID.Zero;
509
510 return m_attachments[attachpoint][1];
511 }
512
513 public void AddAttachment(int attachpoint, LLUUID item, LLUUID asset)
514 {
515 if (item == LLUUID.Zero || asset == LLUUID.Zero)
516 {
517 if (m_attachments.ContainsKey(attachpoint))
518 m_attachments.Remove(attachpoint);
519 return;
520 }
521
522 if (!m_attachments.ContainsKey(attachpoint))
523 m_attachments[attachpoint] = new LLUUID[2];
524
525 m_attachments[attachpoint][0] = item;
526 m_attachments[attachpoint][1] = asset;
527 }
427 } 528 }
428} 529}