aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Physics/Manager/PhysicsScene.cs2
-rw-r--r--OpenSim/Region/Physics/UbitOdePlugin/ODERayCastRequestManager.cs14
-rw-r--r--OpenSim/Region/Physics/UbitOdePlugin/ODESitAvatar.cs19
3 files changed, 27 insertions, 8 deletions
diff --git a/OpenSim/Region/Physics/Manager/PhysicsScene.cs b/OpenSim/Region/Physics/Manager/PhysicsScene.cs
index a442cf0..86e0713 100644
--- a/OpenSim/Region/Physics/Manager/PhysicsScene.cs
+++ b/OpenSim/Region/Physics/Manager/PhysicsScene.cs
@@ -353,7 +353,7 @@ namespace OpenSim.Region.Physics.Manager
353 353
354 public virtual void RaycastActor(PhysicsActor actor, Vector3 position, Vector3 direction, float length, RaycastCallback retMethod){} 354 public virtual void RaycastActor(PhysicsActor actor, Vector3 position, Vector3 direction, float length, RaycastCallback retMethod){}
355 public virtual void RaycastActor(PhysicsActor actor, Vector3 position, Vector3 direction, float length, int Count, RayCallback retMethod) { } 355 public virtual void RaycastActor(PhysicsActor actor, Vector3 position, Vector3 direction, float length, int Count, RayCallback retMethod) { }
356 public virtual List<ContactResult> RaycastActor(PhysicsActor actor, Vector3 position, Vector3 direction, float length, int Count) 356 public virtual List<ContactResult> RaycastActor(PhysicsActor actor, Vector3 position, Vector3 direction, float length, int Count, RayFilterFlags flags)
357 { 357 {
358 return new List<ContactResult>(); 358 return new List<ContactResult>();
359 } 359 }
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODERayCastRequestManager.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODERayCastRequestManager.cs
index 561ab1c..54a83c2 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/ODERayCastRequestManager.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/ODERayCastRequestManager.cs
@@ -199,6 +199,20 @@ namespace OpenSim.Region.Physics.OdePlugin
199 m_PendingRequests.Enqueue(req); 199 m_PendingRequests.Enqueue(req);
200 } 200 }
201 201
202 public void QueueRequest(IntPtr geom, Vector3 position, Vector3 direction, float length, int count,RayFilterFlags flags, RayCallback retMethod)
203 {
204 ODERayRequest req = new ODERayRequest();
205 req.geom = geom;
206 req.callbackMethod = retMethod;
207 req.length = length;
208 req.Normal = direction;
209 req.Origin = position;
210 req.Count = count;
211 req.filter = flags;
212
213 m_PendingRequests.Enqueue(req);
214 }
215
202 public void QueueRequest(Vector3 position, Vector3 direction, float length, int count, RaycastCallback retMethod) 216 public void QueueRequest(Vector3 position, Vector3 direction, float length, int count, RaycastCallback retMethod)
203 { 217 {
204 ODERayRequest req = new ODERayRequest(); 218 ODERayRequest req = new ODERayRequest();
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODESitAvatar.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODESitAvatar.cs
index c1a0ca9..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 {
@@ -96,7 +97,7 @@ namespace OpenSim.Region.Physics.OdePlugin
96 raylen += 30f; // focal point may be far 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;