public void UpdatePrimFlags(uint localID, bool UsePhysics, bool IsTemporary, bool IsPhantom, bool IsVolumeDetect,
ObjectFlagUpdatePacket.ExtraPhysicsBlock[] blocks)
{
ISceneChildEntity selectionPart = GetChildPart(localID);
if (IsTemporary)
{
// Remove from database and parcel prim count
// Temporary objects arn't saved to the database ever, so we don't need to do anything
}
if (selectionPart != null)
{
foreach (SceneObjectPart part in m_partsList)
{
IOpenRegionSettingsModule WSModule = Scene.RequestModuleInterface<IOpenRegionSettingsModule>();
if (WSModule != null)
{
if (WSModule.MaximumPhysPrimScale == -1)
break;
if (part.Scale.X > WSModule.MaximumPhysPrimScale ||
part.Scale.Y > WSModule.MaximumPhysPrimScale ||
part.Scale.Z > WSModule.MaximumPhysPrimScale)
{
UsePhysics = false; // Reset physics
break;
}
}
}
bool needsPhysicalRebuild = ((SceneObjectPart) selectionPart).UpdatePrimFlags(UsePhysics, IsTemporary,
IsPhantom, IsVolumeDetect,
blocks);
foreach (SceneObjectPart part in m_partsList.Where(part => selectionPart != part))
{
if (needsPhysicalRebuild)
part.UpdatePrimFlags(UsePhysics, IsTemporary, IsPhantom, IsVolumeDetect, null);
else
needsPhysicalRebuild = part.UpdatePrimFlags(UsePhysics, IsTemporary, IsPhantom,
IsVolumeDetect, null);
}
if (needsPhysicalRebuild)
RebuildPhysicalRepresentation(true, null);
}
}