added a missing angularVelocity.Zero on sitting, removed odd camera based
movement vectors, plus little other thingsavinationmerge
parent
6d1f1103f3
commit
94f42cef90
|
@ -336,7 +336,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
protected ulong crossingFromRegion;
|
protected ulong crossingFromRegion;
|
||||||
|
|
||||||
private readonly Vector3[] Dir_Vectors = new Vector3[11];
|
private readonly Vector3[] Dir_Vectors = new Vector3[12];
|
||||||
|
|
||||||
protected Timer m_reprioritization_timer;
|
protected Timer m_reprioritization_timer;
|
||||||
protected bool m_reprioritizing;
|
protected bool m_reprioritizing;
|
||||||
|
@ -393,7 +393,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Implemented Control Flags
|
/// Implemented Control Flags
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private enum Dir_ControlFlags
|
private enum Dir_ControlFlags:uint
|
||||||
{
|
{
|
||||||
DIR_CONTROL_FLAG_FORWARD = AgentManager.ControlFlags.AGENT_CONTROL_AT_POS,
|
DIR_CONTROL_FLAG_FORWARD = AgentManager.ControlFlags.AGENT_CONTROL_AT_POS,
|
||||||
DIR_CONTROL_FLAG_BACK = AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG,
|
DIR_CONTROL_FLAG_BACK = AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG,
|
||||||
|
@ -405,6 +405,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
DIR_CONTROL_FLAG_BACKWARD_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_NEG,
|
DIR_CONTROL_FLAG_BACKWARD_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_NEG,
|
||||||
DIR_CONTROL_FLAG_LEFT_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_POS,
|
DIR_CONTROL_FLAG_LEFT_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_POS,
|
||||||
DIR_CONTROL_FLAG_RIGHT_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_NEG,
|
DIR_CONTROL_FLAG_RIGHT_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_NEG,
|
||||||
|
DIR_CONTROL_FLAG_UP_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_POS,
|
||||||
DIR_CONTROL_FLAG_DOWN_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG
|
DIR_CONTROL_FLAG_DOWN_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -728,24 +729,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// Scene.RegionInfo.RegionName, Name, m_velocity);
|
// Scene.RegionInfo.RegionName, Name, m_velocity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
public override Vector3 AngularVelocity
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (PhysicsActor != null)
|
|
||||||
{
|
|
||||||
m_rotationalvelocity = PhysicsActor.RotationalVelocity;
|
|
||||||
|
|
||||||
// m_log.DebugFormat(
|
|
||||||
// "[SCENE PRESENCE]: Set velocity {0} for {1} in {2} via getting Velocity!",
|
|
||||||
// m_velocity, Name, Scene.RegionInfo.RegionName);
|
|
||||||
}
|
|
||||||
|
|
||||||
return m_rotationalvelocity;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
private Quaternion m_bodyRot = Quaternion.Identity;
|
private Quaternion m_bodyRot = Quaternion.Identity;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -915,13 +899,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private float m_speedModifier = 1.0f;
|
|
||||||
|
|
||||||
public float SpeedModifier
|
|
||||||
{
|
|
||||||
get { return m_speedModifier; }
|
|
||||||
set { m_speedModifier = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Modifier for agent movement if we get an AGENT_CONTROL_STOP whilst walking or running
|
/// Modifier for agent movement if we get an AGENT_CONTROL_STOP whilst walking or running
|
||||||
|
@ -929,7 +906,20 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <remarks>
|
/// <remarks>
|
||||||
/// AGENT_CONTRL_STOP comes about if user holds down space key on viewers.
|
/// AGENT_CONTRL_STOP comes about if user holds down space key on viewers.
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
private float AgentControlStopSlowWhilstMoving = 0.2f;
|
private const float AgentControlStopSlowVel = 0.2f;
|
||||||
|
// velocities
|
||||||
|
public const float AgentControlNudgeVel = 1.0f; // setting this diferent from normal as no effect currently
|
||||||
|
public const float AgentControlNormalVel = 1.0f;
|
||||||
|
|
||||||
|
// old normal speed was tuned to match sl normal plus Fast modifiers
|
||||||
|
// so we need to rescale it
|
||||||
|
private float m_speedModifier = 1.0f;
|
||||||
|
|
||||||
|
public float SpeedModifier
|
||||||
|
{
|
||||||
|
get { return m_speedModifier; }
|
||||||
|
set { m_speedModifier = value; }
|
||||||
|
}
|
||||||
|
|
||||||
private bool m_forceFly;
|
private bool m_forceFly;
|
||||||
|
|
||||||
|
@ -1057,22 +1047,24 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
private void SetDirectionVectors()
|
private void SetDirectionVectors()
|
||||||
{
|
{
|
||||||
Dir_Vectors[0] = Vector3.UnitX; //FORWARD
|
Dir_Vectors[0] = new Vector3(AgentControlNormalVel,0,0); //FORWARD
|
||||||
Dir_Vectors[1] = -Vector3.UnitX; //BACK
|
Dir_Vectors[1] = new Vector3(-AgentControlNormalVel,0,0);; //BACK
|
||||||
Dir_Vectors[2] = Vector3.UnitY; //LEFT
|
Dir_Vectors[2] = new Vector3(0,AgentControlNormalVel,0); //LEFT
|
||||||
Dir_Vectors[3] = -Vector3.UnitY; //RIGHT
|
Dir_Vectors[3] = new Vector3(0,-AgentControlNormalVel,0); //RIGHT
|
||||||
Dir_Vectors[4] = Vector3.UnitZ; //UP
|
Dir_Vectors[4] = new Vector3(0,0,AgentControlNormalVel); //UP
|
||||||
Dir_Vectors[5] = -Vector3.UnitZ; //DOWN
|
Dir_Vectors[5] = new Vector3(0,0,-AgentControlNormalVel); //DOWN
|
||||||
Dir_Vectors[6] = new Vector3(0.5f, 0f, 0f); //FORWARD_NUDGE
|
Dir_Vectors[6] = new Vector3(AgentControlNudgeVel, 0f, 0f); //FORWARD_NUDGE
|
||||||
Dir_Vectors[7] = new Vector3(-0.5f, 0f, 0f); //BACK_NUDGE
|
Dir_Vectors[7] = new Vector3(-AgentControlNudgeVel, 0f, 0f); //BACK_NUDGE
|
||||||
Dir_Vectors[8] = new Vector3(0f, 0.5f, 0f); //LEFT_NUDGE
|
Dir_Vectors[8] = new Vector3(0f, AgentControlNudgeVel, 0f); //LEFT_NUDGE
|
||||||
Dir_Vectors[9] = new Vector3(0f, -0.5f, 0f); //RIGHT_NUDGE
|
Dir_Vectors[9] = new Vector3(0f, -AgentControlNudgeVel, 0f); //RIGHT_NUDGE
|
||||||
Dir_Vectors[10] = new Vector3(0f, 0f, -0.5f); //DOWN_Nudge
|
Dir_Vectors[10] = new Vector3(0f, 0f, AgentControlNudgeVel); //UP_Nudge
|
||||||
|
Dir_Vectors[11] = new Vector3(0f, 0f, -AgentControlNudgeVel); //DOWN_Nudge
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* dont see any use for this
|
||||||
private Vector3[] GetWalkDirectionVectors()
|
private Vector3[] GetWalkDirectionVectors()
|
||||||
{
|
{
|
||||||
Vector3[] vector = new Vector3[11];
|
Vector3[] vector = new Vector3[12];
|
||||||
vector[0] = new Vector3(CameraUpAxis.Z, 0f, -CameraAtAxis.Z); //FORWARD
|
vector[0] = new Vector3(CameraUpAxis.Z, 0f, -CameraAtAxis.Z); //FORWARD
|
||||||
vector[1] = new Vector3(-CameraUpAxis.Z, 0f, CameraAtAxis.Z); //BACK
|
vector[1] = new Vector3(-CameraUpAxis.Z, 0f, CameraAtAxis.Z); //BACK
|
||||||
vector[2] = Vector3.UnitY; //LEFT
|
vector[2] = Vector3.UnitY; //LEFT
|
||||||
|
@ -1083,10 +1075,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
vector[7] = new Vector3(-CameraUpAxis.Z, 0f, CameraAtAxis.Z); //BACK_NUDGE
|
vector[7] = new Vector3(-CameraUpAxis.Z, 0f, CameraAtAxis.Z); //BACK_NUDGE
|
||||||
vector[8] = Vector3.UnitY; //LEFT_NUDGE
|
vector[8] = Vector3.UnitY; //LEFT_NUDGE
|
||||||
vector[9] = -Vector3.UnitY; //RIGHT_NUDGE
|
vector[9] = -Vector3.UnitY; //RIGHT_NUDGE
|
||||||
vector[10] = new Vector3(-CameraAtAxis.Z, 0f, -CameraUpAxis.Z); //DOWN_NUDGE
|
vector[10] = new Vector3(CameraAtAxis.Z, 0f, CameraUpAxis.Z); //UP_NUDGE
|
||||||
|
vector[11] = new Vector3(-CameraAtAxis.Z, 0f, -CameraUpAxis.Z); //DOWN_NUDGE
|
||||||
return vector;
|
return vector;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Status Methods
|
#region Status Methods
|
||||||
|
@ -2192,11 +2185,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
// use camera up angle when in mouselook and not flying or when holding the left mouse button down and not flying
|
// use camera up angle when in mouselook and not flying or when holding the left mouse button down and not flying
|
||||||
// this prevents 'jumping' in inappropriate situations.
|
// this prevents 'jumping' in inappropriate situations.
|
||||||
if (!Flying && (m_mouseLook || m_leftButtonDown))
|
// if (!Flying && (m_mouseLook || m_leftButtonDown))
|
||||||
dirVectors = GetWalkDirectionVectors();
|
// dirVectors = GetWalkDirectionVectors();
|
||||||
else
|
// else
|
||||||
dirVectors = Dir_Vectors;
|
dirVectors = Dir_Vectors;
|
||||||
|
|
||||||
|
|
||||||
// A DIR_CONTROL_FLAG occurs when the user is trying to move in a particular direction.
|
// A DIR_CONTROL_FLAG occurs when the user is trying to move in a particular direction.
|
||||||
foreach (Dir_ControlFlags DCF in DIR_CONTROL_FLAGS)
|
foreach (Dir_ControlFlags DCF in DIR_CONTROL_FLAGS)
|
||||||
{
|
{
|
||||||
|
@ -2214,10 +2208,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// Why did I get this?
|
// Why did I get this?
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((MovementFlag & (uint)DCF) == 0) & !AgentControlStopActive)
|
if (((MovementFlag & (uint)DCF) == 0))
|
||||||
{
|
{
|
||||||
//m_log.DebugFormat("[SCENE PRESENCE]: Updating MovementFlag for {0} with {1}", Name, DCF);
|
//m_log.DebugFormat("[SCENE PRESENCE]: Updating MovementFlag for {0} with {1}", Name, DCF);
|
||||||
MovementFlag += (uint)DCF;
|
MovementFlag |= (uint)DCF;
|
||||||
update_movementflag = true;
|
update_movementflag = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2226,7 +2220,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if ((MovementFlag & (uint)DCF) != 0)
|
if ((MovementFlag & (uint)DCF) != 0)
|
||||||
{
|
{
|
||||||
//m_log.DebugFormat("[SCENE PRESENCE]: Updating MovementFlag for {0} with lack of {1}", Name, DCF);
|
//m_log.DebugFormat("[SCENE PRESENCE]: Updating MovementFlag for {0} with lack of {1}", Name, DCF);
|
||||||
MovementFlag -= (uint)DCF;
|
MovementFlag &= (uint)~DCF;
|
||||||
update_movementflag = true;
|
update_movementflag = true;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2344,17 +2338,18 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
if (AgentControlStopActive)
|
if (AgentControlStopActive)
|
||||||
{
|
{
|
||||||
// if (MovementFlag == 0 && Animator.Falling)
|
// if (MovementFlag == 0 && Animator.Falling)
|
||||||
if (MovementFlag == 0 && Animator.currentControlState == ScenePresenceAnimator.motionControlStates.falling)
|
if (MovementFlag == 0 && Animator.currentControlState == ScenePresenceAnimator.motionControlStates.falling)
|
||||||
{
|
{
|
||||||
AddNewMovement(agent_control_v3, AgentControlStopSlowWhilstMoving, true);
|
AddNewMovement(agent_control_v3, AgentControlStopSlowVel, true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
AddNewMovement(agent_control_v3, AgentControlStopSlowWhilstMoving);
|
AddNewMovement(agent_control_v3, AgentControlStopSlowVel);
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
|
{
|
||||||
AddNewMovement(agent_control_v3);
|
AddNewMovement(agent_control_v3);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2453,11 +2448,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
bool updated = false;
|
bool updated = false;
|
||||||
|
|
||||||
|
Vector3 LocalVectorToTarget3D = MoveToPositionTarget - AbsolutePosition;
|
||||||
|
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[SCENE PRESENCE]: bAllowUpdateMoveToPosition {0}, m_moveToPositionInProgress {1}, m_autopilotMoving {2}",
|
// "[SCENE PRESENCE]: bAllowUpdateMoveToPosition {0}, m_moveToPositionInProgress {1}, m_autopilotMoving {2}",
|
||||||
// allowUpdate, m_moveToPositionInProgress, m_autopilotMoving);
|
// allowUpdate, m_moveToPositionInProgress, m_autopilotMoving);
|
||||||
|
|
||||||
double distanceToTarget = Util.GetDistanceTo(AbsolutePosition, MoveToPositionTarget);
|
double distanceToTarget = LocalVectorToTarget3D.Length();
|
||||||
|
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[SCENE PRESENCE]: Abs pos of {0} is {1}, target {2}, distance {3}",
|
// "[SCENE PRESENCE]: Abs pos of {0} is {1}, target {2}, distance {3}",
|
||||||
|
@ -2480,11 +2477,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// Theoretically we might need a more complex PID approach here if other
|
// Theoretically we might need a more complex PID approach here if other
|
||||||
// unknown forces are acting on the avatar and we need to adaptively respond
|
// unknown forces are acting on the avatar and we need to adaptively respond
|
||||||
// to such forces, but the following simple approach seems to works fine.
|
// to such forces, but the following simple approach seems to works fine.
|
||||||
Vector3 LocalVectorToTarget3D =
|
|
||||||
(MoveToPositionTarget - AbsolutePosition) // vector from cur. pos to target in global coords
|
LocalVectorToTarget3D = LocalVectorToTarget3D * Quaternion.Inverse(Rotation); // change to avatar coords
|
||||||
* Matrix4.CreateFromQuaternion(Quaternion.Inverse(Rotation)); // change to avatar coords
|
|
||||||
// Ignore z component of vector
|
// Ignore z component of vector
|
||||||
// Vector3 LocalVectorToTarget2D = new Vector3((float)(LocalVectorToTarget3D.X), (float)(LocalVectorToTarget3D.Y), 0f);
|
// Vector3 LocalVectorToTarget2D = new Vector3((float)(LocalVectorToTarget3D.X), (float)(LocalVectorToTarget3D.Y), 0f);
|
||||||
|
|
||||||
LocalVectorToTarget3D.Normalize();
|
LocalVectorToTarget3D.Normalize();
|
||||||
|
|
||||||
// update avatar movement flags. the avatar coordinate system is as follows:
|
// update avatar movement flags. the avatar coordinate system is as follows:
|
||||||
|
@ -2508,28 +2505,37 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
// based on the above avatar coordinate system, classify the movement into
|
// based on the above avatar coordinate system, classify the movement into
|
||||||
// one of left/right/back/forward.
|
// one of left/right/back/forward.
|
||||||
|
|
||||||
|
const uint noMovFlagsMask = (uint)(~(Dir_ControlFlags.DIR_CONTROL_FLAG_BACK |
|
||||||
|
Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD | Dir_ControlFlags.DIR_CONTROL_FLAG_LEFT |
|
||||||
|
Dir_ControlFlags.DIR_CONTROL_FLAG_RIGHT | Dir_ControlFlags.DIR_CONTROL_FLAG_UP |
|
||||||
|
Dir_ControlFlags.DIR_CONTROL_FLAG_DOWN));
|
||||||
|
|
||||||
|
MovementFlag &= noMovFlagsMask;
|
||||||
|
AgentControlFlags &= noMovFlagsMask;
|
||||||
|
|
||||||
if (LocalVectorToTarget3D.X < 0) //MoveBack
|
if (LocalVectorToTarget3D.X < 0) //MoveBack
|
||||||
{
|
{
|
||||||
MovementFlag += (byte)(uint)Dir_ControlFlags.DIR_CONTROL_FLAG_BACK;
|
MovementFlag |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_BACK;
|
||||||
AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_BACK;
|
AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_BACK;
|
||||||
updated = true;
|
updated = true;
|
||||||
}
|
}
|
||||||
else if (LocalVectorToTarget3D.X > 0) //Move Forward
|
else if (LocalVectorToTarget3D.X > 0) //Move Forward
|
||||||
{
|
{
|
||||||
MovementFlag += (byte)(uint)Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD;
|
MovementFlag |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD;
|
||||||
AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD;
|
AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD;
|
||||||
updated = true;
|
updated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (LocalVectorToTarget3D.Y > 0) //MoveLeft
|
if (LocalVectorToTarget3D.Y > 0) //MoveLeft
|
||||||
{
|
{
|
||||||
MovementFlag += (byte)(uint)Dir_ControlFlags.DIR_CONTROL_FLAG_LEFT;
|
MovementFlag |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_LEFT;
|
||||||
AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_LEFT;
|
AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_LEFT;
|
||||||
updated = true;
|
updated = true;
|
||||||
}
|
}
|
||||||
else if (LocalVectorToTarget3D.Y < 0) //MoveRight
|
else if (LocalVectorToTarget3D.Y < 0) //MoveRight
|
||||||
{
|
{
|
||||||
MovementFlag += (byte)(uint)Dir_ControlFlags.DIR_CONTROL_FLAG_RIGHT;
|
MovementFlag |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_RIGHT;
|
||||||
AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_RIGHT;
|
AgentControlFlags |= (uint)Dir_ControlFlags.DIR_CONTROL_FLAG_RIGHT;
|
||||||
updated = true;
|
updated = true;
|
||||||
}
|
}
|
||||||
|
@ -3016,6 +3022,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
ResetMoveToTarget();
|
ResetMoveToTarget();
|
||||||
|
|
||||||
Velocity = Vector3.Zero;
|
Velocity = Vector3.Zero;
|
||||||
|
m_AngularVelocity = Vector3.Zero;
|
||||||
|
|
||||||
part.AddSittingAvatar(UUID);
|
part.AddSittingAvatar(UUID);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue