if an NPC target is set to a ground location, then automatically land them when they get there.
This doesn't help where the target is a prim surface. In these situations, it might be better to provide manual overrides so the script can control whethre an avatar flys there/lands, etc.bulletsim
parent
54ce029342
commit
1918402cb1
|
@ -1537,8 +1537,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (update_movementflag
|
if (update_movementflag
|
||||||
&& ((flags & AgentManager.ControlFlags.AGENT_CONTROL_SIT_ON_GROUND) == 0)
|
&& ((flags & AgentManager.ControlFlags.AGENT_CONTROL_SIT_ON_GROUND) == 0)
|
||||||
&& (m_parentID == 0)
|
&& (m_parentID == 0)
|
||||||
&& !SitGround
|
&& !SitGround)
|
||||||
&& !MovingToTarget)
|
|
||||||
Animator.UpdateMovementAnimations();
|
Animator.UpdateMovementAnimations();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1711,9 +1710,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (pos.Z - terrainHeight < 0.2)
|
if (pos.Z - terrainHeight < 0.2)
|
||||||
pos.Z = terrainHeight;
|
pos.Z = terrainHeight;
|
||||||
|
|
||||||
// m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
// "[SCENE PRESENCE]: Avatar {0} set move to target {1} (terrain height {2}) in {3}",
|
"[SCENE PRESENCE]: Avatar {0} set move to target {1} (terrain height {2}) in {3}",
|
||||||
// Name, pos, terrainHeight, m_scene.RegionInfo.RegionName);
|
Name, pos, terrainHeight, m_scene.RegionInfo.RegionName);
|
||||||
|
|
||||||
if (pos.Z > terrainHeight)
|
if (pos.Z > terrainHeight)
|
||||||
PhysicsActor.Flying = true;
|
PhysicsActor.Flying = true;
|
||||||
|
|
|
@ -72,8 +72,19 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
||||||
// Check the error term of the current position in relation to the target position
|
// Check the error term of the current position in relation to the target position
|
||||||
if (distanceToTarget <= ScenePresence.SIGNIFICANT_MOVEMENT)
|
if (distanceToTarget <= ScenePresence.SIGNIFICANT_MOVEMENT)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[NPC MODULE]: Stopping movement of npc {0}", presence.Name);
|
|
||||||
// We are close enough to the target
|
// We are close enough to the target
|
||||||
|
m_log.DebugFormat("[NPC MODULE]: Stopping movement of npc {0}", presence.Name);
|
||||||
|
|
||||||
|
if (presence.PhysicsActor.Flying)
|
||||||
|
{
|
||||||
|
Vector3 targetPos = presence.MoveToPositionTarget;
|
||||||
|
float terrainHeight = (float)presence.Scene.Heightmap[(int)targetPos.X, (int)targetPos.Y];
|
||||||
|
if (targetPos.Z - terrainHeight < 0.2)
|
||||||
|
{
|
||||||
|
presence.PhysicsActor.Flying = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
presence.Velocity = Vector3.Zero;
|
presence.Velocity = Vector3.Zero;
|
||||||
presence.AbsolutePosition = presence.MoveToPositionTarget;
|
presence.AbsolutePosition = presence.MoveToPositionTarget;
|
||||||
presence.ResetMoveToTarget();
|
presence.ResetMoveToTarget();
|
||||||
|
|
Loading…
Reference in New Issue