public static void JumpToArea(CLRScriptBase script, User currentUser)
{
uint currentArea = script.GetArea(currentUser.Id);
if (!ALFA.Shared.Modules.InfoStore.ActiveAreas.Keys.Contains(currentUser.Id))
{
}
// If this is an adjacent area, jump the DM to one of the ATs connecting the areas.
foreach (ALFA.Shared.ActiveTransition exitTranstion in ALFA.Shared.Modules.InfoStore.ActiveAreas[currentArea].ExitTransitions.Keys)
{
if (exitTranstion.AreaTarget.Id == currentUser.FocusedArea)
{
script.JumpToLocation(script.GetLocation(exitTranstion.Target));
return;
}
}
// If these aren't adjacent areas, grab an AT if we can find one.
if (ALFA.Shared.Modules.InfoStore.ActiveAreas[currentUser.FocusedArea].ExitTransitions.Count > 0)
{
foreach(ALFA.Shared.ActiveTransition enterTransition in ALFA.Shared.Modules.InfoStore.ActiveAreas[currentUser.FocusedArea].ExitTransitions.Keys)
{
script.JumpToLocation(script.GetLocation(enterTransition.Id));
return;
}
}
// If we can't find one, just try the middle of the area.
float x = script.GetAreaSize(AREA_WIDTH, currentUser.FocusedArea) / 2;
float y = script.GetAreaSize(AREA_HEIGHT, currentUser.FocusedArea) / 2;
float z = 0.0f;
NWLocation loc = script.Location(currentUser.FocusedArea, script.Vector(x, y, z), 0.0f);
script.JumpToLocation(loc);
}
}