aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Scenes
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Environment/Scenes')
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.cs2
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneEvents.cs12
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectPart.cs78
3 files changed, 92 insertions, 0 deletions
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index 89fd5ea..a80426b 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -1315,6 +1315,8 @@ namespace OpenSim.Region.Environment.Scenes
1315 avatar.AbsolutePosition.Z); 1315 avatar.AbsolutePosition.Z);
1316 m_sceneGridService.SendCloseChildAgentConnections(avatar); 1316 m_sceneGridService.SendCloseChildAgentConnections(avatar);
1317 } 1317 }
1318
1319 m_eventManager.TriggerClientClosed(agentID);
1318 } 1320 }
1319 catch (NullReferenceException) 1321 catch (NullReferenceException)
1320 { 1322 {
diff --git a/OpenSim/Region/Environment/Scenes/SceneEvents.cs b/OpenSim/Region/Environment/Scenes/SceneEvents.cs
index 51d1b32..cada991 100644
--- a/OpenSim/Region/Environment/Scenes/SceneEvents.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneEvents.cs
@@ -125,6 +125,10 @@ namespace OpenSim.Region.Environment.Scenes
125 125
126 public event NewGridInstantMessage OnGridInstantMessageToGroupsModule; 126 public event NewGridInstantMessage OnGridInstantMessageToGroupsModule;
127 127
128 public delegate void ClientClosed(LLUUID clientID);
129
130 public event ClientClosed OnClientClosed;
131
128 public delegate void ScriptChangedEvent(uint localID, uint change); 132 public delegate void ScriptChangedEvent(uint localID, uint change);
129 133
130 public event ScriptChangedEvent OnScriptChangedEvent; 134 public event ScriptChangedEvent OnScriptChangedEvent;
@@ -338,6 +342,14 @@ namespace OpenSim.Region.Environment.Scenes
338 342
339 } 343 }
340 } 344 }
345
346 public void TriggerClientClosed(LLUUID ClientID)
347 {
348 if (OnClientClosed != null)
349 {
350 OnClientClosed(ClientID);
351 }
352 }
341 353
342 } 354 }
343} \ No newline at end of file 355} \ No newline at end of file
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
index 159eaf1..0ba64f2 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
@@ -1457,6 +1457,84 @@ namespace OpenSim.Region.Environment.Scenes
1457 1457
1458 #endregion 1458 #endregion
1459 1459
1460 #region Sound
1461 public void PreloadSound(string sound)
1462 {
1463 LLUUID ownerID = OwnerID;
1464 LLUUID objectID = UUID;
1465 LLUUID soundID = LLUUID.Zero;
1466
1467 if (!LLUUID.TryParse(sound, out soundID))
1468 {
1469 //Trys to fetch sound id from prim's inventory.
1470 //Prim's inventory doesn't support non script items yet
1471 SceneObjectPart op = this;
1472 foreach (KeyValuePair<LLUUID, TaskInventoryItem> item in op.TaskInventory)
1473 {
1474 if (item.Value.Name == sound)
1475 {
1476 soundID = item.Value.ItemID;
1477 break;
1478 }
1479 }
1480 }
1481
1482 List<ScenePresence> avatarts = m_parentGroup.Scene.GetAvatars();
1483 foreach (ScenePresence p in avatarts)
1484 {
1485 // TODO: some filtering by distance of avatar
1486
1487 p.ControllingClient.SendPreLoadSound(objectID, objectID, soundID);
1488 }
1489 }
1490
1491 public void SendSound(string sound, double volume, bool triggered)
1492 {
1493 if (volume > 1)
1494 volume = 1;
1495 if (volume < 0)
1496 volume = 0;
1497
1498 LLUUID ownerID = OwnerID;
1499 LLUUID objectID = UUID;
1500 LLUUID parentID = GetRootPartUUID();
1501 LLUUID soundID = LLUUID.Zero;
1502 LLVector3 position = AbsolutePosition; // region local
1503 ulong regionHandle = m_parentGroup.Scene.RegionInfo.RegionHandle;
1504
1505 byte flags = 0;
1506
1507 if (!LLUUID.TryParse(sound, out soundID))
1508 {
1509 // search sound file from inventory
1510 SceneObjectPart op = this;
1511 foreach (KeyValuePair<LLUUID, TaskInventoryItem> item in op.TaskInventory)
1512 {
1513 if (item.Value.Name == sound)
1514 {
1515 soundID = item.Value.ItemID;
1516 break;
1517 }
1518 }
1519 }
1520
1521 List<ScenePresence> avatarts = m_parentGroup.Scene.GetAvatars();
1522 foreach (ScenePresence p in avatarts)
1523 {
1524 // TODO: some filtering by distance of avatar
1525 if (triggered)
1526 {
1527 p.ControllingClient.SendTriggeredSound(soundID, ownerID, objectID, parentID, regionHandle, position, (float)volume);
1528 }
1529 else
1530 {
1531 p.ControllingClient.SendPlayAttachedSound(soundID, objectID, ownerID, (float)volume, flags);
1532 }
1533 }
1534 }
1535
1536 #endregion
1537
1460 #region Resizing/Scale 1538 #region Resizing/Scale
1461 1539
1462 /// <summary> 1540 /// <summary>