aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs60
1 files changed, 50 insertions, 10 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 1d22560..e0dfb34 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -202,8 +202,8 @@ namespace OpenSim.Region.Framework.Scenes
202 202
203 private const float FLY_ROLL_MAX_RADIANS = 1.1f; 203 private const float FLY_ROLL_MAX_RADIANS = 1.1f;
204 204
205 private const float FLY_ROLL_RADIANS_PER_SECOND = 0.06f; 205 private const float FLY_ROLL_RADIANS_PER_UPDATE = 0.06f;
206 private const float FLY_ROLL_RESET_RADIANS_PER_SECOND = 0.02f; 206 private const float FLY_ROLL_RESET_RADIANS_PER_UPDATE = 0.02f;
207 207
208 private float m_health = 100f; 208 private float m_health = 100f;
209 209
@@ -1052,11 +1052,47 @@ namespace OpenSim.Region.Framework.Scenes
1052 /// Applies a roll accumulator to the avatar's angular velocity for the avatar fly roll effect. 1052 /// Applies a roll accumulator to the avatar's angular velocity for the avatar fly roll effect.
1053 /// </summary> 1053 /// </summary>
1054 /// <param name="amount">Postive or negative roll amount in radians</param> 1054 /// <param name="amount">Postive or negative roll amount in radians</param>
1055 private void ApplyFlyingRoll(float amount) 1055 private void ApplyFlyingRoll(float amount, bool PressingUp, bool PressingDown)
1056 { 1056 {
1057 float noise = ((float)(Util.RandomClass.NextDouble()*0.2f)-0.1f); 1057
1058 float rollAmount = Util.Clamp(m_AngularVelocity.Z + amount, -FLY_ROLL_MAX_RADIANS, FLY_ROLL_MAX_RADIANS) + noise; 1058 float rollAmount = Util.Clamp(m_AngularVelocity.Z + amount, -FLY_ROLL_MAX_RADIANS, FLY_ROLL_MAX_RADIANS);
1059 m_AngularVelocity.Z = rollAmount; 1059 m_AngularVelocity.Z = rollAmount;
1060
1061 // APPLY EXTRA consideration for flying up and flying down during this time.
1062 // if we're turning left
1063 if (amount > 0)
1064 {
1065
1066 // If we're at the max roll and pressing up, we want to swing BACK a bit
1067 // Automatically adds noise
1068 if (PressingUp)
1069 {
1070 if (m_AngularVelocity.Z >= FLY_ROLL_MAX_RADIANS - 0.04f)
1071 m_AngularVelocity.Z -= 0.9f;
1072 }
1073 // If we're at the max roll and pressing down, we want to swing MORE a bit
1074 if (PressingDown)
1075 {
1076 if (m_AngularVelocity.Z >= FLY_ROLL_MAX_RADIANS && m_AngularVelocity.Z < FLY_ROLL_MAX_RADIANS + 0.6f)
1077 m_AngularVelocity.Z += 0.6f;
1078 }
1079 }
1080 else // we're turning right.
1081 {
1082 // If we're at the max roll and pressing up, we want to swing BACK a bit
1083 // Automatically adds noise
1084 if (PressingUp)
1085 {
1086 if (m_AngularVelocity.Z <= (-FLY_ROLL_MAX_RADIANS))
1087 m_AngularVelocity.Z += 0.6f;
1088 }
1089 // If we're at the max roll and pressing down, we want to swing MORE a bit
1090 if (PressingDown)
1091 {
1092 if (m_AngularVelocity.Z >= -FLY_ROLL_MAX_RADIANS - 0.6f)
1093 m_AngularVelocity.Z -= 0.6f;
1094 }
1095 }
1060 } 1096 }
1061 1097
1062 /// <summary> 1098 /// <summary>
@@ -1572,26 +1608,30 @@ namespace OpenSim.Region.Framework.Scenes
1572 ((flags & AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG) != 0)); 1608 ((flags & AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG) != 0));
1573 1609
1574 1610
1575 1611 //m_log.Debug("[CONTROL]: " +flags);
1576 // Applies a satisfying roll effect to the avatar when flying. 1612 // Applies a satisfying roll effect to the avatar when flying.
1577 if (((flags & AgentManager.ControlFlags.AGENT_CONTROL_TURN_LEFT) != 0) && ((flags & AgentManager.ControlFlags.AGENT_CONTROL_YAW_POS) != 0)) 1613 if (((flags & AgentManager.ControlFlags.AGENT_CONTROL_TURN_LEFT) != 0) && ((flags & AgentManager.ControlFlags.AGENT_CONTROL_YAW_POS) != 0))
1578 { 1614 {
1579 ApplyFlyingRoll(FLY_ROLL_RADIANS_PER_SECOND); 1615
1616 ApplyFlyingRoll(FLY_ROLL_RADIANS_PER_UPDATE, ((flags & AgentManager.ControlFlags.AGENT_CONTROL_UP_POS) != 0), ((flags & AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG) != 0));
1617
1580 1618
1581 } 1619 }
1582 else if (((flags & AgentManager.ControlFlags.AGENT_CONTROL_TURN_RIGHT) != 0) && 1620 else if (((flags & AgentManager.ControlFlags.AGENT_CONTROL_TURN_RIGHT) != 0) &&
1583 ((flags & AgentManager.ControlFlags.AGENT_CONTROL_YAW_NEG) != 0)) 1621 ((flags & AgentManager.ControlFlags.AGENT_CONTROL_YAW_NEG) != 0))
1584 { 1622 {
1585 ApplyFlyingRoll(-FLY_ROLL_RADIANS_PER_SECOND); 1623 ApplyFlyingRoll(-FLY_ROLL_RADIANS_PER_UPDATE, ((flags & AgentManager.ControlFlags.AGENT_CONTROL_UP_POS) != 0), ((flags & AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG) != 0));
1624
1586 1625
1587 } 1626 }
1588 else 1627 else
1589 { 1628 {
1590 if (m_AngularVelocity.Z != 0) 1629 if (m_AngularVelocity.Z != 0)
1591 m_AngularVelocity.Z += CalculateFlyingRollResetToZero(FLY_ROLL_RESET_RADIANS_PER_SECOND); 1630 m_AngularVelocity.Z += CalculateFlyingRollResetToZero(FLY_ROLL_RESET_RADIANS_PER_UPDATE);
1592 1631
1593 } 1632 }
1594 1633
1634
1595 1635
1596 1636
1597 if (Flying && IsColliding && controlland) 1637 if (Flying && IsColliding && controlland)