public ISceneEntity GetLinkEntity(SceneObjectPart part, int linknum)
{
if (linknum < 0)
{
if (linknum == ScriptBaseClass.LINK_THIS)
return part;
else
return null;
}
int actualPrimCount = part.ParentGroup.PrimCount;
List<ScenePresence> sittingAvatars = part.ParentGroup.GetSittingAvatars();
int adjustedPrimCount = actualPrimCount + sittingAvatars.Count;
// Special case for a single prim. In this case the linknum is zero. However, this will not match a single
// prim that has any avatars sat upon it (in which case the root prim is link 1).
if (linknum == 0)
{
if (actualPrimCount == 1 && sittingAvatars.Count == 0)
return part;
return null;
}
// Special case to handle a single prim with sitting avatars. GetLinkPart() would only match zero but
// here we must match 1 (ScriptBaseClass.LINK_ROOT).
else if (linknum == ScriptBaseClass.LINK_ROOT && actualPrimCount == 1)
{
if (sittingAvatars.Count > 0)
return part.ParentGroup.RootPart;
else
return null;
}
else if (linknum <= adjustedPrimCount)
{
if (linknum <= actualPrimCount)
{
return part.ParentGroup.GetLinkNumPart(linknum);
}
else
{
return sittingAvatars[linknum - actualPrimCount - 1];
}
}
else
{
return null;
}
}