Add a OS_NPC_LAND_AT_TARGET option to osMoveToTarget()

Default for this function is now not to automatically land.
This allows better control by scripts when an avatar is going to be landing on a prim rather than the ground.
Stopping the avatar involves faking a collision, to avoid the pid controller making it overshoot.
A better approach would be to gradually slow the avatar as we near the target
This commit is contained in:
Justin Clark-Casey (justincc)
2011-08-10 23:56:19 +01:00
parent fb92678b83
commit 7f499ff3f3
7 changed files with 45 additions and 18 deletions

View File

@@ -2209,11 +2209,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (module != null)
{
Vector3 pos = new Vector3((float) position.x, (float) position.y, (float) position.z);
module.MoveToTarget(new UUID(npc.m_string), World, pos, false);
module.MoveToTarget(new UUID(npc.m_string), World, pos, false, true);
}
}
public void osNpcMoveToTarget(LSL_Key npc, LSL_Vector position, int noFly)
public void osNpcMoveToTarget(LSL_Key npc, LSL_Vector position, int moveParams)
{
CheckThreatLevel(ThreatLevel.High, "osNpcMoveToTarget");
@@ -2221,7 +2221,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (module != null)
{
Vector3 pos = new Vector3((float)position.x, (float)position.y, (float)position.z);
module.MoveToTarget(new UUID(npc.m_string), World, pos, noFly != 0);
module.MoveToTarget(
new UUID(npc.m_string),
World,
pos,
(moveParams & ScriptBaseClass.OS_NPC_NO_FLY) != 0,
(moveParams & ScriptBaseClass.OS_NPC_LAND_AT_TARGET) != 0);
}
}

View File

@@ -594,6 +594,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
// Constants for osNpc* functions
public const int OS_NPC_FLY = 0;
public const int OS_NPC_NO_FLY = 1;
public const int OS_NPC_LAND_AT_TARGET = 2;
public const string URL_REQUEST_GRANTED = "URL_REQUEST_GRANTED";
public const string URL_REQUEST_DENIED = "URL_REQUEST_DENIED";