diff options
Diffstat (limited to 'OpenSim/Region/Framework')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 8 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 9 |
2 files changed, 13 insertions, 4 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 8fa7880..aab6a49 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -2992,10 +2992,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
2992 | { | 2992 | { |
2993 | if (!m_rootPart.BlockGrab) | 2993 | if (!m_rootPart.BlockGrab) |
2994 | { | 2994 | { |
2995 | Vector3 llmoveforce = pos - AbsolutePosition; | 2995 | /* Vector3 llmoveforce = pos - AbsolutePosition; |
2996 | Vector3 grabforce = llmoveforce; | 2996 | Vector3 grabforce = llmoveforce; |
2997 | grabforce = (grabforce / 10) * pa.Mass; | 2997 | grabforce = (grabforce / 10) * pa.Mass; |
2998 | pa.AddForce(grabforce, true); | 2998 | */ |
2999 | // empirically convert distance diference to a impulse | ||
3000 | Vector3 grabforce = pos - AbsolutePosition; | ||
3001 | grabforce = grabforce * (pa.Mass/ 10.0f); | ||
3002 | pa.AddForce(grabforce, false); | ||
2999 | m_scene.PhysicsScene.AddPhysicsActorTaint(pa); | 3003 | m_scene.PhysicsScene.AddPhysicsActorTaint(pa); |
3000 | } | 3004 | } |
3001 | } | 3005 | } |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 2b1fb3d..a810de2 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -1051,6 +1051,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1051 | IsChildAgent = true; | 1051 | IsChildAgent = true; |
1052 | m_scene.SwapRootAgentCount(true); | 1052 | m_scene.SwapRootAgentCount(true); |
1053 | RemoveFromPhysicalScene(); | 1053 | RemoveFromPhysicalScene(); |
1054 | ParentID = 0; // Child agents can't be sitting | ||
1054 | 1055 | ||
1055 | // FIXME: Set RegionHandle to the region handle of the scene this agent is moving into | 1056 | // FIXME: Set RegionHandle to the region handle of the scene this agent is moving into |
1056 | 1057 | ||
@@ -2091,6 +2092,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
2091 | 2092 | ||
2092 | public void HandleAgentRequestSit(IClientAPI remoteClient, UUID agentID, UUID targetID, Vector3 offset) | 2093 | public void HandleAgentRequestSit(IClientAPI remoteClient, UUID agentID, UUID targetID, Vector3 offset) |
2093 | { | 2094 | { |
2095 | if (IsChildAgent) | ||
2096 | return; | ||
2097 | |||
2094 | if (ParentID != 0) | 2098 | if (ParentID != 0) |
2095 | { | 2099 | { |
2096 | StandUp(); | 2100 | StandUp(); |
@@ -2893,8 +2897,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
2893 | 2897 | ||
2894 | // If we don't have a PhysActor, we can't cross anyway | 2898 | // If we don't have a PhysActor, we can't cross anyway |
2895 | // Also don't do this while sat, sitting avatars cross with the | 2899 | // Also don't do this while sat, sitting avatars cross with the |
2896 | // object they sit on. | 2900 | // object they sit on. ParentUUID denoted a pending sit, don't |
2897 | if (ParentID != 0 || PhysicsActor == null) | 2901 | // interfere with it. |
2902 | if (ParentID != 0 || PhysicsActor == null || ParentUUID != UUID.Zero) | ||
2898 | return; | 2903 | return; |
2899 | 2904 | ||
2900 | if (!IsInTransit) | 2905 | if (!IsInTransit) |