diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 614769c56f..39f8fc91c1 100755 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -6285,71 +6285,6 @@ Environment.Exit(1); } } - /// This method deals with movement when an avatar is automatically moving (but this is distinct from the - /// autopilot that moves an avatar to a sit target!. - /// - /// - /// This is not intended as a permament location for this method. - /// - /// -/* move to target is now done on presence update - private void HandleOnSignificantClientMovement(ScenePresence presence) - { - if (presence.MovingToTarget) - { - double distanceToTarget = Util.GetDistanceTo(presence.AbsolutePosition, presence.MoveToPositionTarget); -// m_log.DebugFormat( -// "[SCENE]: Abs pos of {0} is {1}, target {2}, distance {3}", -// presence.Name, presence.AbsolutePosition, presence.MoveToPositionTarget, distanceToTarget); - - // Check the error term of the current position in relation to the target position - if (distanceToTarget <= ScenePresence.SIGNIFICANT_MOVEMENT) - { - // We are close enough to the target -// m_log.DebugFormat("[SCENEE]: Stopping autopilot of {0}", presence.Name); - - presence.Velocity = Vector3.Zero; - presence.AbsolutePosition = presence.MoveToPositionTarget; - presence.ResetMoveToTarget(); - - if (presence.Flying) - { - // A horrible hack to stop the avatar dead in its tracks rather than having them overshoot - // the target if flying. - // We really need to be more subtle (slow the avatar as it approaches the target) or at - // least be able to set collision status once, rather than 5 times to give it enough - // weighting so that that PhysicsActor thinks it really is colliding. - for (int i = 0; i < 5; i++) - presence.IsColliding = true; - - if (presence.LandAtTarget) - presence.Flying = false; - -// Vector3 targetPos = presence.MoveToPositionTarget; -// float terrainHeight = (float)presence.Scene.Heightmap[(int)targetPos.X, (int)targetPos.Y]; -// if (targetPos.Z - terrainHeight < 0.2) -// { -// presence.Flying = false; -// } - } - -// m_log.DebugFormat( -// "[SCENE]: AgentControlFlags {0}, MovementFlag {1} for {2}", -// presence.AgentControlFlags, presence.MovementFlag, presence.Name); - } - else - { -// m_log.DebugFormat( -// "[SCENE]: Updating npc {0} at {1} for next movement to {2}", -// presence.Name, presence.AbsolutePosition, presence.MoveToPositionTarget); - - Vector3 agent_control_v3 = new Vector3(); - presence.HandleMoveToTargetUpdate(1, ref agent_control_v3); - presence.AddNewMovement(agent_control_v3); - } - } - } -*/ // manage and select spawn points in sequence public int SpawnPoint() { diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 0dc8f7bc5a..13ad039a65 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs @@ -2680,7 +2680,7 @@ namespace OpenSim.Region.Framework.Scenes ScenePresence avatar = m_scene.GetScenePresence(AttachedAvatar); if (avatar != null && !avatar.IsSatOnObject) - avatar.MoveToTarget(target, false, false, tau); + avatar.MoveToTarget(target, false, false, false, tau); } else { diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 88ec659afe..a88c8c88c1 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -3166,8 +3166,9 @@ namespace OpenSim.Region.Framework.Scenes public void MoveToTargetHandle(Vector3 pos, bool noFly, bool landAtTarget) { - MoveToTarget(pos, noFly, landAtTarget); + MoveToTarget(pos, noFly, false, landAtTarget); } + /// /// Move to the given target over time. /// @@ -3180,7 +3181,7 @@ namespace OpenSim.Region.Framework.Scenes /// /// If true and the avatar starts flying during the move then land at the target. /// - public void MoveToTarget(Vector3 pos, bool noFly, bool landAtTarget, float tau = -1f) + public void MoveToTarget(Vector3 pos, bool noFly, bool landAtTarget, bool running, float tau = -1f) { m_delayedStop = -1; @@ -3218,19 +3219,14 @@ namespace OpenSim.Region.Framework.Scenes // "[SCENE PRESENCE]: Avatar {0} set move to target {1} (terrain height {2}) in {3}", // Name, pos, terrainHeight, m_scene.RegionInfo.RegionName); - terrainHeight += Appearance.AvatarHeight; // so 1.5 * AvatarHeight above ground at target - bool shouldfly = Flying; - if (noFly) - shouldfly = false; - else if (pos.Z > terrainHeight || Flying) - shouldfly = true; + bool shouldfly = noFly ? false : (Flying || (pos.Z > terrainHeight + Appearance.AvatarHeight)); Vector3 localVectorToTarget3D = pos - AbsolutePosition; // m_log.DebugFormat("[SCENE PRESENCE]: Local vector to target is {0},[1}", localVectorToTarget3D.X,localVectorToTarget3D.Y); m_movingToTarget = true; - LandAtTarget = landAtTarget; + LandAtTarget = landAtTarget & shouldfly; m_moveToPositionTarget = pos; if(tau > 0) { @@ -3245,7 +3241,10 @@ namespace OpenSim.Region.Framework.Scenes SetAlwaysRun = false; } else + { m_moveToSpeed = 4.096f * m_speedModifier; + SetAlwaysRun = running; + } Flying = shouldfly; diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs index ced82e6b57..0f4751163e 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs @@ -259,8 +259,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC // sp.Name, pos, scene.RegionInfo.RegionName, // noFly, landAtTarget); - sp.MoveToTarget(pos, noFly, landAtTarget); - sp.SetAlwaysRun = running; + sp.MoveToTarget(pos, noFly, landAtTarget, running); return true; }