diff options
author | Charles Krinke | 2009-03-06 23:01:35 +0000 |
---|---|---|
committer | Charles Krinke | 2009-03-06 23:01:35 +0000 |
commit | b637a11b58292cb6165317b317dc077a79ee6779 (patch) | |
tree | 18d9b2e82ae782fec726f3baa2d60c76433a7406 /OpenSim/Region/Framework/Scenes | |
parent | add back .config files for all tests in an attempt to debug why these (diff) | |
download | opensim-SC-b637a11b58292cb6165317b317dc077a79ee6779.zip opensim-SC-b637a11b58292cb6165317b317dc077a79ee6779.tar.gz opensim-SC-b637a11b58292cb6165317b317dc077a79ee6779.tar.bz2 opensim-SC-b637a11b58292cb6165317b317dc077a79ee6779.tar.xz |
Fixes Mantis #3260. Thank you kindly, MCortez for a patch that:
llSetHoverHeight() should not clamp the x/y position of an object the way MoveTo does,
and it should recalculate the absolute height to hover at as an object moves to reflect
the current ground/water height under it.
Correctly implementing required adjusting the Physics interfaces and implementing at
the physics plug-in level. The attached is a patch that correctly implements
llSetHoverHeight() including updates to the ODE physics plug-in.
Diffstat (limited to 'OpenSim/Region/Framework/Scenes')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 31 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 17 |
2 files changed, 48 insertions, 0 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 4f61342..a88f8a9 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -1617,6 +1617,37 @@ namespace OpenSim.Region.Framework.Scenes | |||
1617 | } | 1617 | } |
1618 | 1618 | ||
1619 | /// <summary> | 1619 | /// <summary> |
1620 | /// Uses a PID to attempt to clamp the object on the Z axis at the given height over tau seconds. | ||
1621 | /// </summary> | ||
1622 | /// <param name="height">Height to hover. Height of zero disables hover.</param> | ||
1623 | /// <param name="hoverType">Determines what the height is relative to </param> | ||
1624 | /// <param name="tau">Number of seconds over which to reach target</param> | ||
1625 | public void SetHoverHeight(float height, PIDHoverType hoverType, float tau) | ||
1626 | { | ||
1627 | SceneObjectPart rootpart = m_rootPart; | ||
1628 | if (rootpart != null) | ||
1629 | { | ||
1630 | if (rootpart.PhysActor != null) | ||
1631 | { | ||
1632 | if (height != 0f) | ||
1633 | { | ||
1634 | rootpart.PhysActor.PIDHoverHeight = height; | ||
1635 | rootpart.PhysActor.PIDHoverType = hoverType; | ||
1636 | rootpart.PhysActor.PIDTau = tau; | ||
1637 | rootpart.PhysActor.PIDHoverActive = true; | ||
1638 | } | ||
1639 | else | ||
1640 | { | ||
1641 | rootpart.PhysActor.PIDHoverActive = false; | ||
1642 | } | ||
1643 | } | ||
1644 | } | ||
1645 | } | ||
1646 | |||
1647 | |||
1648 | |||
1649 | |||
1650 | /// <summary> | ||
1620 | /// Set the owner of the root part. | 1651 | /// Set the owner of the root part. |
1621 | /// </summary> | 1652 | /// </summary> |
1622 | /// <param name="part"></param> | 1653 | /// <param name="part"></param> |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index ede007e..4efadc3 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | |||
@@ -1748,6 +1748,23 @@ if (m_shape != null) { | |||
1748 | } | 1748 | } |
1749 | } | 1749 | } |
1750 | 1750 | ||
1751 | /// <summary> | ||
1752 | /// Uses a PID to attempt to clamp the object on the Z axis at the given height over tau seconds. | ||
1753 | /// </summary> | ||
1754 | /// <param name="height">Height to hover. Height of zero disables hover.</param> | ||
1755 | /// <param name="hoverType">Determines what the height is relative to </param> | ||
1756 | /// <param name="tau">Number of seconds over which to reach target</param> | ||
1757 | public void SetHoverHeight(float height, PIDHoverType hoverType, float tau) | ||
1758 | { | ||
1759 | m_parentGroup.SetHoverHeight(height, hoverType, tau); | ||
1760 | } | ||
1761 | |||
1762 | public void StopHover() | ||
1763 | { | ||
1764 | m_parentGroup.SetHoverHeight(0f, PIDHoverType.Ground, 0f); | ||
1765 | } | ||
1766 | |||
1767 | |||
1751 | public virtual void OnGrab(Vector3 offsetPos, IClientAPI remoteClient) | 1768 | public virtual void OnGrab(Vector3 offsetPos, IClientAPI remoteClient) |
1752 | { | 1769 | { |
1753 | } | 1770 | } |