mantis 8250: make same changes to avatar move to target (still no new OSSL)
							parent
							
								
									28b22a4fc1
								
							
						
					
					
						commit
						aca62392ac
					
				|  | @ -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!. | ||||
|         /// </summary> | ||||
|         /// <remarks> | ||||
|         /// This is not intended as a permament location for this method. | ||||
|         /// </remarks> | ||||
|         /// <param name="presence"></param> | ||||
| /* 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() | ||||
|         { | ||||
|  |  | |||
|  | @ -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 | ||||
|                 { | ||||
|  |  | |||
|  | @ -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); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Move to the given target over time. | ||||
|         /// </summary> | ||||
|  | @ -3180,7 +3181,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|         /// <param name="landAtTarget"> | ||||
|         /// If true and the avatar starts flying during the move then land at the target. | ||||
|         /// </param> | ||||
|         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; | ||||
| 
 | ||||
|  |  | |||
|  | @ -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; | ||||
|                     } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 UbitUmarov
						UbitUmarov