diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneObjectPart.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 70 |
1 files changed, 40 insertions, 30 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index b6916f2..19e3023 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | |||
@@ -389,12 +389,16 @@ namespace OpenSim.Region.Framework.Scenes | |||
389 | } | 389 | } |
390 | 390 | ||
391 | /// <value> | 391 | /// <value> |
392 | /// Access should be via Inventory directly - this property temporarily remains for xml serialization purposes | 392 | /// Get the inventory list |
393 | /// </value> | 393 | /// </value> |
394 | public TaskInventoryDictionary TaskInventory | 394 | public TaskInventoryDictionary TaskInventory |
395 | { | 395 | { |
396 | get { return m_inventory.Items; } | 396 | get { |
397 | set { m_inventory.Items = value; } | 397 | return m_inventory.Items; |
398 | } | ||
399 | set { | ||
400 | m_inventory.Items = value; | ||
401 | } | ||
398 | } | 402 | } |
399 | 403 | ||
400 | public uint ObjectFlags | 404 | public uint ObjectFlags |
@@ -1064,14 +1068,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1064 | } | 1068 | } |
1065 | } | 1069 | } |
1066 | 1070 | ||
1067 | /// <summary> | ||
1068 | /// Clear all pending updates of parts to clients | ||
1069 | /// </summary> | ||
1070 | private void ClearUpdateSchedule() | ||
1071 | { | ||
1072 | m_updateFlag = 0; | ||
1073 | } | ||
1074 | |||
1075 | private void SendObjectPropertiesToClient(UUID AgentID) | 1071 | private void SendObjectPropertiesToClient(UUID AgentID) |
1076 | { | 1072 | { |
1077 | ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences(); | 1073 | ScenePresence[] avatars = m_parentGroup.Scene.GetScenePresences(); |
@@ -2109,17 +2105,18 @@ namespace OpenSim.Region.Framework.Scenes | |||
2109 | //Trys to fetch sound id from prim's inventory. | 2105 | //Trys to fetch sound id from prim's inventory. |
2110 | //Prim's inventory doesn't support non script items yet | 2106 | //Prim's inventory doesn't support non script items yet |
2111 | 2107 | ||
2112 | lock (TaskInventory) | 2108 | TaskInventory.LockItemsForRead(true); |
2109 | |||
2110 | foreach (KeyValuePair<UUID, TaskInventoryItem> item in TaskInventory) | ||
2113 | { | 2111 | { |
2114 | foreach (KeyValuePair<UUID, TaskInventoryItem> item in TaskInventory) | 2112 | if (item.Value.Name == sound) |
2115 | { | 2113 | { |
2116 | if (item.Value.Name == sound) | 2114 | soundID = item.Value.ItemID; |
2117 | { | 2115 | break; |
2118 | soundID = item.Value.ItemID; | ||
2119 | break; | ||
2120 | } | ||
2121 | } | 2116 | } |
2122 | } | 2117 | } |
2118 | |||
2119 | TaskInventory.LockItemsForRead(false); | ||
2123 | } | 2120 | } |
2124 | 2121 | ||
2125 | List<ScenePresence> avatarts = m_parentGroup.Scene.GetAvatars(); | 2122 | List<ScenePresence> avatarts = m_parentGroup.Scene.GetAvatars(); |
@@ -2185,6 +2182,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
2185 | ParentGroup.HasGroupChanged = true; | 2182 | ParentGroup.HasGroupChanged = true; |
2186 | ScheduleFullUpdate(); | 2183 | ScheduleFullUpdate(); |
2187 | } | 2184 | } |
2185 | |||
2186 | public void RotLookAt(Quaternion target, float strength, float damping) | ||
2187 | { | ||
2188 | m_parentGroup.rotLookAt(target, strength, damping); | ||
2189 | } | ||
2188 | 2190 | ||
2189 | /// <summary> | 2191 | /// <summary> |
2190 | /// Schedules this prim for a full update | 2192 | /// Schedules this prim for a full update |
@@ -2389,8 +2391,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2389 | { | 2391 | { |
2390 | const float ROTATION_TOLERANCE = 0.01f; | 2392 | const float ROTATION_TOLERANCE = 0.01f; |
2391 | const float VELOCITY_TOLERANCE = 0.001f; | 2393 | const float VELOCITY_TOLERANCE = 0.001f; |
2392 | const float POSITION_TOLERANCE = 0.05f; | 2394 | const float POSITION_TOLERANCE = 0.05f; // I don't like this, but I suppose it's necessary |
2393 | const int TIME_MS_TOLERANCE = 3000; | 2395 | const int TIME_MS_TOLERANCE = 200; //llSetPos has a 200ms delay. This should NOT be 3 seconds. |
2394 | 2396 | ||
2395 | if (m_updateFlag == 1) | 2397 | if (m_updateFlag == 1) |
2396 | { | 2398 | { |
@@ -2404,7 +2406,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2404 | Environment.TickCount - m_lastTerseSent > TIME_MS_TOLERANCE) | 2406 | Environment.TickCount - m_lastTerseSent > TIME_MS_TOLERANCE) |
2405 | { | 2407 | { |
2406 | AddTerseUpdateToAllAvatars(); | 2408 | AddTerseUpdateToAllAvatars(); |
2407 | ClearUpdateSchedule(); | 2409 | |
2408 | 2410 | ||
2409 | // This causes the Scene to 'poll' physical objects every couple of frames | 2411 | // This causes the Scene to 'poll' physical objects every couple of frames |
2410 | // bad, so it's been replaced by an event driven method. | 2412 | // bad, so it's been replaced by an event driven method. |
@@ -2422,16 +2424,18 @@ namespace OpenSim.Region.Framework.Scenes | |||
2422 | m_lastAngularVelocity = AngularVelocity; | 2424 | m_lastAngularVelocity = AngularVelocity; |
2423 | m_lastTerseSent = Environment.TickCount; | 2425 | m_lastTerseSent = Environment.TickCount; |
2424 | } | 2426 | } |
2427 | //Moved this outside of the if clause so updates don't get blocked.. *sigh* | ||
2428 | m_updateFlag = 0; //Why were we calling a function to do this? Inefficient! *screams* | ||
2425 | } | 2429 | } |
2426 | else | 2430 | else |
2427 | { | 2431 | { |
2428 | if (m_updateFlag == 2) // is a new prim, just created/reloaded or has major changes | 2432 | if (m_updateFlag == 2) // is a new prim, just created/reloaded or has major changes |
2429 | { | 2433 | { |
2430 | AddFullUpdateToAllAvatars(); | 2434 | AddFullUpdateToAllAvatars(); |
2431 | ClearUpdateSchedule(); | 2435 | m_updateFlag = 0; //Same here |
2432 | } | 2436 | } |
2433 | } | 2437 | } |
2434 | ClearUpdateSchedule(); | 2438 | m_updateFlag = 0; |
2435 | } | 2439 | } |
2436 | 2440 | ||
2437 | /// <summary> | 2441 | /// <summary> |
@@ -2458,17 +2462,16 @@ namespace OpenSim.Region.Framework.Scenes | |||
2458 | if (!UUID.TryParse(sound, out soundID)) | 2462 | if (!UUID.TryParse(sound, out soundID)) |
2459 | { | 2463 | { |
2460 | // search sound file from inventory | 2464 | // search sound file from inventory |
2461 | lock (TaskInventory) | 2465 | TaskInventory.LockItemsForRead(true); |
2466 | foreach (KeyValuePair<UUID, TaskInventoryItem> item in TaskInventory) | ||
2462 | { | 2467 | { |
2463 | foreach (KeyValuePair<UUID, TaskInventoryItem> item in TaskInventory) | 2468 | if (item.Value.Name == sound && item.Value.Type == (int)AssetType.Sound) |
2464 | { | 2469 | { |
2465 | if (item.Value.Name == sound && item.Value.Type == (int)AssetType.Sound) | 2470 | soundID = item.Value.ItemID; |
2466 | { | 2471 | break; |
2467 | soundID = item.Value.ItemID; | ||
2468 | break; | ||
2469 | } | ||
2470 | } | 2472 | } |
2471 | } | 2473 | } |
2474 | TaskInventory.LockItemsForRead(false); | ||
2472 | } | 2475 | } |
2473 | 2476 | ||
2474 | if (soundID == UUID.Zero) | 2477 | if (soundID == UUID.Zero) |
@@ -2684,6 +2687,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
2684 | SetText(text); | 2687 | SetText(text); |
2685 | } | 2688 | } |
2686 | 2689 | ||
2690 | public void StopLookAt() | ||
2691 | { | ||
2692 | m_parentGroup.stopLookAt(); | ||
2693 | |||
2694 | m_parentGroup.ScheduleGroupForTerseUpdate(); | ||
2695 | } | ||
2696 | |||
2687 | public void StopMoveToTarget() | 2697 | public void StopMoveToTarget() |
2688 | { | 2698 | { |
2689 | m_parentGroup.stopMoveToTarget(); | 2699 | m_parentGroup.stopMoveToTarget(); |