本文整理汇总了C#中OpenSim.Region.Framework.Scenes.SceneObjectGroup.ChildrenEntities方法的典型用法代码示例。如果您正苦于以下问题:C# SceneObjectGroup.ChildrenEntities方法的具体用法?C# SceneObjectGroup.ChildrenEntities怎么用?C# SceneObjectGroup.ChildrenEntities使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OpenSim.Region.Framework.Scenes.SceneObjectGroup
的用法示例。
在下文中一共展示了SceneObjectGroup.ChildrenEntities方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: LinkPartToSOG
public bool LinkPartToSOG(SceneObjectGroup grp, SceneObjectPart part, int linkNum)
{
part.SetParentLocalId(grp.RootPart.LocalId);
part.SetParent(grp);
// Insert in terms of link numbers, the new links
// before the current ones (with the exception of
// the root prim. Shuffle the old ones up
foreach (ISceneEntity otherPart in grp.ChildrenEntities())
{
if (otherPart.LinkNum >= linkNum)
{
// Don't update root prim link number
otherPart.LinkNum += 1;
}
}
part.LinkNum = linkNum;
return LinkPartToEntity(grp, part);
}
示例2: CrossPrimGroupIntoNewRegion
/// <summary>
/// Move the given scene object into a new region
/// </summary>
/// <param name="destination"></param>
/// <param name="grp">Scene Object Group that we're crossing</param>
/// <param name="attemptedPos"></param>
/// <returns>
/// true if the crossing itself was successful, false on failure
/// </returns>
protected bool CrossPrimGroupIntoNewRegion(GridRegion destination, SceneObjectGroup grp, Vector3 attemptedPos)
{
bool successYN = false;
if (destination != null)
{
if(grp.SitTargetAvatar.Count != 0)
{
bool success = false;
foreach (UUID avID in grp.SitTargetAvatar)
{
IScenePresence SP = grp.Scene.GetScenePresence(avID);
SP.Velocity = grp.RootChild.PhysActor.Velocity;
InternalCross(SP, attemptedPos, false, destination);
success = grp.Scene.GetScenePresence(avID).IsChildAgent;
}
if(success)
{
foreach(ISceneChildEntity part in grp.ChildrenEntities())
part.SitTargetAvatar.Clear();
IBackupModule backup = grp.Scene.RequestModuleInterface<IBackupModule>();
if(backup != null)
return backup.DeleteSceneObjects(new[] { grp }, false, false);
return true;//They do all the work adding the prim in the other region
}
return false;
}
SceneObjectGroup copiedGroup = (SceneObjectGroup)grp.Copy(false);
copiedGroup.SetAbsolutePosition(true, attemptedPos);
if (grp.Scene != null)
successYN = grp.Scene.RequestModuleInterface<ISimulationService>().CreateObject(destination, copiedGroup);
if (successYN)
{
// We remove the object here
try
{
foreach (ISceneChildEntity part in grp.ChildrenEntities())
part.SitTargetAvatar.Clear();
IBackupModule backup = grp.Scene.RequestModuleInterface<IBackupModule>();
if (backup != null)
return backup.DeleteSceneObjects(new[] { grp }, false, true);
}
catch (Exception e)
{
MainConsole.Instance.ErrorFormat(
"[ENTITY TRANSFER MODULE]: Exception deleting the old object left behind on a border crossing for {0}, {1}",
grp, e);
}
}
else
{
if (!grp.IsDeleted)
{
if (grp.RootPart.PhysActor != null)
{
grp.RootPart.PhysActor.CrossingFailure();
}
}
MainConsole.Instance.ErrorFormat("[ENTITY TRANSFER MODULE]: Prim crossing failed for {0}", grp);
}
}
else
{
MainConsole.Instance.Error("[ENTITY TRANSFER MODULE]: destination was unexpectedly null in Scene.CrossPrimGroupIntoNewRegion()");
}
return successYN;
}
示例3: CrossPrimGroupIntoNewRegion
/// <summary>
/// Move the given scene object into a new region
/// </summary>
/// <param name="newRegionHandle"></param>
/// <param name="grp">Scene Object Group that we're crossing</param>
/// <returns>
/// true if the crossing itself was successful, false on failure
/// </returns>
protected bool CrossPrimGroupIntoNewRegion(GridRegion destination, SceneObjectGroup grp, Vector3 attemptedPos)
{
bool successYN = false;
grp.RootPart.ClearUpdateScheduleOnce();
if (destination != null)
{
if (grp.SitTargetAvatar.Count != 0)
{
lock (grp.SitTargetAvatar)
{
foreach (UUID avID in grp.SitTargetAvatar)
{
IScenePresence SP = grp.Scene.GetScenePresence(avID);
CrossAgentToNewRegionAsync(SP, grp.AbsolutePosition, destination, false);
}
}
}
SceneObjectGroup copiedGroup = (SceneObjectGroup)grp.Copy(false);
copiedGroup.SetAbsolutePosition(true, attemptedPos);
if (grp.Scene != null && grp.Scene.SimulationService != null)
successYN = grp.Scene.SimulationService.CreateObject(destination, copiedGroup);
if (successYN)
{
// We remove the object here
try
{
foreach (ISceneChildEntity part in grp.ChildrenEntities())
{
part.SitTargetAvatar.Clear();
}
IBackupModule backup = grp.Scene.RequestModuleInterface<IBackupModule>();
if (backup != null)
return backup.DeleteSceneObjects(new SceneObjectGroup[1] { grp }, false);
}
catch (Exception e)
{
m_log.ErrorFormat(
"[ENTITY TRANSFER MODULE]: Exception deleting the old object left behind on a border crossing for {0}, {1}",
grp, e);
}
}
else
{
if (!grp.IsDeleted)
{
if (grp.RootPart.PhysActor != null)
{
grp.RootPart.PhysActor.CrossingFailure();
}
}
m_log.ErrorFormat("[ENTITY TRANSFER MODULE]: Prim crossing failed for {0}", grp);
}
}
else
{
m_log.Error("[ENTITY TRANSFER MODULE]: destination was unexpectedly null in Scene.CrossPrimGroupIntoNewRegion()");
}
return successYN;
}