From dac32c4e5acd76a3b42dede1c573dbef1a98c7e1 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Fri, 20 Jan 2017 14:26:24 +0000 Subject: change CanObjectEntry() to use a SOG --- .../PrimLimitsModule/PrimLimitsModule.cs | 39 +++++++++------------- 1 file changed, 15 insertions(+), 24 deletions(-) (limited to 'OpenSim/Region/OptionalModules') diff --git a/OpenSim/Region/OptionalModules/PrimLimitsModule/PrimLimitsModule.cs b/OpenSim/Region/OptionalModules/PrimLimitsModule/PrimLimitsModule.cs index 4875a61..9c0d801 100644 --- a/OpenSim/Region/OptionalModules/PrimLimitsModule/PrimLimitsModule.cs +++ b/OpenSim/Region/OptionalModules/PrimLimitsModule/PrimLimitsModule.cs @@ -135,50 +135,41 @@ namespace OpenSim.Region.OptionalModules return true; } - private bool CanObjectEnter(UUID objectID, bool enteringRegion, Vector3 newPoint, Scene scene) + private bool CanObjectEnter(SceneObjectGroup sog, bool enteringRegion, Vector3 newPoint, Scene scene) { - if (newPoint.X < -1f || newPoint.X > (scene.RegionInfo.RegionSizeX + 1) || - newPoint.Y < -1f || newPoint.Y > (scene.RegionInfo.RegionSizeY) ) + float newX = newPoint.X; + float newY = newPoint.Y; + if (newX < -1f || newX > (scene.RegionInfo.RegionSizeX + 1.0f) || + newY < -1f || newY > (scene.RegionInfo.RegionSizeY + 1.0f) ) return true; - SceneObjectPart obj = scene.GetSceneObjectPart(objectID); - - if (obj == null) + if (sog == null) return false; - // Prim counts are determined by the location of the root prim. if we're - // moving a child prim, just let it pass - if (!obj.IsRoot) - { - return true; - } - - ILandObject newParcel = scene.LandChannel.GetLandObject(newPoint.X, newPoint.Y); + ILandObject newParcel = scene.LandChannel.GetLandObject(newX, newY); if (newParcel == null) return true; - Vector3 oldPoint = obj.GroupPosition; - ILandObject oldParcel = scene.LandChannel.GetLandObject(oldPoint.X, oldPoint.Y); - - // The prim hasn't crossed a region boundry so we don't need to worry - // about prim counts here - if(oldParcel != null && oldParcel.Equals(newParcel)) + if(!enteringRegion) { - return true; + Vector3 oldPoint = sog.AbsolutePosition; + ILandObject oldParcel = scene.LandChannel.GetLandObject(oldPoint.X, oldPoint.Y); + if(oldParcel != null && oldParcel.Equals(newParcel)) + return true; } - int objectCount = obj.ParentGroup.PrimCount; + int objectCount = sog.PrimCount; int usedPrims = newParcel.PrimCounts.Total; int simulatorCapacity = newParcel.GetSimulatorMaxPrimCount(); // TODO: Add Special Case here for temporary prims - string response = DoCommonChecks(objectCount, obj.OwnerID, newParcel, scene); + string response = DoCommonChecks(objectCount, sog.OwnerID, newParcel, scene); if (response != null) { - m_dialogModule.SendAlertToUser(obj.OwnerID, response); + m_dialogModule.SendAlertToUser(sog.OwnerID, response); return false; } return true; -- cgit v1.1