From bf32020693b62685bc15f2e56cd2b717f4e170a7 Mon Sep 17 00:00:00 2001 From: mingchen Date: Sat, 14 Jul 2007 17:01:15 +0000 Subject: [PATCH] *Removed ParcelManager from SceneObject and Primitive and replaced with events in EventManager *Prim count and sim-wide prim count correctly reflect object bonus multiplier --- OpenSim/Region/Environment/ParcelManager.cs | 11 ++++++++-- .../Region/Environment/Scenes/Primitive.cs | 20 +++++++++---------- OpenSim/Region/Environment/Scenes/Scene.cs | 5 ++++- .../Region/Environment/Scenes/SceneEvents.cs | 20 +++++++++++++++++++ .../Region/Environment/Scenes/SceneObject.cs | 10 ++++------ .../Examples/SimpleApp/MySceneObject.cs | 4 ++-- OpenSim/Region/Examples/SimpleApp/Program.cs | 2 +- 7 files changed, 50 insertions(+), 22 deletions(-) diff --git a/OpenSim/Region/Environment/ParcelManager.cs b/OpenSim/Region/Environment/ParcelManager.cs index 28bfd4c79d..3603caa59d 100644 --- a/OpenSim/Region/Environment/ParcelManager.cs +++ b/OpenSim/Region/Environment/ParcelManager.cs @@ -683,7 +683,14 @@ namespace OpenSim.Region.Environment updatePacket.ParcelData.IsGroupOwned = parcelData.isGroupOwned; updatePacket.ParcelData.LandingType = (byte)parcelData.landingType; updatePacket.ParcelData.LocalID = parcelData.localID; - updatePacket.ParcelData.MaxPrims = 1000; //unemplemented + if (parcelData.area > 0) + { + updatePacket.ParcelData.MaxPrims = Convert.ToInt32(Math.Round((Convert.ToDecimal(parcelData.area) / Convert.ToDecimal(65536)) * 15000 * Convert.ToDecimal(m_world.RegionInfo.estateSettings.objectBonusFactor))); + } + else + { + updatePacket.ParcelData.MaxPrims = 0; + } updatePacket.ParcelData.MediaAutoScale = parcelData.mediaAutoScale; updatePacket.ParcelData.MediaID = parcelData.mediaID; updatePacket.ParcelData.MediaURL = Helpers.StringToField(parcelData.mediaURL); @@ -711,7 +718,7 @@ namespace OpenSim.Region.Environment updatePacket.ParcelData.SequenceID = sequence_id; if (parcelData.simwideArea > 0) { - updatePacket.ParcelData.SimWideMaxPrims = Convert.ToInt32(Math.Floor((Convert.ToDecimal(65536) / Convert.ToDecimal(parcelData.simwideArea)) * 15000)); + updatePacket.ParcelData.SimWideMaxPrims = Convert.ToInt32(Math.Round((Convert.ToDecimal(parcelData.simwideArea) / Convert.ToDecimal(65536)) * 15000 * Convert.ToDecimal(m_world.RegionInfo.estateSettings.objectBonusFactor))); } else { diff --git a/OpenSim/Region/Environment/Scenes/Primitive.cs b/OpenSim/Region/Environment/Scenes/Primitive.cs index 79d5785ddd..833bf85b01 100644 --- a/OpenSim/Region/Environment/Scenes/Primitive.cs +++ b/OpenSim/Region/Environment/Scenes/Primitive.cs @@ -45,7 +45,7 @@ namespace OpenSim.Region.Environment.Scenes public bool m_isRootPrim; public EntityBase m_Parent; - private ParcelManager m_parcelManager; + private EventManager m_eventManager; #region Properties /// @@ -132,12 +132,12 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public Primitive(ulong regionHandle, Scene world, ParcelManager parcelManager, LLUUID ownerID, uint localID, bool isRoot, EntityBase parent, SceneObject rootObject, PrimitiveBaseShape shape, LLVector3 pos) + public Primitive(ulong regionHandle, Scene world, EventManager eventManager, LLUUID ownerID, uint localID, bool isRoot, EntityBase parent, SceneObject rootObject, PrimitiveBaseShape shape, LLVector3 pos) { m_regionHandle = regionHandle; m_world = world; - m_parcelManager = parcelManager; + m_eventManager = eventManager; inventoryItems = new Dictionary(); this.m_Parent = parent; this.m_isRootPrim = isRoot; @@ -147,7 +147,7 @@ namespace OpenSim.Region.Environment.Scenes this.Rotation = Axiom.Math.Quaternion.Identity; - m_parcelManager.setPrimsTainted(); + m_eventManager.TriggerParcelPrimCountTainted(); } /// @@ -156,7 +156,7 @@ namespace OpenSim.Region.Environment.Scenes /// Empty constructor for duplication public Primitive() { - m_parcelManager.setPrimsTainted(); + m_eventManager.TriggerParcelPrimCountTainted(); } #endregion @@ -165,7 +165,7 @@ namespace OpenSim.Region.Environment.Scenes ~Primitive() { - m_parcelManager.setPrimsTainted(); + m_eventManager.TriggerParcelPrimCountTainted(); } #endregion @@ -276,7 +276,7 @@ namespace OpenSim.Region.Environment.Scenes this.m_world.DeleteEntity(linkObject.rootUUID); linkObject.DeleteAllChildren(); - m_parcelManager.setPrimsTainted(); + m_eventManager.TriggerParcelPrimCountTainted(); } /// @@ -352,7 +352,7 @@ namespace OpenSim.Region.Environment.Scenes prim.m_pos += offset; prim.updateFlag = 2; } - m_parcelManager.setPrimsTainted(); + m_eventManager.TriggerParcelPrimCountTainted(); } /// @@ -404,7 +404,7 @@ namespace OpenSim.Region.Environment.Scenes this.Pos = newPos; this.updateFlag = 2; - m_parcelManager.setPrimsTainted(); + m_eventManager.TriggerParcelPrimCountTainted(); } /// @@ -440,7 +440,7 @@ namespace OpenSim.Region.Environment.Scenes this.updateFlag = 2; } - m_parcelManager.setPrimsTainted(); + } #endregion diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 9565c02f4a..03e7a416fa 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -136,6 +136,9 @@ namespace OpenSim.Region.Environment.Scenes m_scriptManager = new ScriptManager(this); m_eventManager = new EventManager(); + m_eventManager.OnParcelPrimCountTainted += new EventManager.OnParcelPrimCountTaintedDelegate(m_parcelManager.setPrimsTainted); + m_eventManager.OnParcelPrimCountAdd += new EventManager.OnParcelPrimCountAddDelegate(m_parcelManager.addPrimToParcelCounts); + MainLog.Instance.Verbose("World.cs - creating new entitities instance"); Entities = new Dictionary(); Avatars = new Dictionary(); @@ -453,7 +456,7 @@ namespace OpenSim.Region.Environment.Scenes /// public void AddNewPrim(LLUUID ownerID, LLVector3 pos, PrimitiveBaseShape shape) { - SceneObject sceneOb = new SceneObject(this, ownerID, this.PrimIDAllocate(), pos, shape); + SceneObject sceneOb = new SceneObject(this, m_eventManager, ownerID, this.PrimIDAllocate(), pos, shape); AddNewEntity(sceneOb); } diff --git a/OpenSim/Region/Environment/Scenes/SceneEvents.cs b/OpenSim/Region/Environment/Scenes/SceneEvents.cs index 685ed8c9ec..46768d5663 100644 --- a/OpenSim/Region/Environment/Scenes/SceneEvents.cs +++ b/OpenSim/Region/Environment/Scenes/SceneEvents.cs @@ -19,9 +19,15 @@ namespace OpenSim.Region.Environment.Scenes public delegate void OnRemovePresenceDelegate(LLUUID uuid); public event OnRemovePresenceDelegate OnRemovePresence; + public delegate void OnParcelPrimCountTaintedDelegate(); + public event OnParcelPrimCountTaintedDelegate OnParcelPrimCountTainted; + public delegate void OnParcelPrimCountUpdateDelegate(); public event OnParcelPrimCountUpdateDelegate OnParcelPrimCountUpdate; + public delegate void OnParcelPrimCountAddDelegate(SceneObject obj); + public event OnParcelPrimCountAddDelegate OnParcelPrimCountAdd; + public void TriggerOnFrame() { if (OnFrame != null) @@ -52,6 +58,13 @@ namespace OpenSim.Region.Environment.Scenes } } + public void TriggerParcelPrimCountTainted() + { + if (OnParcelPrimCountTainted != null) + { + OnParcelPrimCountTainted(); + } + } public void TriggerParcelPrimCountUpdate() { if (OnParcelPrimCountUpdate != null) @@ -59,5 +72,12 @@ namespace OpenSim.Region.Environment.Scenes OnParcelPrimCountUpdate(); } } + public void TriggerParcelPrimCountAdd(SceneObject obj) + { + if (OnParcelPrimCountAdd != null) + { + OnParcelPrimCountAdd(obj); + } + } } } diff --git a/OpenSim/Region/Environment/Scenes/SceneObject.cs b/OpenSim/Region/Environment/Scenes/SceneObject.cs index 7c49ddb4ee..68d214bcc8 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObject.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObject.cs @@ -48,7 +48,6 @@ namespace OpenSim.Region.Environment.Scenes private PhysicsActor m_PhysActor; private EventManager m_eventManager; - private ParcelManager m_parcelManager; public LLUUID rootUUID { @@ -79,12 +78,11 @@ namespace OpenSim.Region.Environment.Scenes /// /// /// - public SceneObject(Scene world, LLUUID ownerID, uint localID, LLVector3 pos, PrimitiveBaseShape shape) + public SceneObject(Scene world, EventManager eventManager, LLUUID ownerID, uint localID, LLVector3 pos, PrimitiveBaseShape shape) { m_regionHandle = world.RegionInfo.RegionHandle; m_world = world; - m_eventManager = world.EventManager; - m_parcelManager = world.ParcelManager; + m_eventManager = eventManager; this.Pos = pos; this.CreateRootFromShape(ownerID, localID, shape, pos); @@ -127,7 +125,7 @@ namespace OpenSim.Region.Environment.Scenes /// private void ProcessParcelPrimCountUpdate() { - m_parcelManager.addPrimToParcelCounts(this); + m_eventManager.TriggerParcelPrimCountAdd(this); } @@ -141,7 +139,7 @@ namespace OpenSim.Region.Environment.Scenes /// public void CreateRootFromShape(LLUUID agentID, uint localID, PrimitiveBaseShape shape, LLVector3 pos) { - this.rootPrimitive = new Primitive(this.m_regionHandle, this.m_world,this.m_parcelManager, agentID, localID, true, this, this, shape, pos); + this.rootPrimitive = new Primitive(this.m_regionHandle, this.m_world,this.m_eventManager, agentID, localID, true, this, this, shape, pos); this.children.Add(rootPrimitive); this.ChildPrimitives.Add(this.rootUUID, this.rootPrimitive); } diff --git a/OpenSim/Region/Examples/SimpleApp/MySceneObject.cs b/OpenSim/Region/Examples/SimpleApp/MySceneObject.cs index 1218dacc00..aab52ccacc 100644 --- a/OpenSim/Region/Examples/SimpleApp/MySceneObject.cs +++ b/OpenSim/Region/Examples/SimpleApp/MySceneObject.cs @@ -13,8 +13,8 @@ namespace SimpleApp { private PerformanceCounter m_counter; - public MySceneObject(Scene world, LLUUID ownerID, uint localID, LLVector3 pos, PrimitiveBaseShape shape) - : base(world, ownerID, localID, pos, shape ) + public MySceneObject(Scene world, EventManager eventManager, LLUUID ownerID, uint localID, LLVector3 pos, PrimitiveBaseShape shape) + : base(world, eventManager, ownerID, localID, pos, shape ) { String objectName = "Processor"; String counterName = "% Processor Time"; diff --git a/OpenSim/Region/Examples/SimpleApp/Program.cs b/OpenSim/Region/Examples/SimpleApp/Program.cs index 42a7add0c9..ce60512406 100644 --- a/OpenSim/Region/Examples/SimpleApp/Program.cs +++ b/OpenSim/Region/Examples/SimpleApp/Program.cs @@ -75,7 +75,7 @@ namespace SimpleApp shape.Scale = new LLVector3(0.5f, 0.5f, 0.5f); LLVector3 pos = new LLVector3(129, 129, 27); - m_sceneObject = new MySceneObject(world, LLUUID.Zero, world.PrimIDAllocate(), pos, shape); + m_sceneObject = new MySceneObject(world,world.EventManager, LLUUID.Zero, world.PrimIDAllocate(), pos, shape); world.AddNewEntity(m_sceneObject); m_log.WriteLine(LogPriority.NORMAL, "Press enter to quit.");