aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.cs24
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs5
2 files changed, 20 insertions, 9 deletions
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index e4526b2..324b7d3 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -845,20 +845,27 @@ namespace OpenSim.Region.Environment.Scenes
845 845
846 if (PermissionsMngr.CanRezObject(ownerID, pos)) 846 if (PermissionsMngr.CanRezObject(ownerID, pos))
847 { 847 {
848 Vector3 CameraPosition = ((ScenePresence)GetScenePresence(ownerID)).CameraPosition;
849 Vector3 rayEnd = new Vector3(pos.X, pos.Y, pos.Z);
850 848
851 float raydistance = m_innerScene.Vector3Distance(CameraPosition, rayEnd); 849 EntityIntersection rayTracing = null;
850 ScenePresence presence = ((ScenePresence)GetScenePresence(ownerID));
851 if (presence != null)
852 {
853 Vector3 CameraPosition = presence.CameraPosition;
854 Vector3 rayEnd = new Vector3(pos.X, pos.Y, pos.Z);
852 855
853 Vector3 rayDirection = new Vector3(rayEnd.x / raydistance, rayEnd.y / raydistance, rayEnd.z / raydistance); 856 float raydistance = m_innerScene.Vector3Distance(CameraPosition, rayEnd);
854 857
855 Ray rezRay = new Ray(CameraPosition, rayDirection); 858 Vector3 rayDirection = new Vector3(rayEnd.x / raydistance, rayEnd.y / raydistance, rayEnd.z / raydistance);
856 859
857 Vector3 RezDirectionFromCamera = rezRay.Direction; 860 Ray rezRay = new Ray(CameraPosition, rayDirection);
858 861
859 EntityIntersection rayTracing = m_innerScene.GetClosestIntersectingPrim(rezRay); 862 Vector3 RezDirectionFromCamera = rezRay.Direction;
860 863
861 if (rayTracing.HitTF) 864 rayTracing = m_innerScene.GetClosestIntersectingPrim(rezRay);
865
866 }
867
868 if ((rayTracing != null) && ( rayTracing.HitTF))
862 { 869 {
863 // We raytraced and found a prim in the way of the ground.. so 870 // We raytraced and found a prim in the way of the ground.. so
864 // We will rez the object somewhere close to the prim. Better math needed. This is a Stub 871 // We will rez the object somewhere close to the prim. Better math needed. This is a Stub
@@ -918,6 +925,7 @@ namespace OpenSim.Region.Environment.Scenes
918 { 925 {
919 PrimitiveBaseShape treeShape = new PrimitiveBaseShape(); 926 PrimitiveBaseShape treeShape = new PrimitiveBaseShape();
920 treeShape.PathCurve = 16; 927 treeShape.PathCurve = 16;
928 treeShape.PathEnd = 49900;
921 treeShape.PCode = newTree ? (byte)libsecondlife.ObjectManager.PCode.NewTree : (byte)libsecondlife.ObjectManager.PCode.Tree; 929 treeShape.PCode = newTree ? (byte)libsecondlife.ObjectManager.PCode.NewTree : (byte)libsecondlife.ObjectManager.PCode.Tree;
922 treeShape.Scale = scale; 930 treeShape.Scale = scale;
923 treeShape.State = (byte)treeType; 931 treeShape.State = (byte)treeType;
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
index 89e2f0d..a039015 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
@@ -1316,8 +1316,11 @@ namespace OpenSim.Region.Environment.Scenes
1316 if (m_scene.EventManager.TriggerGroupMove(UUID, pos)) 1316 if (m_scene.EventManager.TriggerGroupMove(UUID, pos))
1317 { 1317 {
1318 AbsolutePosition = pos; 1318 AbsolutePosition = pos;
1319 ScheduleGroupForTerseUpdate(); 1319
1320 } 1320 }
1321 //we need to do a terse update even if the move wasn't allowed
1322 // so that the position is reset in the client (the object snaps back)
1323 ScheduleGroupForTerseUpdate();
1321 } 1324 }
1322 1325
1323 /// <summary> 1326 /// <summary>