As with prim sitting avatars, make an avatar phantom when it sits on the ground and solid again when it stands.

This is to avoid http://opensimulator.org/mantis/view.php?id=5783 when a collision with a ground sitting avatar causes that avatar to automatically stand and sometimes not be able to move
A better solution may be to keep gound sitting avatars solid but remove their collision status.  However, this requires some physics code work.
0.7.2-post-fixes
Justin Clark-Casey (justincc) 2011-11-11 23:10:43 +00:00
parent 3c9654d5d6
commit b527901556
1 changed files with 9 additions and 9 deletions

View File

@ -1351,6 +1351,7 @@ namespace OpenSim.Region.Framework.Scenes
// to use. Or we could add a m_isSitting variable. // to use. Or we could add a m_isSitting variable.
//Animator.TrySetMovementAnimation("SIT_GROUND_CONSTRAINED"); //Animator.TrySetMovementAnimation("SIT_GROUND_CONSTRAINED");
SitGround = true; SitGround = true;
RemoveFromPhysicalScene();
} }
// In the future, these values might need to go global. // In the future, these values might need to go global.
@ -1811,12 +1812,16 @@ namespace OpenSim.Region.Framework.Scenes
/// </summary> /// </summary>
public void StandUp() public void StandUp()
{ {
// m_log.DebugFormat("[SCENE PRESENCE]: StandUp() for {0}", Name);
SitGround = false; SitGround = false;
if (PhysicsActor == null)
AddToPhysicalScene(false);
if (m_parentID != 0) if (m_parentID != 0)
{ {
m_log.Debug("StandupCode Executed"); SceneObjectPart part = m_scene.GetSceneObjectPart(ParentID);
SceneObjectPart part = m_scene.GetSceneObjectPart(m_parentID);
if (part != null) if (part != null)
{ {
TaskInventoryDictionary taskIDict = part.TaskInventory; TaskInventoryDictionary taskIDict = part.TaskInventory;
@ -1844,13 +1849,8 @@ namespace OpenSim.Region.Framework.Scenes
ControllingClient.SendClearFollowCamProperties(part.ParentUUID); ControllingClient.SendClearFollowCamProperties(part.ParentUUID);
} }
if (m_physicsActor == null) m_pos += ParentPosition + new Vector3(0.0f, 0.0f, 2.0f * m_sitAvatarHeight);
{ ParentPosition = Vector3.Zero;
AddToPhysicalScene(false);
}
m_pos += m_parentPosition + new Vector3(0.0f, 0.0f, 2.0f*m_sitAvatarHeight);
m_parentPosition = Vector3.Zero;
m_parentID = 0; m_parentID = 0;
SendAvatarDataToAllAgents(); SendAvatarDataToAllAgents();