From 6f149ef6aed517d3fb29598ce006ab4e9876be28 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sat, 4 Oct 2014 07:49:05 +0100 Subject: [PATCH 1/4] bug fix: leave jumping state only to landing, without fallback into onsurface, etc --- .../Scenes/Animation/ScenePresenceAnimator.cs | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs index 2d1b0df906..ade908d657 100644 --- a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs +++ b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs @@ -307,15 +307,15 @@ namespace OpenSim.Region.Framework.Scenes.Animation ); // Check control flags -/* not in use - bool heldForward = ((controlFlags & (AgentManager.ControlFlags.AGENT_CONTROL_AT_POS | AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_POS)) != 0); - bool heldBack = ((controlFlags & (AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG | AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_NEG)) != 0); - bool heldLeft = ((controlFlags & (AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS | AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_POS)) != 0); - bool heldRight = ((controlFlags & (AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG | AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_NEG)) != 0); -*/ + /* not in use + bool heldForward = ((controlFlags & (AgentManager.ControlFlags.AGENT_CONTROL_AT_POS | AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_POS)) != 0); + bool heldBack = ((controlFlags & (AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG | AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_NEG)) != 0); + bool heldLeft = ((controlFlags & (AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS | AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_POS)) != 0); + bool heldRight = ((controlFlags & (AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG | AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_NEG)) != 0); + */ bool heldTurnLeft = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_TURN_LEFT) == AgentManager.ControlFlags.AGENT_CONTROL_TURN_LEFT; bool heldTurnRight = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_TURN_RIGHT) == AgentManager.ControlFlags.AGENT_CONTROL_TURN_RIGHT; -// bool heldUp = ((controlFlags & (AgentManager.ControlFlags.AGENT_CONTROL_UP_POS | AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_POS)) != 0); + // bool heldUp = ((controlFlags & (AgentManager.ControlFlags.AGENT_CONTROL_UP_POS | AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_POS)) != 0); // excluded nudge up so it doesn't trigger jump state bool heldUp = ((controlFlags & (AgentManager.ControlFlags.AGENT_CONTROL_UP_POS)) != 0); bool heldDown = ((controlFlags & (AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG | AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG)) != 0); @@ -328,7 +328,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation heldTurnLeft = false; heldTurnRight = false; } - + #endregion Inputs // no physics actor case @@ -432,7 +432,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation #region Jumping // section added for jumping... if (isColliding && heldUp && currentControlState != motionControlStates.jumping) - { + { // Start jumping, prejump currentControlState = motionControlStates.jumping; m_jumping = true; @@ -465,6 +465,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation m_jumping = true; return "JUMP"; } + return CurrentMovementAnimation; } #endregion Jumping @@ -508,7 +509,6 @@ namespace OpenSim.Region.Framework.Scenes.Animation } } - // next section moved outside paren. and realigned for jumping if (heldOnXY) @@ -530,12 +530,12 @@ namespace OpenSim.Region.Framework.Scenes.Animation return "WALK"; } } - else if (!m_jumping) + else { currentControlState = motionControlStates.onsurface; Falling = false; // Not walking - if(heldDown) + if (heldDown) return "CROUCH"; else if (heldTurnLeft) return "TURNLEFT"; From 57caf468e8f999db49a383cf22e1f665488ca36f Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sat, 4 Oct 2014 08:30:04 +0100 Subject: [PATCH 2/4] bug fix: resend part targetOmega on deSelect --- OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 6daa109598..3fc741c305 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -666,6 +666,8 @@ namespace OpenSim.Region.Framework.Scenes m_isSelected = value; if (ParentGroup != null) ParentGroup.PartSelectChanged(value); + if (!m_isSelected && m_angularVelocity != Vector3.Zero) + ScheduleTerseUpdate(); } } From 44a42efa4b9e3263226e469f361a798b3b12ed8a Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sat, 4 Oct 2014 08:46:46 +0100 Subject: [PATCH 3/4] try to help steps climb a bit compensating the bounce reduction --- OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs index 992fae74bd..f94e70b77d 100644 --- a/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs +++ b/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs @@ -946,6 +946,8 @@ namespace OpenSim.Region.Physics.OdePlugin altContact = contact; useAltcontact = true; + offset.Z -= 0.2f; + offset.Normalize(); if (contact.depth > 0.1f) From c3a1d6b5ef2e889f53ff3b0c1b6b1002d6f9f6b8 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sun, 5 Oct 2014 18:55:37 +0100 Subject: [PATCH 4/4] reduce some avatar engine strenght --- .../Physics/UbitOdePlugin/ODECharacter.cs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs index f94e70b77d..af7ca1d475 100644 --- a/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs +++ b/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs @@ -928,7 +928,7 @@ namespace OpenSim.Region.Physics.OdePlugin IsColliding = true; } } - +/* if (contact.normal.Z < 0.2f) { contact.normal.Z = 0; @@ -940,6 +940,7 @@ namespace OpenSim.Region.Physics.OdePlugin contact.normal.Y *= t; } } + */ return true; } @@ -1203,8 +1204,8 @@ namespace OpenSim.Region.Physics.OdePlugin // Avatar to Avatar collisions // Prim to avatar collisions - vec.X = -vel.X * PID_D * 2 + (_zeroPosition.X - localpos.X) * (PID_P * 5); - vec.Y = -vel.Y * PID_D * 2 + (_zeroPosition.Y - localpos.Y) * (PID_P * 5); + vec.X = -vel.X * PID_D + (_zeroPosition.X - localpos.X) * (PID_P * 5); + vec.Y = -vel.Y * PID_D + (_zeroPosition.Y - localpos.Y) * (PID_P * 5); if (flying) { vec.Z += -vel.Z * PID_D + (_zeroPosition.Z - localpos.Z) * PID_P; @@ -1225,7 +1226,7 @@ namespace OpenSim.Region.Physics.OdePlugin if (ctz.Z > 0f) { // moving up or JUMPING - vec.Z += (ctz.Z - vel.Z) * PID_D * 1.2f;// +(_zeroPosition.Z - localpos.Z) * PID_P; + vec.Z += (ctz.Z - vel.Z) * PID_D; vec.X += (ctz.X - vel.X) * (PID_D); vec.Y += (ctz.Y - vel.Y) * (PID_D); } @@ -1235,7 +1236,7 @@ namespace OpenSim.Region.Physics.OdePlugin if (ctz.Z == 0) { if (vel.Z > 0) - vec.Z -= vel.Z * PID_D * 2.0f; + vec.Z -= vel.Z * PID_D; vec.X += (ctz.X - vel.X) * (PID_D); vec.Y += (ctz.Y - vel.Y) * (PID_D); } @@ -1243,7 +1244,7 @@ namespace OpenSim.Region.Physics.OdePlugin else { if (ctz.Z < vel.Z) - vec.Z += (ctz.Z - vel.Z) * PID_D * 2.0f; + vec.Z += (ctz.Z - vel.Z) * PID_D; else { } @@ -1262,7 +1263,7 @@ namespace OpenSim.Region.Physics.OdePlugin // We're flying and colliding with something vec.X += (ctz.X - vel.X) * (PID_D * 0.0625f); vec.Y += (ctz.Y - vel.Y) * (PID_D * 0.0625f); - vec.Z += (ctz.Z - vel.Z) * (PID_D); + vec.Z += (ctz.Z - vel.Z) * (PID_D * 0.0625f); } } else // ie not colliding @@ -1270,8 +1271,8 @@ namespace OpenSim.Region.Physics.OdePlugin if (flying) //(!m_iscolliding && flying) { // we're in mid air suspended - vec.X += (ctz.X - vel.X) * (PID_D * 1.667f); - vec.Y += (ctz.Y - vel.Y) * (PID_D * 1.667f); + vec.X += (ctz.X - vel.X) * (PID_D); + vec.Y += (ctz.Y - vel.Y) * (PID_D); vec.Z += (ctz.Z - vel.Z) * (PID_D); }