From 0fe363ba65d18bd324396fa1482567bc2db65d1e Mon Sep 17 00:00:00 2001
From: mingchen
Date: Fri, 6 Jun 2008 23:20:02 +0000
Subject: *Made Object Counting correct with linked objects and turned the
previously protected functions that only return object counts to public so it
can be easily used by outside classes.
---
OpenSim/Region/Environment/Scenes/InnerScene.cs | 24 ++++++++++++++----------
OpenSim/Region/Environment/Scenes/Scene.cs | 8 ++++----
2 files changed, 18 insertions(+), 14 deletions(-)
diff --git a/OpenSim/Region/Environment/Scenes/InnerScene.cs b/OpenSim/Region/Environment/Scenes/InnerScene.cs
index 4c9257d..589d642 100644
--- a/OpenSim/Region/Environment/Scenes/InnerScene.cs
+++ b/OpenSim/Region/Environment/Scenes/InnerScene.cs
@@ -214,7 +214,7 @@ namespace OpenSim.Region.Environment.Scenes
{
// QuadTree.AddSceneObject(sceneObject);
Entities.Add(sceneObject.UUID, sceneObject);
- m_numPrim++;
+ m_numPrim += sceneObject.Children.Count;
return true;
}
@@ -228,14 +228,18 @@ namespace OpenSim.Region.Environment.Scenes
///
///
/// true if the object was deleted, false if there was no object to delete
- protected internal bool DeleteSceneObject(LLUUID uuid)
+ protected internal bool DeleteSceneObject(LLUUID uuid, bool resultOfObjectLinked)
{
lock (Entities)
{
if (Entities.ContainsKey(uuid))
{
+ Console.WriteLine("REMOVED " + ((SceneObjectGroup)Entities[uuid]).Children.Count + "!");
+ if (!resultOfObjectLinked)
+ {
+ m_numPrim -= ((SceneObjectGroup)Entities[uuid]).Children.Count;
+ }
Entities.Remove(uuid);
- m_numPrim--;
return true;
}
@@ -584,7 +588,7 @@ namespace OpenSim.Region.Environment.Scenes
}
}
- protected internal int GetChildAgentCount()
+ public int GetChildAgentCount()
{
// some network situations come in where child agents get closed twice.
if (m_numChildAgents < 0)
@@ -595,27 +599,27 @@ namespace OpenSim.Region.Environment.Scenes
return m_numChildAgents;
}
- protected internal int GetRootAgentCount()
+ public int GetRootAgentCount()
{
return m_numRootAgents;
}
- protected internal int GetTotalObjects()
+ public int GetTotalObjectsCount()
{
return m_numPrim;
}
- protected internal int GetActiveObjects()
+ public int GetActiveObjectsCount()
{
return m_physicalPrim;
}
- protected internal int GetActiveScripts()
+ public int GetActiveScriptsCount()
{
return m_activeScripts;
}
- protected internal int GetScriptLPS()
+ public int GetScriptLPS()
{
int returnval = m_scriptLPS;
m_scriptLPS = 0;
@@ -1437,7 +1441,7 @@ namespace OpenSim.Region.Environment.Scenes
// think it's selected, so it will never send a deselect...
copy.IsSelected = false;
- m_numPrim++;
+ m_numPrim += copy.Children.Count;
copy.StartScripts();
copy.ScheduleGroupForFullUpdate();
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index 211f320..7d076ef 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -757,13 +757,13 @@ namespace OpenSim.Region.Environment.Scenes
m_statsReporter.AddInPackets(0);
m_statsReporter.SetRootAgents(m_innerScene.GetRootAgentCount());
m_statsReporter.SetChildAgents(m_innerScene.GetChildAgentCount());
- m_statsReporter.SetObjects(m_innerScene.GetTotalObjects());
- m_statsReporter.SetActiveObjects(m_innerScene.GetActiveObjects());
+ m_statsReporter.SetObjects(m_innerScene.GetTotalObjectsCount());
+ m_statsReporter.SetActiveObjects(m_innerScene.GetActiveObjectsCount());
frameMS = System.Environment.TickCount - frameMS;
m_statsReporter.addFrameMS(frameMS);
m_statsReporter.addPhysicsMS(physicsMS);
m_statsReporter.addOtherMS(otherMS);
- m_statsReporter.SetActiveScripts(m_innerScene.GetActiveScripts());
+ m_statsReporter.SetActiveScripts(m_innerScene.GetActiveScriptsCount());
m_statsReporter.addScriptLines(m_innerScene.GetScriptLPS());
}
}
@@ -1412,7 +1412,7 @@ namespace OpenSim.Region.Environment.Scenes
/// true if the object was in the scene, false if it was not
public bool UnlinkSceneObject(LLUUID uuid)
{
- if (m_innerScene.DeleteSceneObject(uuid))
+ if (m_innerScene.DeleteSceneObject(uuid,true))
{
m_storageManager.DataStore.RemoveObject(uuid, m_regInfo.RegionID);
--
cgit v1.1