aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules')
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs51
1 files changed, 8 insertions, 43 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
index 0ec9575..831922e 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
@@ -757,64 +757,29 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
757 757
758 SceneObjectGroup group = null; 758 SceneObjectGroup group = null;
759 759
760 string xmlData = Utils.BytesToString(rezAsset.Data); 760 List<SceneObjectGroup> objlist;
761 List<SceneObjectGroup> objlist = new List<SceneObjectGroup>(); 761 List<Vector3> veclist;
762 List<Vector3> veclist = new List<Vector3>(); 762 Vector3 bbox;
763 float offsetHeight;
763 byte bRayEndIsIntersection = (byte)(RayEndIsIntersection ? 1 : 0); 764 byte bRayEndIsIntersection = (byte)(RayEndIsIntersection ? 1 : 0);
764 Vector3 pos; 765 Vector3 pos;
765 766
766 XmlDocument doc = new XmlDocument(); 767 bool single = m_Scene.GetObjectsToRez(rezAsset.Data, attachment, out objlist, out veclist, out bbox, out offsetHeight);
767 doc.LoadXml(xmlData);
768 XmlElement e = (XmlElement)doc.SelectSingleNode("/CoalescedObject");
769 if (e == null || attachment) // Single
770 {
771 SceneObjectGroup g = SceneObjectSerializer.FromOriginalXmlFormat(xmlData);
772
773 objlist.Add(g);
774 veclist.Add(Vector3.Zero);
775 768
776 float offsetHeight = 0; 769 if (single)
770 {
777 pos = m_Scene.GetNewRezLocation( 771 pos = m_Scene.GetNewRezLocation(
778 RayStart, RayEnd, RayTargetID, Quaternion.Identity, 772 RayStart, RayEnd, RayTargetID, Quaternion.Identity,
779 BypassRayCast, bRayEndIsIntersection, true, g.GetAxisAlignedBoundingBox(out offsetHeight), false); 773 BypassRayCast, bRayEndIsIntersection, true, bbox, false);
780 pos.Z += offsetHeight; 774 pos.Z += offsetHeight;
781 } 775 }
782 else 776 else
783 { 777 {
784 XmlElement coll = (XmlElement)e;
785 float bx = Convert.ToSingle(coll.GetAttribute("x"));
786 float by = Convert.ToSingle(coll.GetAttribute("y"));
787 float bz = Convert.ToSingle(coll.GetAttribute("z"));
788 Vector3 bbox = new Vector3(bx, by, bz);
789
790 pos = m_Scene.GetNewRezLocation(RayStart, RayEnd, 778 pos = m_Scene.GetNewRezLocation(RayStart, RayEnd,
791 RayTargetID, Quaternion.Identity, 779 RayTargetID, Quaternion.Identity,
792 BypassRayCast, bRayEndIsIntersection, true, 780 BypassRayCast, bRayEndIsIntersection, true,
793 bbox, false); 781 bbox, false);
794
795 pos -= bbox / 2; 782 pos -= bbox / 2;
796
797 XmlNodeList groups = e.SelectNodes("SceneObjectGroup");
798 foreach (XmlNode n in groups)
799 {
800 SceneObjectGroup g = SceneObjectSerializer.FromOriginalXmlFormat(n.OuterXml);
801
802 objlist.Add(g);
803 XmlElement el = (XmlElement)n;
804
805 string rawX = el.GetAttribute("offsetx");
806 string rawY = el.GetAttribute("offsety");
807 string rawZ = el.GetAttribute("offsetz");
808//
809// m_log.DebugFormat(
810// "[INVENTORY ACCESS MODULE]: Converting coalesced object {0} offset <{1}, {2}, {3}>",
811// g.Name, rawX, rawY, rawZ);
812
813 float x = Convert.ToSingle(rawX);
814 float y = Convert.ToSingle(rawY);
815 float z = Convert.ToSingle(rawZ);
816 veclist.Add(new Vector3(x, y, z));
817 }
818 } 783 }
819 784
820 if (item != null && !DoPreRezWhenFromItem(remoteClient, item, objlist, pos, veclist, attachment)) 785 if (item != null && !DoPreRezWhenFromItem(remoteClient, item, objlist, pos, veclist, attachment))