diff options
Diffstat (limited to 'OpenSim/Region/Physics/UbitOdePlugin/ODERayCastRequestManager.cs')
-rw-r--r-- | OpenSim/Region/Physics/UbitOdePlugin/ODERayCastRequestManager.cs | 99 |
1 files changed, 60 insertions, 39 deletions
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODERayCastRequestManager.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODERayCastRequestManager.cs index 3d108f8..21fe9c0 100644 --- a/OpenSim/Region/Physics/UbitOdePlugin/ODERayCastRequestManager.cs +++ b/OpenSim/Region/Physics/UbitOdePlugin/ODERayCastRequestManager.cs | |||
@@ -470,56 +470,77 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
470 | 470 | ||
471 | if (p2 == null) | 471 | if (p2 == null) |
472 | { | 472 | { |
473 | string name; | 473 | /* |
474 | 474 | string name; | |
475 | if (!m_scene.geom_name_map.TryGetValue(g2, out name)) | 475 | |
476 | return; | 476 | if (!m_scene.geom_name_map.TryGetValue(g2, out name)) |
477 | 477 | return; | |
478 | if (name == "Terrain") | 478 | |
479 | { | 479 | if (name == "Terrain") |
480 | // land colision | 480 | { |
481 | if ((CurrentRayFilter & RayFilterFlags.land) == 0) | 481 | // land colision |
482 | return; | 482 | if ((CurrentRayFilter & RayFilterFlags.land) == 0) |
483 | } | 483 | return; |
484 | else if (name == "Water") | 484 | } |
485 | { | 485 | else if (name == "Water") |
486 | if ((CurrentRayFilter & RayFilterFlags.water) == 0) | 486 | { |
487 | return; | 487 | if ((CurrentRayFilter & RayFilterFlags.water) == 0) |
488 | } | 488 | return; |
489 | else | 489 | } |
490 | return; | 490 | else |
491 | return; | ||
492 | */ | ||
493 | return; | ||
491 | } | 494 | } |
492 | else | 495 | else |
493 | { | 496 | { |
494 | if (p2 is OdePrim) | 497 | switch (p2.PhysicsActorType) |
495 | { | 498 | { |
496 | RayFilterFlags thisFlags; | 499 | case (int)ActorTypes.Prim: |
497 | 500 | ||
498 | if (p2.IsPhysical) | 501 | RayFilterFlags thisFlags; |
499 | thisFlags = RayFilterFlags.physical; | ||
500 | else | ||
501 | thisFlags = RayFilterFlags.nonphysical; | ||
502 | 502 | ||
503 | if (p2.Phantom) | 503 | if (p2.IsPhysical) |
504 | thisFlags |= RayFilterFlags.phantom; | 504 | thisFlags = RayFilterFlags.physical; |
505 | else | ||
506 | thisFlags = RayFilterFlags.nonphysical; | ||
505 | 507 | ||
506 | if (p2.IsVolumeDtc) | 508 | if (p2.Phantom) |
507 | thisFlags |= RayFilterFlags.volumedtc; | 509 | thisFlags |= RayFilterFlags.phantom; |
508 | 510 | ||
509 | if ((thisFlags & CurrentRayFilter) == 0) | 511 | if (p2.IsVolumeDtc) |
510 | return; | 512 | thisFlags |= RayFilterFlags.volumedtc; |
511 | 513 | ||
512 | ID = ((OdePrim)p2).LocalID; | 514 | if ((thisFlags & CurrentRayFilter) == 0) |
513 | } | 515 | return; |
514 | else if (p2 is OdeCharacter) | 516 | |
515 | { | 517 | ID = ((OdePrim)p2).LocalID; |
516 | if ((CurrentRayFilter & RayFilterFlags.agent) == 0) | 518 | break; |
519 | |||
520 | case (int)ActorTypes.Agent: | ||
521 | |||
522 | if ((CurrentRayFilter & RayFilterFlags.agent) == 0) | ||
523 | return; | ||
524 | else | ||
525 | ID = ((OdeCharacter)p2).LocalID; | ||
526 | break; | ||
527 | |||
528 | case (int)ActorTypes.Ground: | ||
529 | |||
530 | if ((CurrentRayFilter & RayFilterFlags.land) == 0) | ||
531 | return; | ||
532 | break; | ||
533 | |||
534 | case (int)ActorTypes.Water: | ||
535 | |||
536 | if ((CurrentRayFilter & RayFilterFlags.water) == 0) | ||
537 | return; | ||
538 | break; | ||
539 | |||
540 | default: | ||
517 | return; | 541 | return; |
518 | else | 542 | break; |
519 | ID = ((OdeCharacter)p2).LocalID; | ||
520 | } | 543 | } |
521 | else //?? | ||
522 | return; | ||
523 | } | 544 | } |
524 | 545 | ||
525 | d.ContactGeom curcontact = new d.ContactGeom(); | 546 | d.ContactGeom curcontact = new d.ContactGeom(); |