diff options
author | teravus | 2013-03-16 11:09:49 -0400 |
---|---|---|
committer | teravus | 2013-03-16 11:09:49 -0400 |
commit | 455da9dd20dc6a992c7adc1a8fd851ab586392a1 (patch) | |
tree | 83a6f65e0bdbe823d365b9e4765b1b78eb7d3c76 /OpenSim/Region/Framework/Scenes/ScenePresence.cs | |
parent | Merge branch 'avination' of ssh://3dhosting.de/var/git/careminster into avina... (diff) | |
download | opensim-SC-455da9dd20dc6a992c7adc1a8fd851ab586392a1.zip opensim-SC-455da9dd20dc6a992c7adc1a8fd851ab586392a1.tar.gz opensim-SC-455da9dd20dc6a992c7adc1a8fd851ab586392a1.tar.bz2 opensim-SC-455da9dd20dc6a992c7adc1a8fd851ab586392a1.tar.xz |
* Ignores VolumeDetect enabled prim in the camera raycast call. Note: The SceneRaycast call doesn't have a filter option in the interface and physics will use the lower level one for all sorts of goodies so it wouldn't be appropriate to ignore it at the physics layer yet.. though that would be better once the API has filters.
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/ScenePresence.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 47 |
1 files changed, 36 insertions, 11 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 91f9c0b..230cb23 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -1526,17 +1526,42 @@ namespace OpenSim.Region.Framework.Scenes | |||
1526 | m_doingCamRayCast = false; | 1526 | m_doingCamRayCast = false; |
1527 | if (hitYN && localid != LocalId) | 1527 | if (hitYN && localid != LocalId) |
1528 | { | 1528 | { |
1529 | CameraConstraintActive = true; | 1529 | SceneObjectGroup group = m_scene.GetGroupByPrim(localid); |
1530 | pNormal.X = (float)Math.Round(pNormal.X, 2); | 1530 | bool IsPrim = group != null; |
1531 | pNormal.Y = (float)Math.Round(pNormal.Y, 2); | 1531 | if (IsPrim) |
1532 | pNormal.Z = (float)Math.Round(pNormal.Z, 2); | 1532 | { |
1533 | pNormal.Normalize(); | 1533 | SceneObjectPart part = group.GetPart(localid); |
1534 | collisionPoint.X = (float)Math.Round(collisionPoint.X, 1); | 1534 | if (part != null && !part.VolumeDetectActive) |
1535 | collisionPoint.Y = (float)Math.Round(collisionPoint.Y, 1); | 1535 | { |
1536 | collisionPoint.Z = (float)Math.Round(collisionPoint.Z, 1); | 1536 | CameraConstraintActive = true; |
1537 | 1537 | pNormal.X = (float) Math.Round(pNormal.X, 2); | |
1538 | Vector4 plane = new Vector4(pNormal.X, pNormal.Y, pNormal.Z, Vector3.Dot(collisionPoint, pNormal)); | 1538 | pNormal.Y = (float) Math.Round(pNormal.Y, 2); |
1539 | UpdateCameraCollisionPlane(plane); | 1539 | pNormal.Z = (float) Math.Round(pNormal.Z, 2); |
1540 | pNormal.Normalize(); | ||
1541 | collisionPoint.X = (float) Math.Round(collisionPoint.X, 1); | ||
1542 | collisionPoint.Y = (float) Math.Round(collisionPoint.Y, 1); | ||
1543 | collisionPoint.Z = (float) Math.Round(collisionPoint.Z, 1); | ||
1544 | |||
1545 | Vector4 plane = new Vector4(pNormal.X, pNormal.Y, pNormal.Z, | ||
1546 | Vector3.Dot(collisionPoint, pNormal)); | ||
1547 | UpdateCameraCollisionPlane(plane); | ||
1548 | } | ||
1549 | } | ||
1550 | else | ||
1551 | { | ||
1552 | CameraConstraintActive = true; | ||
1553 | pNormal.X = (float) Math.Round(pNormal.X, 2); | ||
1554 | pNormal.Y = (float) Math.Round(pNormal.Y, 2); | ||
1555 | pNormal.Z = (float) Math.Round(pNormal.Z, 2); | ||
1556 | pNormal.Normalize(); | ||
1557 | collisionPoint.X = (float) Math.Round(collisionPoint.X, 1); | ||
1558 | collisionPoint.Y = (float) Math.Round(collisionPoint.Y, 1); | ||
1559 | collisionPoint.Z = (float) Math.Round(collisionPoint.Z, 1); | ||
1560 | |||
1561 | Vector4 plane = new Vector4(pNormal.X, pNormal.Y, pNormal.Z, | ||
1562 | Vector3.Dot(collisionPoint, pNormal)); | ||
1563 | UpdateCameraCollisionPlane(plane); | ||
1564 | } | ||
1540 | } | 1565 | } |
1541 | else if (!m_pos.ApproxEquals(m_lastPosition, POSITION_TOLERANCE) || | 1566 | else if (!m_pos.ApproxEquals(m_lastPosition, POSITION_TOLERANCE) || |
1542 | !Rotation.ApproxEquals(m_lastRotation, ROTATION_TOLERANCE)) | 1567 | !Rotation.ApproxEquals(m_lastRotation, ROTATION_TOLERANCE)) |