aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/UbitOdePlugin/ODESitAvatar.cs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Physics/UbitOdePlugin/ODESitAvatar.cs21
1 files changed, 13 insertions, 8 deletions
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODESitAvatar.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODESitAvatar.cs
index 225bff8..fd3a3ba 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/ODESitAvatar.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/ODESitAvatar.cs
@@ -52,6 +52,7 @@ namespace OpenSim.Region.Physics.OdePlugin
52 } 52 }
53 53
54 private static Vector3 SitAjust = new Vector3(0, 0, 0.4f); 54 private static Vector3 SitAjust = new Vector3(0, 0, 0.4f);
55 private const RayFilterFlags RaySitFlags = RayFilterFlags.AllPrims | RayFilterFlags.ClosestHit;
55 56
56 public void Sit(PhysicsActor actor, Vector3 avPos, Vector3 avCameraPosition, Vector3 offset, Vector3 avOffset, SitAvatarCallback PhysicsSitResponse) 57 public void Sit(PhysicsActor actor, Vector3 avPos, Vector3 avCameraPosition, Vector3 offset, Vector3 avOffset, SitAvatarCallback PhysicsSitResponse)
57 { 58 {
@@ -93,10 +94,10 @@ namespace OpenSim.Region.Physics.OdePlugin
93 rayDir.Y *= t; 94 rayDir.Y *= t;
94 rayDir.Z *= t; 95 rayDir.Z *= t;
95 96
96 raylen += 0.5f; 97 raylen += 30f; // focal point may be far
97 List<ContactResult> rayResults; 98 List<ContactResult> rayResults;
98 99
99 rayResults = m_scene.RaycastActor(actor, avCameraPosition, rayDir , raylen, 1); 100 rayResults = m_scene.RaycastActor(actor, avCameraPosition, rayDir, raylen, 1, RaySitFlags);
100 if (rayResults.Count == 0 || rayResults[0].ConsumerID != actor.LocalID) 101 if (rayResults.Count == 0 || rayResults[0].ConsumerID != actor.LocalID)
101 { 102 {
102 d.GeomGetAABB(geom,out aabb); 103 d.GeomGetAABB(geom,out aabb);
@@ -108,6 +109,7 @@ namespace OpenSim.Region.Physics.OdePlugin
108 return; 109 return;
109 } 110 }
110 111
112
111 offset = rayResults[0].Pos - geopos; 113 offset = rayResults[0].Pos - geopos;
112 double ang; 114 double ang;
113 float s; 115 float s;
@@ -156,13 +158,16 @@ namespace OpenSim.Region.Physics.OdePlugin
156 return; 158 return;
157 } 159 }
158 160
159 Vector3 norm = rayResults[0].Normal; 161/*
162 // contact normals aren't reliable on meshs or sculpts it seems
163 Vector3 norm = rayResults[0].Normal;
160 164
161 if (norm.Z < 0) 165 if (norm.Z < 0)
162 { 166 {
163 PhysicsSitResponse(0, actor.LocalID, offset, Quaternion.Identity); 167 PhysicsSitResponse(0, actor.LocalID, offset, Quaternion.Identity);
164 return; 168 return;
165 } 169 }
170*/
166 171
167 ang = Math.Atan2(-rayDir.Y, -rayDir.X); 172 ang = Math.Atan2(-rayDir.Y, -rayDir.X);
168 ang *= 0.5d; 173 ang *= 0.5d;