aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2011-04-06 18:57:50 +0100
committerJustin Clark-Casey (justincc)2011-04-06 18:57:50 +0100
commit63533412f882fd55c0c40989d97f8a8262bc4e3c (patch)
tree4091a21cf52762e5227f1771d2017f762c451dab
parentAdd method doc to some land bitmap methods in ILandObject. (diff)
downloadopensim-SC_OLD-63533412f882fd55c0c40989d97f8a8262bc4e3c.zip
opensim-SC_OLD-63533412f882fd55c0c40989d97f8a8262bc4e3c.tar.gz
opensim-SC_OLD-63533412f882fd55c0c40989d97f8a8262bc4e3c.tar.bz2
opensim-SC_OLD-63533412f882fd55c0c40989d97f8a8262bc4e3c.tar.xz
Improve previous ILandObject method doc.
For test code, take a part name prefix when creating objects, so that these can be more easily identified in the logs
-rw-r--r--OpenSim/Framework/ILandObject.cs8
-rw-r--r--OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs12
-rw-r--r--OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs22
-rw-r--r--OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs102
-rw-r--r--OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs16
5 files changed, 104 insertions, 56 deletions
diff --git a/OpenSim/Framework/ILandObject.cs b/OpenSim/Framework/ILandObject.cs
index 02775e9..5a55b02 100644
--- a/OpenSim/Framework/ILandObject.cs
+++ b/OpenSim/Framework/ILandObject.cs
@@ -92,8 +92,12 @@ namespace OpenSim.Framework
92 /// Create a square land bitmap. 92 /// Create a square land bitmap.
93 /// </summary> 93 /// </summary>
94 /// <remarks> 94 /// <remarks>
95 /// Land co-ordinates are zero indexed. At the moment, the smallest parcel of land is 4m x 4m, so if the 95 /// Land co-ordinates are zero indexed. The inputs are treated as points. So if you want to create a bitmap
96 /// region is 256 x 256m (the SL size), the largest land parcel starts at (0,0) and ends at (63,63). 96 /// that covers an entire 256 x 256m region apart from a strip of land on the east, then you would need to
97 /// specify start_x = 0, start_y = 0, end_x = 252 (or anything up to 255), end_y = 256.
98 ///
99 /// At the moment, the smallest parcel of land is 4m x 4m, so if the
100 /// region is 256 x 256m (the SL size), the bitmap returned will start at (0,0) and end at (63,63).
97 /// </remarks> 101 /// </remarks>
98 /// <param name="start_x"></param> 102 /// <param name="start_x"></param>
99 /// <param name="start_y"></param> 103 /// <param name="start_y"></param>
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
index abc7a3a..bfab7b8 100644
--- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
@@ -612,6 +612,10 @@ namespace OpenSim.Region.CoreModules.World.Land
612 { 612 {
613 if (landBitmap[x, y]) 613 if (landBitmap[x, y])
614 { 614 {
615// m_log.DebugFormat(
616// "[LAND MANAGEMENT MODULE]: Registering parcel {0} for land co-ord ({1}, {2}) on {3}",
617// new_land.LandData.Name, x, y, m_scene.RegionInfo.RegionName);
618
615 m_landIDList[x, y] = newLandLocalID; 619 m_landIDList[x, y] = newLandLocalID;
616 } 620 }
617 } 621 }
@@ -741,8 +745,16 @@ namespace OpenSim.Region.CoreModules.World.Land
741 // Corner case. If an autoreturn happens during sim startup 745 // Corner case. If an autoreturn happens during sim startup
742 // we will come here with the list uninitialized 746 // we will come here with the list uninitialized
743 // 747 //
748 int landId = m_landIDList[x, y];
749
750// if (landId == 0)
751// m_log.DebugFormat(
752// "[LAND MANAGEMENT MODULE]: No land object found at ({0}, {1}) on {2}",
753// x, y, m_scene.RegionInfo.RegionName);
754
744 if (m_landList.ContainsKey(m_landIDList[x, y])) 755 if (m_landList.ContainsKey(m_landIDList[x, y]))
745 return m_landList[m_landIDList[x, y]]; 756 return m_landList[m_landIDList[x, y]];
757
746 return null; 758 return null;
747 } 759 }
748 } 760 }
diff --git a/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs b/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs
index 7a04eb1..dca842a 100644
--- a/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs
+++ b/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs
@@ -173,24 +173,32 @@ namespace OpenSim.Region.CoreModules.World.Land
173 173
174 // NOTE: Call under Taint Lock 174 // NOTE: Call under Taint Lock
175 private void AddObject(SceneObjectGroup obj) 175 private void AddObject(SceneObjectGroup obj)
176 { 176 {
177// m_log.DebugFormat("[PRIM COUNT MODULE]: Adding object {0} {1} to prim count", obj.Name, obj.UUID);
178
179 if (obj.IsAttachment) 177 if (obj.IsAttachment)
180 return; 178 return;
181 if (((obj.RootPart.Flags & PrimFlags.TemporaryOnRez) != 0)) 179 if (((obj.RootPart.Flags & PrimFlags.TemporaryOnRez) != 0))
182 return; 180 return;
183 181
184 Vector3 pos = obj.AbsolutePosition; 182 Vector3 pos = obj.AbsolutePosition;
185 ILandObject landObject = m_Scene.LandChannel.GetLandObject(pos.X, pos.Y); 183 ILandObject landObject = m_Scene.LandChannel.GetLandObject(pos.X, pos.Y);
186 184
187 // If for some reason there is no land object (perhaps the object is out of bounds) then we can't count it 185 // If for some reason there is no land object (perhaps the object is out of bounds) then we can't count it
188 if (landObject == null) 186 if (landObject == null)
187 {
188// m_log.WarnFormat(
189// "[PRIM COUNT MODULE]: Found no land object for {0} at position ({1}, {2}) on {3}",
190// obj.Name, pos.X, pos.Y, m_Scene.RegionInfo.RegionName);
191
189 return; 192 return;
193 }
190 194
191 LandData landData = landObject.LandData; 195 LandData landData = landObject.LandData;
192 196
193// m_log.DebugFormat( 197// m_log.DebugFormat(
198// "[PRIM COUNT MODULE]: Adding object {0} with {1} parts to prim count for parcel {2} on {3}",
199// obj.Name, obj.Parts.Length, landData.Name, m_Scene.RegionInfo.RegionName);
200
201// m_log.DebugFormat(
194// "[PRIM COUNT MODULE]: Object {0} is owned by {1} over land owned by {2}", 202// "[PRIM COUNT MODULE]: Object {0} is owned by {1} over land owned by {2}",
195// obj.Name, obj.OwnerID, landData.OwnerID); 203// obj.Name, obj.OwnerID, landData.OwnerID);
196 204
@@ -473,7 +481,9 @@ namespace OpenSim.Region.CoreModules.World.Land
473 481
474 m_OwnerMap[landData.GlobalID] = landData.OwnerID; 482 m_OwnerMap[landData.GlobalID] = landData.OwnerID;
475 m_SimwideCounts[landData.OwnerID] = 0; 483 m_SimwideCounts[landData.OwnerID] = 0;
476// m_log.DebugFormat("[PRIM COUNT MODULE]: Adding parcel count for {0}", landData.GlobalID); 484// m_log.DebugFormat(
485// "[PRIM COUNT MODULE]: Initializing parcel count for {0} on {1}",
486// landData.Name, m_Scene.RegionInfo.RegionName);
477 m_ParcelCounts[landData.GlobalID] = new ParcelCounts(); 487 m_ParcelCounts[landData.GlobalID] = new ParcelCounts();
478 } 488 }
479 489
@@ -583,4 +593,4 @@ namespace OpenSim.Region.CoreModules.World.Land
583 } 593 }
584 } 594 }
585 } 595 }
586} 596} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs
index 4acba18..d161bb8 100644
--- a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs
+++ b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs
@@ -51,9 +51,14 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
51 protected PrimCountModule m_pcm; 51 protected PrimCountModule m_pcm;
52 52
53 /// <summary> 53 /// <summary>
54 /// A parcel that covers the entire sim. 54 /// A parcel that covers the entire sim except for a 1 unit wide strip on the eastern side.
55 /// </summary> 55 /// </summary>
56 protected ILandObject m_lo; 56 protected ILandObject m_lo;
57
58 /// <summary>
59 /// A parcel that covers just the eastern strip of the sim.
60 /// </summary>
61 protected ILandObject m_lo2;
57 62
58 [SetUp] 63 [SetUp]
59 public void SetUp() 64 public void SetUp()
@@ -63,10 +68,19 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
63 m_scene = SceneSetupHelpers.SetupScene(); 68 m_scene = SceneSetupHelpers.SetupScene();
64 SceneSetupHelpers.SetupSceneModules(m_scene, lmm, m_pcm); 69 SceneSetupHelpers.SetupSceneModules(m_scene, lmm, m_pcm);
65 70
71 int xParcelDivider = (int)Constants.RegionSize - 1;
72
66 ILandObject lo = new LandObject(m_userId, false, m_scene); 73 ILandObject lo = new LandObject(m_userId, false, m_scene);
74 lo.LandData.Name = "m_lo";
67 lo.SetLandBitmap( 75 lo.SetLandBitmap(
68 lo.GetSquareLandBitmap(0, 0, (int)Constants.RegionSize / 4 - 1, (int)Constants.RegionSize / 4 - 1)); 76 lo.GetSquareLandBitmap(0, 0, xParcelDivider, (int)Constants.RegionSize));
69 m_lo = lmm.AddLandObject(lo); 77 m_lo = lmm.AddLandObject(lo);
78
79 ILandObject lo2 = new LandObject(m_userId, false, m_scene);
80 lo2.SetLandBitmap(
81 lo2.GetSquareLandBitmap(xParcelDivider, 0, (int)Constants.RegionSize, (int)Constants.RegionSize));
82 lo2.LandData.Name = "m_lo2";
83 m_lo2 = lmm.AddLandObject(lo2);
70 } 84 }
71 85
72 /// <summary> 86 /// <summary>
@@ -98,7 +112,7 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
98 112
99 IPrimCounts pc = m_lo.PrimCounts; 113 IPrimCounts pc = m_lo.PrimCounts;
100 114
101 SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, 0x01); 115 SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, "a", 0x01);
102 m_scene.AddNewSceneObject(sog, false); 116 m_scene.AddNewSceneObject(sog, false);
103 117
104 Assert.That(pc.Owner, Is.EqualTo(3)); 118 Assert.That(pc.Owner, Is.EqualTo(3));
@@ -111,7 +125,7 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
111 Assert.That(pc.Simulator, Is.EqualTo(3)); 125 Assert.That(pc.Simulator, Is.EqualTo(3));
112 126
113 // Add a second object and retest 127 // Add a second object and retest
114 SceneObjectGroup sog2 = SceneSetupHelpers.CreateSceneObject(2, m_userId, 0x10); 128 SceneObjectGroup sog2 = SceneSetupHelpers.CreateSceneObject(2, m_userId, "b", 0x10);
115 m_scene.AddNewSceneObject(sog2, false); 129 m_scene.AddNewSceneObject(sog2, false);
116 130
117 Assert.That(pc.Owner, Is.EqualTo(5)); 131 Assert.That(pc.Owner, Is.EqualTo(5));
@@ -135,7 +149,7 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
135 149
136 IPrimCounts pc = m_lo.PrimCounts; 150 IPrimCounts pc = m_lo.PrimCounts;
137 151
138 SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, 0x01); 152 SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, "a", 0x01);
139 m_scene.AddNewSceneObject(sog, false); 153 m_scene.AddNewSceneObject(sog, false);
140 m_scene.SceneGraph.DuplicateObject(sog.LocalId, Vector3.Zero, 0, m_userId, UUID.Zero, Quaternion.Identity); 154 m_scene.SceneGraph.DuplicateObject(sog.LocalId, Vector3.Zero, 0, m_userId, UUID.Zero, Quaternion.Identity);
141 155
@@ -156,35 +170,37 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
156 //[Test] 170 //[Test]
157 public void TestMoveOwnerObject() 171 public void TestMoveOwnerObject()
158 { 172 {
159// TestHelper.InMethod(); 173 TestHelper.InMethod();
160//// log4net.Config.XmlConfigurator.Configure(); 174 log4net.Config.XmlConfigurator.Configure();
161// 175
162// IPrimCounts pc = m_lo.PrimCounts; 176 SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, "a", 0x01);
163// 177 m_scene.AddNewSceneObject(sog, false);
164// SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, 0x01); 178 SceneObjectGroup sog2 = SceneSetupHelpers.CreateSceneObject(2, m_userId, "b", 0x10);
165// m_scene.AddNewSceneObject(sog, false); 179 m_scene.AddNewSceneObject(sog2, false);
166// 180
167// Assert.That(pc.Owner, Is.EqualTo(3)); 181 sog.AbsolutePosition = new Vector3(254, 2, 2);
168// Assert.That(pc.Group, Is.EqualTo(0)); 182
169// Assert.That(pc.Others, Is.EqualTo(0)); 183 IPrimCounts pclo1 = m_lo.PrimCounts;
170// Assert.That(pc.Total, Is.EqualTo(3)); 184
171// Assert.That(pc.Selected, Is.EqualTo(0)); 185 Assert.That(pclo1.Owner, Is.EqualTo(2));
172// Assert.That(pc.Users[m_userId], Is.EqualTo(3)); 186 Assert.That(pclo1.Group, Is.EqualTo(0));
173// Assert.That(pc.Users[m_otherUserId], Is.EqualTo(0)); 187 Assert.That(pclo1.Others, Is.EqualTo(0));
174// Assert.That(pc.Simulator, Is.EqualTo(3)); 188 Assert.That(pclo1.Total, Is.EqualTo(2));
175// 189 Assert.That(pclo1.Selected, Is.EqualTo(0));
176// // Add a second object and retest 190 Assert.That(pclo1.Users[m_userId], Is.EqualTo(2));
177// SceneObjectGroup sog2 = SceneSetupHelpers.CreateSceneObject(2, m_userId, 0x10); 191 Assert.That(pclo1.Users[m_otherUserId], Is.EqualTo(0));
178// m_scene.AddNewSceneObject(sog2, false); 192 Assert.That(pclo1.Simulator, Is.EqualTo(2));
179// 193
180// Assert.That(pc.Owner, Is.EqualTo(5)); 194 IPrimCounts pclo2 = m_lo2.PrimCounts;
181// Assert.That(pc.Group, Is.EqualTo(0)); 195
182// Assert.That(pc.Others, Is.EqualTo(0)); 196 Assert.That(pclo2.Owner, Is.EqualTo(3));
183// Assert.That(pc.Total, Is.EqualTo(5)); 197 Assert.That(pclo2.Group, Is.EqualTo(0));
184// Assert.That(pc.Selected, Is.EqualTo(0)); 198 Assert.That(pclo2.Others, Is.EqualTo(0));
185// Assert.That(pc.Users[m_userId], Is.EqualTo(5)); 199 Assert.That(pclo2.Total, Is.EqualTo(3));
186// Assert.That(pc.Users[m_otherUserId], Is.EqualTo(0)); 200 Assert.That(pclo2.Selected, Is.EqualTo(0));
187// Assert.That(pc.Simulator, Is.EqualTo(5)); 201 Assert.That(pclo2.Users[m_userId], Is.EqualTo(3));
202 Assert.That(pclo2.Users[m_otherUserId], Is.EqualTo(0));
203 Assert.That(pclo2.Simulator, Is.EqualTo(3));
188 } 204 }
189 205
190 /// <summary> 206 /// <summary>
@@ -198,8 +214,8 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
198 214
199 IPrimCounts pc = m_lo.PrimCounts; 215 IPrimCounts pc = m_lo.PrimCounts;
200 216
201 m_scene.AddNewSceneObject(SceneSetupHelpers.CreateSceneObject(1, m_userId, 0x1), false); 217 m_scene.AddNewSceneObject(SceneSetupHelpers.CreateSceneObject(1, m_userId, "a", 0x1), false);
202 SceneObjectGroup sogToDelete = SceneSetupHelpers.CreateSceneObject(3, m_userId, 0x10); 218 SceneObjectGroup sogToDelete = SceneSetupHelpers.CreateSceneObject(3, m_userId, "b", 0x10);
203 m_scene.AddNewSceneObject(sogToDelete, false); 219 m_scene.AddNewSceneObject(sogToDelete, false);
204 m_scene.DeleteSceneObject(sogToDelete, false); 220 m_scene.DeleteSceneObject(sogToDelete, false);
205 221
@@ -223,7 +239,7 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
223 239
224 IPrimCounts pc = m_lo.PrimCounts; 240 IPrimCounts pc = m_lo.PrimCounts;
225 241
226 SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_otherUserId, 0x01); 242 SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_otherUserId, "a", 0x01);
227 sog.GroupID = m_groupId; 243 sog.GroupID = m_groupId;
228 m_scene.AddNewSceneObject(sog, false); 244 m_scene.AddNewSceneObject(sog, false);
229 245
@@ -254,11 +270,11 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
254 270
255 IPrimCounts pc = m_lo.PrimCounts; 271 IPrimCounts pc = m_lo.PrimCounts;
256 272
257 SceneObjectGroup sogToKeep = SceneSetupHelpers.CreateSceneObject(1, m_userId, 0x1); 273 SceneObjectGroup sogToKeep = SceneSetupHelpers.CreateSceneObject(1, m_userId, "a", 0x1);
258 sogToKeep.GroupID = m_groupId; 274 sogToKeep.GroupID = m_groupId;
259 m_scene.AddNewSceneObject(sogToKeep, false); 275 m_scene.AddNewSceneObject(sogToKeep, false);
260 276
261 SceneObjectGroup sogToDelete = SceneSetupHelpers.CreateSceneObject(3, m_userId, 0x10); 277 SceneObjectGroup sogToDelete = SceneSetupHelpers.CreateSceneObject(3, m_userId, "b", 0x10);
262 m_scene.AddNewSceneObject(sogToDelete, false); 278 m_scene.AddNewSceneObject(sogToDelete, false);
263 m_scene.DeleteSceneObject(sogToDelete, false); 279 m_scene.DeleteSceneObject(sogToDelete, false);
264 280
@@ -281,7 +297,7 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
281 297
282 IPrimCounts pc = m_lo.PrimCounts; 298 IPrimCounts pc = m_lo.PrimCounts;
283 299
284 SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_otherUserId, 0x01); 300 SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_otherUserId, "a", 0x01);
285 m_scene.AddNewSceneObject(sog, false); 301 m_scene.AddNewSceneObject(sog, false);
286 302
287 Assert.That(pc.Owner, Is.EqualTo(0)); 303 Assert.That(pc.Owner, Is.EqualTo(0));
@@ -302,8 +318,8 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
302 318
303 IPrimCounts pc = m_lo.PrimCounts; 319 IPrimCounts pc = m_lo.PrimCounts;
304 320
305 m_scene.AddNewSceneObject(SceneSetupHelpers.CreateSceneObject(1, m_otherUserId, 0x1), false); 321 m_scene.AddNewSceneObject(SceneSetupHelpers.CreateSceneObject(1, m_otherUserId, "a", 0x1), false);
306 SceneObjectGroup sogToDelete = SceneSetupHelpers.CreateSceneObject(3, m_otherUserId, 0x10); 322 SceneObjectGroup sogToDelete = SceneSetupHelpers.CreateSceneObject(3, m_otherUserId, "b", 0x10);
307 m_scene.AddNewSceneObject(sogToDelete, false); 323 m_scene.AddNewSceneObject(sogToDelete, false);
308 m_scene.DeleteSceneObject(sogToDelete, false); 324 m_scene.DeleteSceneObject(sogToDelete, false);
309 325
@@ -326,7 +342,7 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests
326 TestHelper.InMethod(); 342 TestHelper.InMethod();
327 IPrimCounts pc = m_lo.PrimCounts; 343 IPrimCounts pc = m_lo.PrimCounts;
328 344
329 SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, 0x01); 345 SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, "a", 0x01);
330 m_scene.AddNewSceneObject(sog, false); 346 m_scene.AddNewSceneObject(sog, false);
331 347
332 m_pcm.TaintPrimCount(); 348 m_pcm.TaintPrimCount();
diff --git a/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs b/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs
index 57850c1..709dd78 100644
--- a/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs
+++ b/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs
@@ -489,32 +489,38 @@ namespace OpenSim.Tests.Common.Setup
489 /// <returns></returns> 489 /// <returns></returns>
490 public static SceneObjectGroup CreateSceneObject(int parts, UUID ownerId) 490 public static SceneObjectGroup CreateSceneObject(int parts, UUID ownerId)
491 { 491 {
492 return CreateSceneObject(parts, ownerId, 0x1); 492 return CreateSceneObject(parts, ownerId, "", 0x1);
493 } 493 }
494 494
495 /// <summary> 495 /// <summary>
496 /// Create a scene object but do not add it to the scene. 496 /// Create a scene object but do not add it to the scene.
497 /// </summary> 497 /// </summary>
498 /// <param name="parts">The number of parts that should be in the scene object</param> 498 /// <param name="parts">
499 /// The number of parts that should be in the scene object
500 /// </param>
499 /// <param name="ownerId"></param> 501 /// <param name="ownerId"></param>
502 /// <param name="partNamePrefix">
503 /// The prefix to be given to part names. This will be suffixed with "Part<part no>"
504 /// (e.g. mynamePart0 for the root part)
505 /// </param>
500 /// <param name="uuidTail"> 506 /// <param name="uuidTail">
501 /// The hexadecimal last part of the UUID for parts created. A UUID of the form "00000000-0000-0000-0000-{0:XD12}" 507 /// The hexadecimal last part of the UUID for parts created. A UUID of the form "00000000-0000-0000-0000-{0:XD12}"
502 /// will be given to the root part, and incremented for each part thereafter. 508 /// will be given to the root part, and incremented for each part thereafter.
503 /// </param> 509 /// </param>
504 /// <returns></returns> 510 /// <returns></returns>
505 public static SceneObjectGroup CreateSceneObject(int parts, UUID ownerId, int uuidTail) 511 public static SceneObjectGroup CreateSceneObject(int parts, UUID ownerId, string partNamePrefix, int uuidTail)
506 { 512 {
507 string rawSogId = string.Format("00000000-0000-0000-0000-{0:X12}", uuidTail); 513 string rawSogId = string.Format("00000000-0000-0000-0000-{0:X12}", uuidTail);
508 514
509 SceneObjectGroup sog 515 SceneObjectGroup sog
510 = new SceneObjectGroup( 516 = new SceneObjectGroup(
511 CreateSceneObjectPart("part0", new UUID(rawSogId), ownerId)); 517 CreateSceneObjectPart(string.Format("{0}Part0", partNamePrefix), new UUID(rawSogId), ownerId));
512 518
513 if (parts > 1) 519 if (parts > 1)
514 for (int i = 1; i < parts; i++) 520 for (int i = 1; i < parts; i++)
515 sog.AddPart( 521 sog.AddPart(
516 CreateSceneObjectPart( 522 CreateSceneObjectPart(
517 string.Format("obj{0}", i), 523 string.Format("{0}Part{1}", partNamePrefix, i),
518 new UUID(string.Format("00000000-0000-0000-0000-{0:X12}", uuidTail + i)), 524 new UUID(string.Format("00000000-0000-0000-0000-{0:X12}", uuidTail + i)),
519 ownerId)); 525 ownerId));
520 526