diff options
author | Teravus Ovares | 2009-07-19 02:32:02 +0000 |
---|---|---|
committer | Teravus Ovares | 2009-07-19 02:32:02 +0000 |
commit | 08819bcbea9012d67cc4cb44e4d7ec7e5837bac6 (patch) | |
tree | 9158d1b42f1563db2294cfce5e85f41f1345d613 /OpenSim/Region/Physics/OdePlugin/OdePlugin.cs | |
parent | Thank you, otakup0pe, for a patch that enables basic auth with LSL (diff) | |
download | opensim-SC_OLD-08819bcbea9012d67cc4cb44e4d7ec7e5837bac6.zip opensim-SC_OLD-08819bcbea9012d67cc4cb44e4d7ec7e5837bac6.tar.gz opensim-SC_OLD-08819bcbea9012d67cc4cb44e4d7ec7e5837bac6.tar.bz2 opensim-SC_OLD-08819bcbea9012d67cc4cb44e4d7ec7e5837bac6.tar.xz |
* Created a way that the OpenSimulator scene can ask the physics scene to do a raycast test safely.
* Test for prim obstructions between the avatar and camera. If there are obstructions, inform the client to move the camera closer. This makes it so that walls and objects don't obstruct your view while you're moving around. Try walking inside a hollowed tori. You'll see how much easier it is now because your camera automatically moves closer so you can still see.
* Created a way to know if the user's camera is alt + cammed or just following the avatar.
* Changes IClientAPI interface by adding SendCameraConstraint(Vector4 CameraConstraint)
Diffstat (limited to 'OpenSim/Region/Physics/OdePlugin/OdePlugin.cs')
-rw-r--r-- | OpenSim/Region/Physics/OdePlugin/OdePlugin.cs | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs index 889afb6..87357a3 100644 --- a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs +++ b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs | |||
@@ -306,6 +306,8 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
306 | 306 | ||
307 | private volatile int m_global_contactcount = 0; | 307 | private volatile int m_global_contactcount = 0; |
308 | 308 | ||
309 | private ODERayCastRequestManager m_rayCastManager; | ||
310 | |||
309 | /// <summary> | 311 | /// <summary> |
310 | /// Initiailizes the scene | 312 | /// Initiailizes the scene |
311 | /// Sets many properties that ODE requires to be stable | 313 | /// Sets many properties that ODE requires to be stable |
@@ -321,7 +323,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
321 | nearCallback = near; | 323 | nearCallback = near; |
322 | triCallback = TriCallback; | 324 | triCallback = TriCallback; |
323 | triArrayCallback = TriArrayCallback; | 325 | triArrayCallback = TriArrayCallback; |
324 | 326 | m_rayCastManager = new ODERayCastRequestManager(this); | |
325 | lock (OdeLock) | 327 | lock (OdeLock) |
326 | { | 328 | { |
327 | // Create the world and the first space | 329 | // Create the world and the first space |
@@ -2833,6 +2835,8 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
2833 | //if ((framecount % m_randomizeWater) == 0) | 2835 | //if ((framecount % m_randomizeWater) == 0) |
2834 | // randomizeWater(waterlevel); | 2836 | // randomizeWater(waterlevel); |
2835 | 2837 | ||
2838 | int RayCastTimeMS = m_rayCastManager.ProcessQueuedRequests(); | ||
2839 | |||
2836 | collision_optimized(timeStep); | 2840 | collision_optimized(timeStep); |
2837 | 2841 | ||
2838 | lock (_collisionEventPrim) | 2842 | lock (_collisionEventPrim) |
@@ -3377,6 +3381,9 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
3377 | 3381 | ||
3378 | public override void Dispose() | 3382 | public override void Dispose() |
3379 | { | 3383 | { |
3384 | m_rayCastManager.Dispose(); | ||
3385 | m_rayCastManager = null; | ||
3386 | |||
3380 | lock (OdeLock) | 3387 | lock (OdeLock) |
3381 | { | 3388 | { |
3382 | lock (_prims) | 3389 | lock (_prims) |
@@ -3417,6 +3424,20 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
3417 | } | 3424 | } |
3418 | return returncolliders; | 3425 | return returncolliders; |
3419 | } | 3426 | } |
3427 | |||
3428 | public override bool SupportsRayCast() | ||
3429 | { | ||
3430 | return true; | ||
3431 | } | ||
3432 | |||
3433 | public override void RaycastWorld(Vector3 position, Vector3 direction, float length, RaycastCallback retMethod) | ||
3434 | { | ||
3435 | if (retMethod != null) | ||
3436 | { | ||
3437 | m_rayCastManager.QueueRequest(position, direction, length, retMethod); | ||
3438 | } | ||
3439 | } | ||
3440 | |||
3420 | #if USE_DRAWSTUFF | 3441 | #if USE_DRAWSTUFF |
3421 | // Keyboard callback | 3442 | // Keyboard callback |
3422 | public void command(int cmd) | 3443 | public void command(int cmd) |