aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs41
-rw-r--r--OpenSim/Region/CoreModules/Framework/DynamicAttributes/DAExampleModule.cs17
-rw-r--r--OpenSim/Region/CoreModules/Framework/DynamicAttributes/DOExampleModule.cs8
-rw-r--r--OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs2
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs3
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs3
-rw-r--r--OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs44
-rw-r--r--OpenSim/Region/Framework/Scenes/EventManager.cs31
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs23
-rw-r--r--OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/UuidGatherer.cs32
-rw-r--r--OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs177
12 files changed, 273 insertions, 110 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs
index b3e3aa2..ae45b99 100644
--- a/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Friends/HGFriendsModule.cs
@@ -183,6 +183,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
183 if (Util.ParseUniversalUserIdentifier(finfo.Friend, out id, out url, out first, out last, out tmp)) 183 if (Util.ParseUniversalUserIdentifier(finfo.Friend, out id, out url, out first, out last, out tmp))
184 { 184 {
185 IUserManagement uMan = m_Scenes[0].RequestModuleInterface<IUserManagement>(); 185 IUserManagement uMan = m_Scenes[0].RequestModuleInterface<IUserManagement>();
186 m_log.DebugFormat("[HGFRIENDS MODULE]: caching {0}", finfo.Friend);
186 uMan.AddUser(id, url + ";" + first + " " + last); 187 uMan.AddUser(id, url + ";" + first + " " + last);
187 } 188 }
188 } 189 }
@@ -347,31 +348,31 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
347 return null; 348 return null;
348 } 349 }
349 350
350 public override FriendInfo[] GetFriendsFromService(IClientAPI client) 351// public override FriendInfo[] GetFriendsFromService(IClientAPI client)
351 { 352// {
352// m_log.DebugFormat("[HGFRIENDS MODULE]: Entering GetFriendsFromService for {0}", client.Name); 353//// m_log.DebugFormat("[HGFRIENDS MODULE]: Entering GetFriendsFromService for {0}", client.Name);
353 Boolean agentIsLocal = true; 354// Boolean agentIsLocal = true;
354 if (UserManagementModule != null) 355// if (UserManagementModule != null)
355 agentIsLocal = UserManagementModule.IsLocalGridUser(client.AgentId); 356// agentIsLocal = UserManagementModule.IsLocalGridUser(client.AgentId);
356 357
357 if (agentIsLocal) 358// if (agentIsLocal)
358 return base.GetFriendsFromService(client); 359// return base.GetFriendsFromService(client);
359 360
360 FriendInfo[] finfos = new FriendInfo[0]; 361// FriendInfo[] finfos = new FriendInfo[0];
361 // Foreigner 362// // Foreigner
362 AgentCircuitData agentClientCircuit = ((Scene)(client.Scene)).AuthenticateHandler.GetAgentCircuitData(client.CircuitCode); 363// AgentCircuitData agentClientCircuit = ((Scene)(client.Scene)).AuthenticateHandler.GetAgentCircuitData(client.CircuitCode);
363 if (agentClientCircuit != null) 364// if (agentClientCircuit != null)
364 { 365// {
365 //[XXX] string agentUUI = Util.ProduceUserUniversalIdentifier(agentClientCircuit); 366// //[XXX] string agentUUI = Util.ProduceUserUniversalIdentifier(agentClientCircuit);
366 367
367 finfos = FriendsService.GetFriends(client.AgentId.ToString()); 368// finfos = FriendsService.GetFriends(client.AgentId.ToString());
368 m_log.DebugFormat("[HGFRIENDS MODULE]: Fetched {0} local friends for visitor {1}", finfos.Length, client.AgentId.ToString()); 369// m_log.DebugFormat("[HGFRIENDS MODULE]: Fetched {0} local friends for visitor {1}", finfos.Length, client.AgentId.ToString());
369 } 370// }
370 371
371// m_log.DebugFormat("[HGFRIENDS MODULE]: Exiting GetFriendsFromService for {0}", client.Name); 372//// m_log.DebugFormat("[HGFRIENDS MODULE]: Exiting GetFriendsFromService for {0}", client.Name);
372 373
373 return finfos; 374// return finfos;
374 } 375// }
375 376
376 protected override bool StoreRights(UUID agentID, UUID friendID, int rights) 377 protected override bool StoreRights(UUID agentID, UUID friendID, int rights)
377 { 378 {
diff --git a/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DAExampleModule.cs b/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DAExampleModule.cs
index 1f1568f..0c632b1 100644
--- a/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DAExampleModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DAExampleModule.cs
@@ -44,11 +44,12 @@ namespace OpenSim.Region.CoreModules.Framework.DynamicAttributes.DAExampleModule
44 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "DAExampleModule")] 44 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "DAExampleModule")]
45 public class DAExampleModule : INonSharedRegionModule 45 public class DAExampleModule : INonSharedRegionModule
46 { 46 {
47// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 47 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
48 48
49 private static readonly bool ENABLED = false; // enable for testing 49 private readonly bool ENABLED = false; // enable for testing
50 50
51 public const string DANamespace = "DAExample Module"; 51 public const string Namespace = "Example";
52 public const string StoreName = "DA";
52 53
53 protected Scene m_scene; 54 protected Scene m_scene;
54 protected IDialogModule m_dialogMod; 55 protected IDialogModule m_dialogMod;
@@ -65,6 +66,8 @@ namespace OpenSim.Region.CoreModules.Framework.DynamicAttributes.DAExampleModule
65 m_scene = scene; 66 m_scene = scene;
66 m_scene.EventManager.OnSceneGroupMove += OnSceneGroupMove; 67 m_scene.EventManager.OnSceneGroupMove += OnSceneGroupMove;
67 m_dialogMod = m_scene.RequestModuleInterface<IDialogModule>(); 68 m_dialogMod = m_scene.RequestModuleInterface<IDialogModule>();
69
70 m_log.DebugFormat("[DA EXAMPLE MODULE]: Added region {0}", m_scene.Name);
68 } 71 }
69 } 72 }
70 73
@@ -91,7 +94,7 @@ namespace OpenSim.Region.CoreModules.Framework.DynamicAttributes.DAExampleModule
91 if (sop == null) 94 if (sop == null)
92 return true; 95 return true;
93 96
94 if (!sop.DynAttrs.TryGetValue(DANamespace, out attrs)) 97 if (!sop.DynAttrs.TryGetStore(Namespace, StoreName, out attrs))
95 attrs = new OSDMap(); 98 attrs = new OSDMap();
96 99
97 OSDInteger newValue; 100 OSDInteger newValue;
@@ -106,12 +109,14 @@ namespace OpenSim.Region.CoreModules.Framework.DynamicAttributes.DAExampleModule
106 109
107 attrs["moves"] = newValue; 110 attrs["moves"] = newValue;
108 111
109 sop.DynAttrs[DANamespace] = attrs; 112 sop.DynAttrs.SetStore(Namespace, StoreName, attrs);
110 } 113 }
111 114
112 sop.ParentGroup.HasGroupChanged = true; 115 sop.ParentGroup.HasGroupChanged = true;
113 116
114 m_dialogMod.SendGeneralAlert(string.Format("{0} {1} moved {2} times", sop.Name, sop.UUID, newValue)); 117 string msg = string.Format("{0} {1} moved {2} times", sop.Name, sop.UUID, newValue);
118 m_log.DebugFormat("[DA EXAMPLE MODULE]: {0}", msg);
119 m_dialogMod.SendGeneralAlert(msg);
115 120
116 return true; 121 return true;
117 } 122 }
diff --git a/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DOExampleModule.cs b/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DOExampleModule.cs
index 650aa35..166a994 100644
--- a/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DOExampleModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DOExampleModule.cs
@@ -64,8 +64,8 @@ namespace OpenSim.Region.Framework.DynamicAttributes.DOExampleModule
64 64
65 private Scene m_scene; 65 private Scene m_scene;
66 private IDialogModule m_dialogMod; 66 private IDialogModule m_dialogMod;
67 67
68 public string Name { get { return "DOExample Module"; } } 68 public string Name { get { return "DO"; } }
69 public Type ReplaceableInterface { get { return null; } } 69 public Type ReplaceableInterface { get { return null; } }
70 70
71 public void Initialise(IConfigSource source) {} 71 public void Initialise(IConfigSource source) {}
@@ -106,7 +106,7 @@ namespace OpenSim.Region.Framework.DynamicAttributes.DOExampleModule
106 106
107// Console.WriteLine("Here for {0}", so.Name); 107// Console.WriteLine("Here for {0}", so.Name);
108 108
109 if (rootPart.DynAttrs.TryGetValue(DAExampleModule.DANamespace, out attrs)) 109 if (rootPart.DynAttrs.TryGetStore(DAExampleModule.Namespace, DAExampleModule.StoreName, out attrs))
110 { 110 {
111 movesSoFar = attrs["moves"].AsInteger(); 111 movesSoFar = attrs["moves"].AsInteger();
112 112
@@ -114,7 +114,7 @@ namespace OpenSim.Region.Framework.DynamicAttributes.DOExampleModule
114 "[DO EXAMPLE MODULE]: Found saved moves {0} for {1} in {2}", movesSoFar, so.Name, m_scene.Name); 114 "[DO EXAMPLE MODULE]: Found saved moves {0} for {1} in {2}", movesSoFar, so.Name, m_scene.Name);
115 } 115 }
116 116
117 rootPart.DynObjs.Add(Name, new MyObject(movesSoFar)); 117 rootPart.DynObjs.Add(DAExampleModule.Namespace, Name, new MyObject(movesSoFar));
118 } 118 }
119 119
120 private bool OnSceneGroupMove(UUID groupId, Vector3 delta) 120 private bool OnSceneGroupMove(UUID groupId, Vector3 delta)
diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
index 864e181..194b591 100644
--- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
@@ -320,7 +320,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
320 else 320 else
321 { 321 {
322 names[0] = "Unknown"; 322 names[0] = "Unknown";
323 names[1] = "UserUMMTGUN2"; 323 names[1] = "UserUMMTGUN3";
324 324
325 return false; 325 return false;
326 } 326 }
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs
index ec5751d..99913a9 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs
@@ -196,7 +196,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
196 Util.FireAndForget(delegate 196 Util.FireAndForget(delegate
197 { 197 {
198 foreach (InventoryItemBase item in items) 198 foreach (InventoryItemBase item in items)
199 UserManager.AddUser(item.CreatorIdAsUuid, item.CreatorData); 199 if (!string.IsNullOrEmpty(item.CreatorData))
200 UserManager.AddUser(item.CreatorIdAsUuid, item.CreatorData);
200 }); 201 });
201 } 202 }
202 203
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs
index 2d3ba82..70ba944 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteXInventoryServiceConnector.cs
@@ -204,7 +204,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
204 Util.FireAndForget(delegate 204 Util.FireAndForget(delegate
205 { 205 {
206 foreach (InventoryItemBase item in items) 206 foreach (InventoryItemBase item in items)
207 UserManager.AddUser(item.CreatorIdAsUuid, item.CreatorData); 207 if (!string.IsNullOrEmpty(item.CreatorData))
208 UserManager.AddUser(item.CreatorIdAsUuid, item.CreatorData);
208 }); 209 });
209 } 210 }
210 211
diff --git a/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs b/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs
index b4348c9..66059fb 100644
--- a/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs
+++ b/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs
@@ -144,7 +144,20 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests
144 <Flags>None</Flags> 144 <Flags>None</Flags>
145 <CollisionSound><Guid>00000000-0000-0000-0000-000000000000</Guid></CollisionSound> 145 <CollisionSound><Guid>00000000-0000-0000-0000-000000000000</Guid></CollisionSound>
146 <CollisionSoundVolume>0</CollisionSoundVolume> 146 <CollisionSoundVolume>0</CollisionSoundVolume>
147 <DynAttrs><llsd><map><key>MyStore</key><map><key>the answer</key><integer>42</integer></map></map></llsd></DynAttrs> 147 <DynAttrs>
148 <llsd>
149 <map>
150 <key>MyNamespace</key>
151 <map>
152 <key>MyStore</key>
153 <map>
154 <key>the answer</key>
155 <integer>42</integer>
156 </map>
157 </map>
158 </map>
159 </llsd>
160 </DynAttrs>
148 </SceneObjectPart> 161 </SceneObjectPart>
149 </RootPart> 162 </RootPart>
150 <OtherParts /> 163 <OtherParts />
@@ -333,7 +346,20 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests
333 <EveryoneMask>0</EveryoneMask> 346 <EveryoneMask>0</EveryoneMask>
334 <NextOwnerMask>2147483647</NextOwnerMask> 347 <NextOwnerMask>2147483647</NextOwnerMask>
335 <Flags>None</Flags> 348 <Flags>None</Flags>
336 <DynAttrs><llsd><map><key>MyStore</key><map><key>last words</key><string>Rosebud</string></map></map></llsd></DynAttrs> 349 <DynAttrs>
350 <llsd>
351 <map>
352 <key>MyNamespace</key>
353 <map>
354 <key>MyStore</key>
355 <map>
356 <key>last words</key>
357 <string>Rosebud</string>
358 </map>
359 </map>
360 </map>
361 </llsd>
362 </DynAttrs>
337 <SitTargetAvatar><UUID>00000000-0000-0000-0000-000000000000</UUID></SitTargetAvatar> 363 <SitTargetAvatar><UUID>00000000-0000-0000-0000-000000000000</UUID></SitTargetAvatar>
338 </SceneObjectPart> 364 </SceneObjectPart>
339 <OtherParts /> 365 <OtherParts />
@@ -362,7 +388,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests
362 Assert.That(rootPart.UUID, Is.EqualTo(new UUID("e6a5a05e-e8cc-4816-8701-04165e335790"))); 388 Assert.That(rootPart.UUID, Is.EqualTo(new UUID("e6a5a05e-e8cc-4816-8701-04165e335790")));
363 Assert.That(rootPart.CreatorID, Is.EqualTo(new UUID("a6dacf01-4636-4bb9-8a97-30609438af9d"))); 389 Assert.That(rootPart.CreatorID, Is.EqualTo(new UUID("a6dacf01-4636-4bb9-8a97-30609438af9d")));
364 Assert.That(rootPart.Name, Is.EqualTo("PrimMyRide")); 390 Assert.That(rootPart.Name, Is.EqualTo("PrimMyRide"));
365 OSDMap store = rootPart.DynAttrs["MyStore"]; 391 OSDMap store = rootPart.DynAttrs.GetStore("MyNamespace", "MyStore");
366 Assert.AreEqual(42, store["the answer"].AsInteger()); 392 Assert.AreEqual(42, store["the answer"].AsInteger());
367 393
368 // TODO: Check other properties 394 // TODO: Check other properties
@@ -414,13 +440,14 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests
414 rp.CreatorID = rpCreatorId; 440 rp.CreatorID = rpCreatorId;
415 rp.Shape = shape; 441 rp.Shape = shape;
416 442
443 string daNamespace = "MyNamespace";
417 string daStoreName = "MyStore"; 444 string daStoreName = "MyStore";
418 string daKey = "foo"; 445 string daKey = "foo";
419 string daValue = "bar"; 446 string daValue = "bar";
420 OSDMap myStore = new OSDMap(); 447 OSDMap myStore = new OSDMap();
421 myStore.Add(daKey, daValue); 448 myStore.Add(daKey, daValue);
422 rp.DynAttrs = new DAMap(); 449 rp.DynAttrs = new DAMap();
423 rp.DynAttrs[daStoreName] = myStore; 450 rp.DynAttrs.SetStore(daNamespace, daStoreName, myStore);
424 451
425 SceneObjectGroup so = new SceneObjectGroup(rp); 452 SceneObjectGroup so = new SceneObjectGroup(rp);
426 453
@@ -481,7 +508,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests
481 Assert.That(name, Is.EqualTo(rpName)); 508 Assert.That(name, Is.EqualTo(rpName));
482 Assert.That(creatorId, Is.EqualTo(rpCreatorId)); 509 Assert.That(creatorId, Is.EqualTo(rpCreatorId));
483 Assert.NotNull(daMap); 510 Assert.NotNull(daMap);
484 Assert.AreEqual(daValue, daMap[daStoreName][daKey].AsString()); 511 Assert.AreEqual(daValue, daMap.GetStore(daNamespace, daStoreName)[daKey].AsString());
485 } 512 }
486 513
487 [Test] 514 [Test]
@@ -496,7 +523,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests
496 Assert.That(rootPart.UUID, Is.EqualTo(new UUID("9be68fdd-f740-4a0f-9675-dfbbb536b946"))); 523 Assert.That(rootPart.UUID, Is.EqualTo(new UUID("9be68fdd-f740-4a0f-9675-dfbbb536b946")));
497 Assert.That(rootPart.CreatorID, Is.EqualTo(new UUID("b46ef588-411e-4a8b-a284-d7dcfe8e74ef"))); 524 Assert.That(rootPart.CreatorID, Is.EqualTo(new UUID("b46ef588-411e-4a8b-a284-d7dcfe8e74ef")));
498 Assert.That(rootPart.Name, Is.EqualTo("PrimFun")); 525 Assert.That(rootPart.Name, Is.EqualTo("PrimFun"));
499 OSDMap store = rootPart.DynAttrs["MyStore"]; 526 OSDMap store = rootPart.DynAttrs.GetStore("MyNamespace", "MyStore");
500 Assert.AreEqual("Rosebud", store["last words"].AsString()); 527 Assert.AreEqual("Rosebud", store["last words"].AsString());
501 528
502 // TODO: Check other properties 529 // TODO: Check other properties
@@ -522,13 +549,14 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests
522 rp.CreatorID = rpCreatorId; 549 rp.CreatorID = rpCreatorId;
523 rp.Shape = shape; 550 rp.Shape = shape;
524 551
552 string daNamespace = "MyNamespace";
525 string daStoreName = "MyStore"; 553 string daStoreName = "MyStore";
526 string daKey = "foo"; 554 string daKey = "foo";
527 string daValue = "bar"; 555 string daValue = "bar";
528 OSDMap myStore = new OSDMap(); 556 OSDMap myStore = new OSDMap();
529 myStore.Add(daKey, daValue); 557 myStore.Add(daKey, daValue);
530 rp.DynAttrs = new DAMap(); 558 rp.DynAttrs = new DAMap();
531 rp.DynAttrs[daStoreName] = myStore; 559 rp.DynAttrs.SetStore(daNamespace, daStoreName, myStore);
532 560
533 SceneObjectGroup so = new SceneObjectGroup(rp); 561 SceneObjectGroup so = new SceneObjectGroup(rp);
534 562
@@ -585,7 +613,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests
585 Assert.That(name, Is.EqualTo(rpName)); 613 Assert.That(name, Is.EqualTo(rpName));
586 Assert.That(creatorId, Is.EqualTo(rpCreatorId)); 614 Assert.That(creatorId, Is.EqualTo(rpCreatorId));
587 Assert.NotNull(daMap); 615 Assert.NotNull(daMap);
588 Assert.AreEqual(daValue, daMap[daStoreName][daKey].AsString()); 616 Assert.AreEqual(daValue, daMap.GetStore(daNamespace, daStoreName)[daKey].AsString());
589 } 617 }
590 } 618 }
591} \ No newline at end of file 619} \ No newline at end of file
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index 4fec44f..1018b54 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -1026,6 +1026,16 @@ namespace OpenSim.Region.Framework.Scenes
1026 /// </remarks> 1026 /// </remarks>
1027 public event TeleportFail OnTeleportFail; 1027 public event TeleportFail OnTeleportFail;
1028 1028
1029// public delegate void GatherUuids(SceneObjectPart sop, IDictionary<UUID, AssetType> assetUuids);
1030//
1031// /// <summary>
1032// /// Triggered when UUIDs referenced by a scene object are being gathered for archiving, hg transfer, etc.
1033// /// </summary>
1034// /// <remarks>
1035// /// The listener should add references to the IDictionary<UUID, AssetType> as appropriate.
1036// /// </remarks>
1037// public event GatherUuids OnGatherUuids;
1038
1029 public class MoneyTransferArgs : EventArgs 1039 public class MoneyTransferArgs : EventArgs
1030 { 1040 {
1031 public UUID sender; 1041 public UUID sender;
@@ -3274,5 +3284,26 @@ namespace OpenSim.Region.Framework.Scenes
3274 handler(scenePresence); 3284 handler(scenePresence);
3275 } 3285 }
3276 } 3286 }
3287
3288// public void TriggerGatherUuids(SceneObjectPart sop, IDictionary<UUID, AssetType> assetUuids)
3289// {
3290// GatherUuids handler = OnGatherUuids;
3291//
3292// if (handler != null)
3293// {
3294// foreach (GatherUuids d in handler.GetInvocationList())
3295// {
3296// try
3297// {
3298// d(sop, assetUuids);
3299// }
3300// catch (Exception e)
3301// {
3302// m_log.ErrorFormat("[EVENT MANAGER]: Delegate for TriggerUuidGather failed - continuing {0} - {1}",
3303// e.Message, e.StackTrace);
3304// }
3305// }
3306// }
3307// }
3277 } 3308 }
3278} 3309}
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 0a18d8a..9e3d875 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -3810,20 +3810,23 @@ namespace OpenSim.Region.Framework.Scenes
3810 /// <summary> 3810 /// <summary>
3811 /// Update just the root prim position in a linkset 3811 /// Update just the root prim position in a linkset
3812 /// </summary> 3812 /// </summary>
3813 /// <param name="pos"></param> 3813 /// <param name="newPos"></param>
3814 public void UpdateRootPosition(Vector3 pos) 3814 public void UpdateRootPosition(Vector3 newPos)
3815 { 3815 {
3816 // needs to be called with phys building true 3816 // needs to be called with phys building true
3817 Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z); 3817 Vector3 oldPos;
3818 Vector3 oldPos = 3818
3819 new Vector3(AbsolutePosition.X + m_rootPart.OffsetPosition.X, 3819 // FIXME: This improves the situation where editing just the root prim of an attached object would send
3820 AbsolutePosition.Y + m_rootPart.OffsetPosition.Y, 3820 // all the other parts to oblivion after detach/reattach. However, a problem remains since the root prim
3821 AbsolutePosition.Z + m_rootPart.OffsetPosition.Z); 3821 // still ends up in the wrong position on reattach.
3822 if (IsAttachment)
3823 oldPos = RootPart.OffsetPosition;
3824 else
3825 oldPos = AbsolutePosition + RootPart.OffsetPosition;
3826
3822 Vector3 diff = oldPos - newPos; 3827 Vector3 diff = oldPos - newPos;
3823 Vector3 axDiff = new Vector3(diff.X, diff.Y, diff.Z);
3824 Quaternion partRotation = m_rootPart.RotationOffset; 3828 Quaternion partRotation = m_rootPart.RotationOffset;
3825 axDiff *= Quaternion.Inverse(partRotation); 3829 diff *= Quaternion.Inverse(partRotation);
3826 diff = axDiff;
3827 3830
3828 SceneObjectPart[] parts = m_parts.GetArray(); 3831 SceneObjectPart[] parts = m_parts.GetArray();
3829 for (int i = 0; i < parts.Length; i++) 3832 for (int i = 0; i < parts.Length; i++)
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
index ce4fb40..68918d3 100644
--- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
+++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
@@ -1346,7 +1346,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
1346 if (sop.MediaUrl != null) 1346 if (sop.MediaUrl != null)
1347 writer.WriteElementString("MediaUrl", sop.MediaUrl.ToString()); 1347 writer.WriteElementString("MediaUrl", sop.MediaUrl.ToString());
1348 1348
1349 if (sop.DynAttrs.Count > 0) 1349 if (sop.DynAttrs.CountNamespaces > 0)
1350 { 1350 {
1351 writer.WriteStartElement("DynAttrs"); 1351 writer.WriteStartElement("DynAttrs");
1352 sop.DynAttrs.WriteXml(writer); 1352 sop.DynAttrs.WriteXml(writer);
diff --git a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
index 7b47275..e60a025 100644
--- a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
+++ b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
@@ -182,7 +182,12 @@ namespace OpenSim.Region.Framework.Scenes
182 GatherAssetUuids(tii.AssetID, (AssetType)tii.Type, assetUuids); 182 GatherAssetUuids(tii.AssetID, (AssetType)tii.Type, assetUuids);
183 } 183 }
184 184
185 // get any texture UUIDs used for materials such as normal and specular maps 185 // FIXME: We need to make gathering modular but we cannot yet, since gatherers are not guaranteed
186 // to be called with scene objects that are in a scene (e.g. in the case of hg asset mapping and
187 // inventory transfer. There needs to be a way for a module to register a method without assuming a
188 // Scene.EventManager is present.
189// part.ParentGroup.Scene.EventManager.TriggerGatherUuids(part, assetUuids);
190
186 GatherMaterialsUuids(part, assetUuids); 191 GatherMaterialsUuids(part, assetUuids);
187 } 192 }
188 catch (Exception e) 193 catch (Exception e)
@@ -208,7 +213,6 @@ namespace OpenSim.Region.Framework.Scenes
208// } 213// }
209// } 214// }
210 215
211
212 /// <summary> 216 /// <summary>
213 /// Gather all of the texture asset UUIDs used to reference "Materials" such as normal and specular maps 217 /// Gather all of the texture asset UUIDs used to reference "Materials" such as normal and specular maps
214 /// </summary> 218 /// </summary>
@@ -217,20 +221,27 @@ namespace OpenSim.Region.Framework.Scenes
217 public void GatherMaterialsUuids(SceneObjectPart part, IDictionary<UUID, AssetType> assetUuids) 221 public void GatherMaterialsUuids(SceneObjectPart part, IDictionary<UUID, AssetType> assetUuids)
218 { 222 {
219 // scan thru the dynAttrs map of this part for any textures used as materials 223 // scan thru the dynAttrs map of this part for any textures used as materials
220 OSDMap OSMaterials = null; 224 OSD osdMaterials = null;
221 225
222 lock (part.DynAttrs) 226 lock (part.DynAttrs)
223 { 227 {
224 if (part.DynAttrs.ContainsKey("OS:Materials")) 228 if (part.DynAttrs.ContainsStore("OpenSim", "Materials"))
225 OSMaterials = part.DynAttrs["OS:Materials"]; 229 {
226 if (OSMaterials != null && OSMaterials.ContainsKey("Materials")) 230 OSDMap materialsStore = part.DynAttrs.GetStore("OpenSim", "Materials");
231
232 if (materialsStore == null)
233 return;
234
235 materialsStore.TryGetValue("Materials", out osdMaterials);
236 }
237
238 if (osdMaterials != null)
227 { 239 {
228 OSD osd = OSMaterials["Materials"];
229 //m_log.Info("[UUID Gatherer]: found Materials: " + OSDParser.SerializeJsonString(osd)); 240 //m_log.Info("[UUID Gatherer]: found Materials: " + OSDParser.SerializeJsonString(osd));
230 241
231 if (osd is OSDArray) 242 if (osdMaterials is OSDArray)
232 { 243 {
233 OSDArray matsArr = osd as OSDArray; 244 OSDArray matsArr = osdMaterials as OSDArray;
234 foreach (OSDMap matMap in matsArr) 245 foreach (OSDMap matMap in matsArr)
235 { 246 {
236 try 247 try
@@ -268,8 +279,7 @@ namespace OpenSim.Region.Framework.Scenes
268 } 279 }
269 } 280 }
270 } 281 }
271 282
272
273 /// <summary> 283 /// <summary>
274 /// Get an asset synchronously, potentially using an asynchronous callback. If the 284 /// Get an asset synchronously, potentially using an asynchronous callback. If the
275 /// asynchronous callback is used, we will wait for it to complete. 285 /// asynchronous callback is used, we will wait for it to complete.
diff --git a/OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs b/OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs
index 4ab6609..3a39971 100644
--- a/OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs
+++ b/OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs
@@ -121,9 +121,11 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
121 return; 121 return;
122 122
123 m_log.DebugFormat("[MaterialsDemoModule]: REGION {0} ADDED", scene.RegionInfo.RegionName); 123 m_log.DebugFormat("[MaterialsDemoModule]: REGION {0} ADDED", scene.RegionInfo.RegionName);
124
124 m_scene = scene; 125 m_scene = scene;
125 m_scene.EventManager.OnRegisterCaps += new EventManager.RegisterCapsEvent(OnRegisterCaps); 126 m_scene.EventManager.OnRegisterCaps += OnRegisterCaps;
126 m_scene.EventManager.OnObjectAddedToScene += new Action<SceneObjectGroup>(EventManager_OnObjectAddedToScene); 127 m_scene.EventManager.OnObjectAddedToScene += EventManager_OnObjectAddedToScene;
128// m_scene.EventManager.OnGatherUuids += GatherMaterialsUuids;
127 } 129 }
128 130
129 void EventManager_OnObjectAddedToScene(SceneObjectGroup obj) 131 void EventManager_OnObjectAddedToScene(SceneObjectGroup obj)
@@ -157,6 +159,10 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
157 if (!m_enabled) 159 if (!m_enabled)
158 return; 160 return;
159 161
162 m_scene.EventManager.OnRegisterCaps -= OnRegisterCaps;
163 m_scene.EventManager.OnObjectAddedToScene -= EventManager_OnObjectAddedToScene;
164// m_scene.EventManager.OnGatherUuids -= GatherMaterialsUuids;
165
160 m_log.DebugFormat("[MaterialsDemoModule]: REGION {0} REMOVED", scene.RegionInfo.RegionName); 166 m_log.DebugFormat("[MaterialsDemoModule]: REGION {0} REMOVED", scene.RegionInfo.RegionName);
161 } 167 }
162 168
@@ -167,18 +173,21 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
167 OSDMap GetMaterial(UUID id) 173 OSDMap GetMaterial(UUID id)
168 { 174 {
169 OSDMap map = null; 175 OSDMap map = null;
170 if (m_knownMaterials.ContainsKey(id)) 176 lock (m_knownMaterials)
171 { 177 {
172 map = new OSDMap(); 178 if (m_knownMaterials.ContainsKey(id))
173 map["ID"] = OSD.FromBinary(id.GetBytes()); 179 {
174 map["Material"] = m_knownMaterials[id]; 180 map = new OSDMap();
181 map["ID"] = OSD.FromBinary(id.GetBytes());
182 map["Material"] = m_knownMaterials[id];
183 }
175 } 184 }
176 return map; 185 return map;
177 } 186 }
178 187
179 void GetStoredMaterialsForPart(SceneObjectPart part) 188 void GetStoredMaterialsForPart(SceneObjectPart part)
180 { 189 {
181 OSDMap OSMaterials = null; 190 OSD OSMaterials = null;
182 OSDArray matsArr = null; 191 OSDArray matsArr = null;
183 192
184 if (part.DynAttrs == null) 193 if (part.DynAttrs == null)
@@ -188,23 +197,24 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
188 197
189 lock (part.DynAttrs) 198 lock (part.DynAttrs)
190 { 199 {
191 if (part.DynAttrs.ContainsKey("OS:Materials")) 200 if (part.DynAttrs.ContainsStore("OpenSim", "Materials"))
192 OSMaterials = part.DynAttrs["OS:Materials"];
193 if (OSMaterials != null && OSMaterials.ContainsKey("Materials"))
194 { 201 {
202 OSDMap materialsStore = part.DynAttrs.GetStore("OpenSim", "Materials");
195 203
196 OSD osd = OSMaterials["Materials"]; 204 if (materialsStore == null)
197 if (osd is OSDArray) 205 return;
198 matsArr = osd as OSDArray; 206
207 materialsStore.TryGetValue("Materials", out OSMaterials);
199 } 208 }
200 }
201 209
202 if (OSMaterials == null) 210 if (OSMaterials != null && OSMaterials is OSDArray)
203 return; 211 matsArr = OSMaterials as OSDArray;
212 else
213 return;
214 }
204 215
205 m_log.Info("[MaterialsDemoModule]: OSMaterials: " + OSDParser.SerializeJsonString(OSMaterials)); 216 m_log.Info("[MaterialsDemoModule]: OSMaterials: " + OSDParser.SerializeJsonString(OSMaterials));
206 217
207
208 if (matsArr == null) 218 if (matsArr == null)
209 { 219 {
210 m_log.Info("[MaterialsDemoModule]: matsArr is null :( "); 220 m_log.Info("[MaterialsDemoModule]: matsArr is null :( ");
@@ -215,13 +225,13 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
215 { 225 {
216 if (elemOsd != null && elemOsd is OSDMap) 226 if (elemOsd != null && elemOsd is OSDMap)
217 { 227 {
218
219 OSDMap matMap = elemOsd as OSDMap; 228 OSDMap matMap = elemOsd as OSDMap;
220 if (matMap.ContainsKey("ID") && matMap.ContainsKey("Material")) 229 if (matMap.ContainsKey("ID") && matMap.ContainsKey("Material"))
221 { 230 {
222 try 231 try
223 { 232 {
224 m_knownMaterials[matMap["ID"].AsUUID()] = (OSDMap)matMap["Material"]; 233 lock (m_knownMaterials)
234 m_knownMaterials[matMap["ID"].AsUUID()] = (OSDMap)matMap["Material"];
225 } 235 }
226 catch (Exception e) 236 catch (Exception e)
227 { 237 {
@@ -232,7 +242,6 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
232 } 242 }
233 } 243 }
234 244
235
236 void StoreMaterialsForPart(SceneObjectPart part) 245 void StoreMaterialsForPart(SceneObjectPart part)
237 { 246 {
238 try 247 try
@@ -246,8 +255,11 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
246 255
247 if (te.DefaultTexture != null) 256 if (te.DefaultTexture != null)
248 { 257 {
249 if (m_knownMaterials.ContainsKey(te.DefaultTexture.MaterialID)) 258 lock (m_knownMaterials)
250 mats[te.DefaultTexture.MaterialID] = m_knownMaterials[te.DefaultTexture.MaterialID]; 259 {
260 if (m_knownMaterials.ContainsKey(te.DefaultTexture.MaterialID))
261 mats[te.DefaultTexture.MaterialID] = m_knownMaterials[te.DefaultTexture.MaterialID];
262 }
251 } 263 }
252 264
253 if (te.FaceTextures != null) 265 if (te.FaceTextures != null)
@@ -256,8 +268,11 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
256 { 268 {
257 if (face != null) 269 if (face != null)
258 { 270 {
259 if (m_knownMaterials.ContainsKey(face.MaterialID)) 271 lock (m_knownMaterials)
260 mats[face.MaterialID] = m_knownMaterials[face.MaterialID]; 272 {
273 if (m_knownMaterials.ContainsKey(face.MaterialID))
274 mats[face.MaterialID] = m_knownMaterials[face.MaterialID];
275 }
261 } 276 }
262 } 277 }
263 } 278 }
@@ -277,7 +292,7 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
277 OSMaterials["Materials"] = matsArr; 292 OSMaterials["Materials"] = matsArr;
278 293
279 lock (part.DynAttrs) 294 lock (part.DynAttrs)
280 part.DynAttrs["OS:Materials"] = OSMaterials; 295 part.DynAttrs.SetStore("OpenSim", "Materials", OSMaterials);
281 } 296 }
282 catch (Exception e) 297 catch (Exception e)
283 { 298 {
@@ -285,7 +300,6 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
285 } 300 }
286 } 301 }
287 302
288
289 public string RenderMaterialsPostCap(string request, string path, 303 public string RenderMaterialsPostCap(string request, string path,
290 string param, IOSHttpRequest httpRequest, 304 string param, IOSHttpRequest httpRequest,
291 IOSHttpResponse httpResponse) 305 IOSHttpResponse httpResponse)
@@ -319,18 +333,21 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
319 try 333 try
320 { 334 {
321 UUID id = new UUID(elem.AsBinary(), 0); 335 UUID id = new UUID(elem.AsBinary(), 0);
322 336
323 if (m_knownMaterials.ContainsKey(id)) 337 lock (m_knownMaterials)
324 { 338 {
325 m_log.Info("[MaterialsDemoModule]: request for known material ID: " + id.ToString()); 339 if (m_knownMaterials.ContainsKey(id))
326 OSDMap matMap = new OSDMap(); 340 {
327 matMap["ID"] = OSD.FromBinary(id.GetBytes()); 341 m_log.Info("[MaterialsDemoModule]: request for known material ID: " + id.ToString());
342 OSDMap matMap = new OSDMap();
343 matMap["ID"] = OSD.FromBinary(id.GetBytes());
328 344
329 matMap["Material"] = m_knownMaterials[id]; 345 matMap["Material"] = m_knownMaterials[id];
330 respArr.Add(matMap); 346 respArr.Add(matMap);
347 }
348 else
349 m_log.Info("[MaterialsDemoModule]: request for UNKNOWN material ID: " + id.ToString());
331 } 350 }
332 else
333 m_log.Info("[MaterialsDemoModule]: request for UNKNOWN material ID: " + id.ToString());
334 } 351 }
335 catch (Exception e) 352 catch (Exception e)
336 { 353 {
@@ -368,7 +385,8 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
368 m_log.Debug("[MaterialsDemoModule]: mat: " + OSDParser.SerializeJsonString(mat)); 385 m_log.Debug("[MaterialsDemoModule]: mat: " + OSDParser.SerializeJsonString(mat));
369 386
370 UUID id = HashOsd(mat); 387 UUID id = HashOsd(mat);
371 m_knownMaterials[id] = mat; 388 lock (m_knownMaterials)
389 m_knownMaterials[id] = mat;
372 390
373 391
374 var sop = m_scene.GetSceneObjectPart(matLocalID); 392 var sop = m_scene.GetSceneObjectPart(matLocalID);
@@ -476,24 +494,22 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
476 m_log.Debug("[MaterialsDemoModule]: GET cap handler"); 494 m_log.Debug("[MaterialsDemoModule]: GET cap handler");
477 495
478 OSDMap resp = new OSDMap(); 496 OSDMap resp = new OSDMap();
479
480
481 int matsCount = 0; 497 int matsCount = 0;
482
483 OSDArray allOsd = new OSDArray(); 498 OSDArray allOsd = new OSDArray();
484 499
485 foreach (KeyValuePair<UUID, OSDMap> kvp in m_knownMaterials) 500 lock (m_knownMaterials)
486 { 501 {
487 OSDMap matMap = new OSDMap(); 502 foreach (KeyValuePair<UUID, OSDMap> kvp in m_knownMaterials)
488 503 {
489 matMap["ID"] = OSD.FromBinary(kvp.Key.GetBytes()); 504 OSDMap matMap = new OSDMap();
490 505
491 matMap["Material"] = kvp.Value; 506 matMap["ID"] = OSD.FromBinary(kvp.Key.GetBytes());
492 allOsd.Add(matMap); 507 matMap["Material"] = kvp.Value;
493 matsCount++; 508 allOsd.Add(matMap);
509 matsCount++;
510 }
494 } 511 }
495 512
496
497 resp["Zipped"] = ZCompressOSD(allOsd, false); 513 resp["Zipped"] = ZCompressOSD(allOsd, false);
498 m_log.Debug("[MaterialsDemoModule]: matsCount: " + matsCount.ToString()); 514 m_log.Debug("[MaterialsDemoModule]: matsCount: " + matsCount.ToString());
499 515
@@ -575,5 +591,72 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule
575 output.Flush(); 591 output.Flush();
576 } 592 }
577 593
594 // FIXME: This code is currently still in UuidGatherer since we cannot use Scene.EventManager as some
595 // calls to the gatherer are done for objects with no scene.
596// /// <summary>
597// /// Gather all of the texture asset UUIDs used to reference "Materials" such as normal and specular maps
598// /// </summary>
599// /// <param name="part"></param>
600// /// <param name="assetUuids"></param>
601// private void GatherMaterialsUuids(SceneObjectPart part, IDictionary<UUID, AssetType> assetUuids)
602// {
603// // scan thru the dynAttrs map of this part for any textures used as materials
604// OSD osdMaterials = null;
605//
606// lock (part.DynAttrs)
607// {
608// if (part.DynAttrs.ContainsStore("OpenSim", "Materials"))
609// {
610// OSDMap materialsStore = part.DynAttrs.GetStore("OpenSim", "Materials");
611// if (materialsStore == null)
612// return;
613//
614// materialsStore.TryGetValue("Materials", out osdMaterials);
615// }
616//
617// if (osdMaterials != null)
618// {
619// //m_log.Info("[UUID Gatherer]: found Materials: " + OSDParser.SerializeJsonString(osd));
620//
621// if (osdMaterials is OSDArray)
622// {
623// OSDArray matsArr = osdMaterials as OSDArray;
624// foreach (OSDMap matMap in matsArr)
625// {
626// try
627// {
628// if (matMap.ContainsKey("Material"))
629// {
630// OSDMap mat = matMap["Material"] as OSDMap;
631// if (mat.ContainsKey("NormMap"))
632// {
633// UUID normalMapId = mat["NormMap"].AsUUID();
634// if (normalMapId != UUID.Zero)
635// {
636// assetUuids[normalMapId] = AssetType.Texture;
637// //m_log.Info("[UUID Gatherer]: found normal map ID: " + normalMapId.ToString());
638// }
639// }
640// if (mat.ContainsKey("SpecMap"))
641// {
642// UUID specularMapId = mat["SpecMap"].AsUUID();
643// if (specularMapId != UUID.Zero)
644// {
645// assetUuids[specularMapId] = AssetType.Texture;
646// //m_log.Info("[UUID Gatherer]: found specular map ID: " + specularMapId.ToString());
647// }
648// }
649// }
650//
651// }
652// catch (Exception e)
653// {
654// m_log.Warn("[MaterialsDemoModule]: exception getting materials: " + e.Message);
655// }
656// }
657// }
658// }
659// }
660// }
578 } 661 }
579} \ No newline at end of file 662} \ No newline at end of file