Mantis#2656. Thank you kindly, Nlin for a patch that:

Attached patch implements llCollisionSound. Thanks T. Sado.
0.6.1-post-fixes
Charles Krinke 2008-11-19 18:30:16 +00:00
parent 778d83d9f0
commit 44c56a974c
6 changed files with 84 additions and 2 deletions

View File

@ -981,6 +981,9 @@ namespace OpenSim.Data.MySQL
createCol(prims, "ClickAction", typeof (Byte));
createCol(prims, "Material", typeof (Byte));
createCol(prims, "CollisionSound", typeof(String));
createCol(prims, "CollisionSoundVolume", typeof(Double));
// Add in contraints
prims.PrimaryKey = new DataColumn[] {prims.Columns["UUID"]};
@ -1271,6 +1274,9 @@ namespace OpenSim.Data.MySQL
if (!row.IsNull("ClickAction"))
prim.ClickAction = Convert.ToByte(row["ClickAction"]);
prim.CollisionSound = new UUID(row["CollisionSound"].ToString());
prim.CollisionSoundVolume = Convert.ToSingle(row["CollisionSoundVolume"]);
return prim;
}
@ -1589,6 +1595,9 @@ namespace OpenSim.Data.MySQL
row["ClickAction"] = clickAction;
row["Material"] = prim.Material;
row["CollisionSound"] = prim.CollisionSound.ToString();
row["CollisionSoundVolume"] = prim.CollisionSoundVolume;
}
/// <summary>

View File

@ -0,0 +1,6 @@
BEGIN;
ALTER TABLE prims ADD COLUMN CollisionSound char(36) not null default '00000000-0000-0000-0000-000000000000';
ALTER TABLE prims ADD COLUMN CollisionSoundVolume float not null default 0.0;
COMMIT;

View File

@ -0,0 +1,6 @@
BEGIN;
ALTER TABLE prims ADD COLUMN CollisionSound varchar(36) NOT NULL default '00000000-0000-0000-0000-000000000000';
ALTER TABLE prims ADD COLUMN CollisionSoundVolume float NOT NULL default 0;
COMMIT;

View File

@ -877,6 +877,9 @@ namespace OpenSim.Data.SQLite
createCol(prims, "Material", typeof(Byte));
createCol(prims, "CollisionSound", typeof(String));
createCol(prims, "CollisionSoundVolume", typeof(Double));
// Add in contraints
prims.PrimaryKey = new DataColumn[] {prims.Columns["UUID"]};
@ -1237,6 +1240,10 @@ namespace OpenSim.Data.SQLite
prim.ObjectSaleType = Convert.ToByte(row["SaleType"]);
prim.Material = Convert.ToByte(row["Material"]);
prim.CollisionSound = new UUID(row["CollisionSound"].ToString());
prim.CollisionSoundVolume = Convert.ToSingle(row["CollisionSoundVolume"]);
return prim;
}
@ -1564,6 +1571,9 @@ namespace OpenSim.Data.SQLite
row["SalePrice"] = prim.SalePrice;
row["Material"] = prim.Material;
row["CollisionSound"] = prim.CollisionSound.ToString();
row["CollisionSoundVolume"] = prim.CollisionSoundVolume;
}
/// <summary>

View File

@ -201,6 +201,10 @@ namespace OpenSim.Region.Environment.Scenes
private Vector3 m_cameraAtOffset = new Vector3(0.0f, 0.0f, 0.0f);
private bool m_forceMouselook = false;
// TODO: Collision sound should have default.
private UUID m_collisionSound = UUID.Zero;
private float m_collisionSoundVolume = 0.0f;
#endregion Fields
#region Constructors
@ -952,6 +956,22 @@ if (m_shape != null) {
set { m_sitAnimation = value; }
}
public UUID CollisionSound
{
get { return m_collisionSound; }
set
{
m_collisionSound = value;
aggregateScriptEvents();
}
}
public float CollisionSoundVolume
{
get { return m_collisionSoundVolume; }
set { m_collisionSoundVolume = value; }
}
#endregion Public Properties with only Get
@ -1607,6 +1627,12 @@ if (m_shape != null) {
if (m_parentGroup.IsDeleted)
return;
// play the sound.
if (startedColliders.Count > 0 && CollisionSound != UUID.Zero && CollisionSoundVolume > 0.0f)
{
SendSound(CollisionSound.ToString(), CollisionSoundVolume, true, (byte)0);
}
if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.collision_start) != 0)
{
// do event notification
@ -3233,7 +3259,8 @@ if (m_shape != null) {
if (
((AggregateScriptEvents & scriptEvents.collision) != 0) ||
((AggregateScriptEvents & scriptEvents.collision_end) != 0) ||
((AggregateScriptEvents & scriptEvents.collision_start) != 0)
((AggregateScriptEvents & scriptEvents.collision_start) != 0) ||
(CollisionSound != null && CollisionSound != UUID.Zero)
)
{
// subscribe to physics updates.
@ -3252,6 +3279,13 @@ if (m_shape != null) {
PhysActor.OnCollisionUpdate -= PhysicsCollision;
}
}
if (m_parentGroup == null)
{
ScheduleFullUpdate();
return;
}
if ((GetEffectiveObjectFlags() & (uint)PrimFlags.Scripted) != 0)
{
m_parentGroup.Scene.EventManager.OnScriptTimerEvent += handleTimerAccounting;
@ -3363,3 +3397,4 @@ if (m_shape != null) {

View File

@ -3490,7 +3490,23 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
public void llCollisionSound(string impact_sound, double impact_volume)
{
m_host.AddScriptLPS(1);
NotImplemented("llCollisionSound");
//NotImplemented("llCollisionSound");
// TODO: Parameter check logic required.
UUID soundId = UUID.Zero;
if (!UUID.TryParse(impact_sound, out soundId))
{
foreach (TaskInventoryItem item in m_host.TaskInventory.Values)
{
if (item.Type == (int)AssetType.Sound && item.Name == impact_sound)
{
soundId = item.AssetID;
break;
}
}
}
m_host.CollisionSound = soundId;
m_host.CollisionSoundVolume = (float)impact_volume;
}
public void llCollisionSprite(string impact_sprite)