Merge branch 'master' into careminster-presence-refactor

This commit is contained in:
Melanie
2011-04-08 04:16:29 +01:00
73 changed files with 170 additions and 6291 deletions

View File

@@ -529,6 +529,10 @@ namespace OpenSim.Region.CoreModules.World.Land
{
if (landBitmap[x, y])
{
// m_log.DebugFormat(
// "[LAND MANAGEMENT MODULE]: Registering parcel {0} for land co-ord ({1}, {2}) on {3}",
// new_land.LandData.Name, x, y, m_scene.RegionInfo.RegionName);
m_landIDList[x, y] = newLandLocalID;
}
}
@@ -658,8 +662,16 @@ namespace OpenSim.Region.CoreModules.World.Land
// Corner case. If an autoreturn happens during sim startup
// we will come here with the list uninitialized
//
int landId = m_landIDList[x, y];
// if (landId == 0)
// m_log.DebugFormat(
// "[LAND MANAGEMENT MODULE]: No land object found at ({0}, {1}) on {2}",
// x, y, m_scene.RegionInfo.RegionName);
if (m_landList.ContainsKey(m_landIDList[x, y]))
return m_landList[m_landIDList[x, y]];
return null;
}
}

View File

@@ -736,23 +736,11 @@ namespace OpenSim.Region.CoreModules.World.Land
return LandBitmap;
}
/// <summary>
/// Full sim land object creation
/// </summary>
/// <returns></returns>
public bool[,] BasicFullRegionLandBitmap()
{
return GetSquareLandBitmap(0, 0, (int) Constants.RegionSize, (int) Constants.RegionSize);
}
/// <summary>
/// Used to modify the bitmap between the x and y points. Points use 64 scale
/// </summary>
/// <param name="start_x"></param>
/// <param name="start_y"></param>
/// <param name="end_x"></param>
/// <param name="end_y"></param>
/// <returns></returns>
public bool[,] GetSquareLandBitmap(int start_x, int start_y, int end_x, int end_y)
{
bool[,] tempBitmap = new bool[64,64];

View File

@@ -173,18 +173,31 @@ namespace OpenSim.Region.CoreModules.World.Land
// NOTE: Call under Taint Lock
private void AddObject(SceneObjectGroup obj)
{
// m_log.DebugFormat("[PRIM COUNT MODULE]: Adding object {0} {1} to prim count", obj.Name, obj.UUID);
{
if (obj.IsAttachment)
return;
if (((obj.RootPart.Flags & PrimFlags.TemporaryOnRez) != 0))
return;
return;
Vector3 pos = obj.AbsolutePosition;
ILandObject landObject = m_Scene.LandChannel.GetLandObject(pos.X, pos.Y);
// If for some reason there is no land object (perhaps the object is out of bounds) then we can't count it
if (landObject == null)
{
// m_log.WarnFormat(
// "[PRIM COUNT MODULE]: Found no land object for {0} at position ({1}, {2}) on {3}",
// obj.Name, pos.X, pos.Y, m_Scene.RegionInfo.RegionName);
return;
}
LandData landData = landObject.LandData;
// m_log.DebugFormat(
// "[PRIM COUNT MODULE]: Adding object {0} with {1} parts to prim count for parcel {2} on {3}",
// obj.Name, obj.Parts.Length, landData.Name, m_Scene.RegionInfo.RegionName);
// m_log.DebugFormat(
// "[PRIM COUNT MODULE]: Object {0} is owned by {1} over land owned by {2}",
// obj.Name, obj.OwnerID, landData.OwnerID);
@@ -468,7 +481,9 @@ namespace OpenSim.Region.CoreModules.World.Land
m_OwnerMap[landData.GlobalID] = landData.OwnerID;
m_SimwideCounts[landData.OwnerID] = 0;
// m_log.DebugFormat("[PRIM COUNT MODULE]: Adding parcel count for {0}", landData.GlobalID);
// m_log.DebugFormat(
// "[PRIM COUNT MODULE]: Initializing parcel count for {0} on {1}",
// landData.Name, m_Scene.RegionInfo.RegionName);
m_ParcelCounts[landData.GlobalID] = new ParcelCounts();
}

View File

@@ -49,7 +49,16 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
protected UUID m_otherUserId = new UUID("99999999-9999-9999-9999-999999999999");
protected TestScene m_scene;
protected PrimCountModule m_pcm;
/// <summary>
/// A parcel that covers the entire sim except for a 1 unit wide strip on the eastern side.
/// </summary>
protected ILandObject m_lo;
/// <summary>
/// A parcel that covers just the eastern strip of the sim.
/// </summary>
protected ILandObject m_lo2;
[SetUp]
public void SetUp()
@@ -59,10 +68,19 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
m_scene = SceneSetupHelpers.SetupScene();
SceneSetupHelpers.SetupSceneModules(m_scene, lmm, m_pcm);
int xParcelDivider = (int)Constants.RegionSize - 1;
ILandObject lo = new LandObject(m_userId, false, m_scene);
lo.SetLandBitmap(lo.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize));
m_lo = lmm.AddLandObject(lo);
//scene.loadAllLandObjectsFromStorage(scene.RegionInfo.originRegionID);
lo.LandData.Name = "m_lo";
lo.SetLandBitmap(
lo.GetSquareLandBitmap(0, 0, xParcelDivider, (int)Constants.RegionSize));
m_lo = lmm.AddLandObject(lo);
ILandObject lo2 = new LandObject(m_userId, false, m_scene);
lo2.SetLandBitmap(
lo2.GetSquareLandBitmap(xParcelDivider, 0, (int)Constants.RegionSize, (int)Constants.RegionSize));
lo2.LandData.Name = "m_lo2";
m_lo2 = lmm.AddLandObject(lo2);
}
/// <summary>
@@ -94,7 +112,7 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
IPrimCounts pc = m_lo.PrimCounts;
SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, 0x01);
SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, "a", 0x01);
m_scene.AddNewSceneObject(sog, false);
Assert.That(pc.Owner, Is.EqualTo(3));
@@ -107,7 +125,7 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
Assert.That(pc.Simulator, Is.EqualTo(3));
// Add a second object and retest
SceneObjectGroup sog2 = SceneSetupHelpers.CreateSceneObject(2, m_userId, 0x10);
SceneObjectGroup sog2 = SceneSetupHelpers.CreateSceneObject(2, m_userId, "b", 0x10);
m_scene.AddNewSceneObject(sog2, false);
Assert.That(pc.Owner, Is.EqualTo(5));
@@ -124,14 +142,14 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
/// Test count after a parcel owner owned copied object is added.
/// </summary>
[Test]
public void TestCopiedOwnerObject()
public void TestCopyOwnerObject()
{
TestHelper.InMethod();
// log4net.Config.XmlConfigurator.Configure();
IPrimCounts pc = m_lo.PrimCounts;
SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, 0x01);
SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, "a", 0x01);
m_scene.AddNewSceneObject(sog, false);
m_scene.SceneGraph.DuplicateObject(sog.LocalId, Vector3.Zero, 0, m_userId, UUID.Zero, Quaternion.Identity);
@@ -143,7 +161,69 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
Assert.That(pc.Users[m_userId], Is.EqualTo(6));
Assert.That(pc.Users[m_otherUserId], Is.EqualTo(0));
Assert.That(pc.Simulator, Is.EqualTo(6));
}
}
/// <summary>
/// Test that parcel counts update correctly when an object is moved between parcels, where that movement
/// is not done directly by the user/
/// </summary>
[Test]
public void TestMoveOwnerObject()
{
TestHelper.InMethod();
// log4net.Config.XmlConfigurator.Configure();
SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, "a", 0x01);
m_scene.AddNewSceneObject(sog, false);
SceneObjectGroup sog2 = SceneSetupHelpers.CreateSceneObject(2, m_userId, "b", 0x10);
m_scene.AddNewSceneObject(sog2, false);
// Move the first scene object to the eastern strip parcel
sog.AbsolutePosition = new Vector3(254, 2, 2);
IPrimCounts pclo1 = m_lo.PrimCounts;
Assert.That(pclo1.Owner, Is.EqualTo(2));
Assert.That(pclo1.Group, Is.EqualTo(0));
Assert.That(pclo1.Others, Is.EqualTo(0));
Assert.That(pclo1.Total, Is.EqualTo(2));
Assert.That(pclo1.Selected, Is.EqualTo(0));
Assert.That(pclo1.Users[m_userId], Is.EqualTo(2));
Assert.That(pclo1.Users[m_otherUserId], Is.EqualTo(0));
Assert.That(pclo1.Simulator, Is.EqualTo(5));
IPrimCounts pclo2 = m_lo2.PrimCounts;
Assert.That(pclo2.Owner, Is.EqualTo(3));
Assert.That(pclo2.Group, Is.EqualTo(0));
Assert.That(pclo2.Others, Is.EqualTo(0));
Assert.That(pclo2.Total, Is.EqualTo(3));
Assert.That(pclo2.Selected, Is.EqualTo(0));
Assert.That(pclo2.Users[m_userId], Is.EqualTo(3));
Assert.That(pclo2.Users[m_otherUserId], Is.EqualTo(0));
Assert.That(pclo2.Simulator, Is.EqualTo(5));
// Now move it back again
sog.AbsolutePosition = new Vector3(2, 2, 2);
Assert.That(pclo1.Owner, Is.EqualTo(5));
Assert.That(pclo1.Group, Is.EqualTo(0));
Assert.That(pclo1.Others, Is.EqualTo(0));
Assert.That(pclo1.Total, Is.EqualTo(5));
Assert.That(pclo1.Selected, Is.EqualTo(0));
Assert.That(pclo1.Users[m_userId], Is.EqualTo(5));
Assert.That(pclo1.Users[m_otherUserId], Is.EqualTo(0));
Assert.That(pclo1.Simulator, Is.EqualTo(5));
Assert.That(pclo2.Owner, Is.EqualTo(0));
Assert.That(pclo2.Group, Is.EqualTo(0));
Assert.That(pclo2.Others, Is.EqualTo(0));
Assert.That(pclo2.Total, Is.EqualTo(0));
Assert.That(pclo2.Selected, Is.EqualTo(0));
Assert.That(pclo2.Users[m_userId], Is.EqualTo(0));
Assert.That(pclo2.Users[m_otherUserId], Is.EqualTo(0));
Assert.That(pclo2.Simulator, Is.EqualTo(5));
}
/// <summary>
/// Test count after a parcel owner owned object is removed.
@@ -156,8 +236,8 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
IPrimCounts pc = m_lo.PrimCounts;
m_scene.AddNewSceneObject(SceneSetupHelpers.CreateSceneObject(1, m_userId, 0x1), false);
SceneObjectGroup sogToDelete = SceneSetupHelpers.CreateSceneObject(3, m_userId, 0x10);
m_scene.AddNewSceneObject(SceneSetupHelpers.CreateSceneObject(1, m_userId, "a", 0x1), false);
SceneObjectGroup sogToDelete = SceneSetupHelpers.CreateSceneObject(3, m_userId, "b", 0x10);
m_scene.AddNewSceneObject(sogToDelete, false);
m_scene.DeleteSceneObject(sogToDelete, false);
@@ -181,7 +261,7 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
IPrimCounts pc = m_lo.PrimCounts;
SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_otherUserId, 0x01);
SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_otherUserId, "a", 0x01);
sog.GroupID = m_groupId;
m_scene.AddNewSceneObject(sog, false);
@@ -212,11 +292,11 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
IPrimCounts pc = m_lo.PrimCounts;
SceneObjectGroup sogToKeep = SceneSetupHelpers.CreateSceneObject(1, m_userId, 0x1);
SceneObjectGroup sogToKeep = SceneSetupHelpers.CreateSceneObject(1, m_userId, "a", 0x1);
sogToKeep.GroupID = m_groupId;
m_scene.AddNewSceneObject(sogToKeep, false);
SceneObjectGroup sogToDelete = SceneSetupHelpers.CreateSceneObject(3, m_userId, 0x10);
SceneObjectGroup sogToDelete = SceneSetupHelpers.CreateSceneObject(3, m_userId, "b", 0x10);
m_scene.AddNewSceneObject(sogToDelete, false);
m_scene.DeleteSceneObject(sogToDelete, false);
@@ -239,7 +319,7 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
IPrimCounts pc = m_lo.PrimCounts;
SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_otherUserId, 0x01);
SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_otherUserId, "a", 0x01);
m_scene.AddNewSceneObject(sog, false);
Assert.That(pc.Owner, Is.EqualTo(0));
@@ -260,8 +340,8 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
IPrimCounts pc = m_lo.PrimCounts;
m_scene.AddNewSceneObject(SceneSetupHelpers.CreateSceneObject(1, m_otherUserId, 0x1), false);
SceneObjectGroup sogToDelete = SceneSetupHelpers.CreateSceneObject(3, m_otherUserId, 0x10);
m_scene.AddNewSceneObject(SceneSetupHelpers.CreateSceneObject(1, m_otherUserId, "a", 0x1), false);
SceneObjectGroup sogToDelete = SceneSetupHelpers.CreateSceneObject(3, m_otherUserId, "b", 0x10);
m_scene.AddNewSceneObject(sogToDelete, false);
m_scene.DeleteSceneObject(sogToDelete, false);
@@ -284,7 +364,7 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
TestHelper.InMethod();
IPrimCounts pc = m_lo.PrimCounts;
SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, 0x01);
SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, "a", 0x01);
m_scene.AddNewSceneObject(sog, false);
m_pcm.TaintPrimCount();