/// <summary> /// Move this group from inside of another group into the Scene as a full member /// This does not reset IDs so that it is updated correctly in the client /// </summary> /// <param name="entity"></param> public void DelinkPartToScene(ISceneEntity entity) { //Force the prim to backup now that it has been added entity.ForcePersistence(); //Tell the entity that they are being added to a scene entity.RebuildPhysicalRepresentation(true, null); //Now save the entity that we have AddEntity(entity, false); }
//Like handleEventManagerOnSignificantClientMovement, but for objects for parcel incoming object permissions public void EventManagerOnSignificantObjectMovement(ISceneEntity group) { ILandObject over = GetLandObject((int) group.AbsolutePosition.X, (int) group.AbsolutePosition.Y); if (over != null) { //Entered this new parcel if (over.LandData.GlobalID != group.LastParcelUUID) { if (!m_scene.Permissions.CanObjectEntry(group.UUID, false, group.AbsolutePosition, group.OwnerID)) { //Revert the position and do not update the parcel ID group.AbsolutePosition = group.LastSignificantPosition; //If the object has physics, stop it from moving if ((group.RootChild.Flags & PrimFlags.Physics) == PrimFlags.Physics) { bool wasTemporary = ((group.RootChild.Flags & PrimFlags.TemporaryOnRez) != 0); bool wasPhantom = ((group.RootChild.Flags & PrimFlags.Phantom) != 0); bool wasVD = group.RootChild.VolumeDetectActive; bool needsPhysicalRebuild = group.RootChild.UpdatePrimFlags(false, wasTemporary, wasPhantom, wasVD, null); if (needsPhysicalRebuild) group.RebuildPhysicalRepresentation(true); } //Send an update so that all clients see it group.ScheduleGroupTerseUpdate(); } else { UUID oldParcelUUID = group.LastParcelUUID; //Update the UUID then group.LastParcelUUID = over.LandData.GlobalID; //Trigger the event object[] param = new object[3]; param[0] = group; param[1] = over.LandData.GlobalID; param[2] = oldParcelUUID; m_scene.AuroraEventManager.FireGenericEventHandler("ObjectEnteringNewParcel", param); } } } }