Make Buoyancy a prim property

avinationmerge
Melanie 2011-06-02 18:32:25 +02:00
parent f02fbdbc68
commit 61bf2bf2dd
3 changed files with 52 additions and 26 deletions

View File

@ -680,6 +680,9 @@ namespace OpenSim.Region.Framework.Scenes
ApplyPhysics(m_scene.m_physicalPrim); ApplyPhysics(m_scene.m_physicalPrim);
if (RootPart.PhysActor != null)
RootPart.Buoyancy = RootPart.Buoyancy;
// Don't trigger the update here - otherwise some client issues occur when multiple updates are scheduled // Don't trigger the update here - otherwise some client issues occur when multiple updates are scheduled
// for the same object with very different properties. The caller must schedule the update. // for the same object with very different properties. The caller must schedule the update.
//ScheduleGroupForFullUpdate(); //ScheduleGroupForFullUpdate();

View File

@ -338,6 +338,7 @@ namespace OpenSim.Region.Framework.Scenes
protected Vector3 m_lastAcceleration; protected Vector3 m_lastAcceleration;
protected Vector3 m_lastAngularVelocity; protected Vector3 m_lastAngularVelocity;
protected int m_lastTerseSent; protected int m_lastTerseSent;
protected float m_buoyancy = 0.0f;
/// <summary> /// <summary>
/// Stores media texture data /// Stores media texture data
@ -1335,6 +1336,19 @@ namespace OpenSim.Region.Framework.Scenes
set { m_collisionSoundVolume = value; } set { m_collisionSoundVolume = value; }
} }
public float Buoyancy
{
get { return m_buoyancy; }
set
{
m_buoyancy = value;
if (PhysActor != null)
{
PhysActor.Buoyancy = value;
}
}
}
#endregion Public Properties with only Get #endregion Public Properties with only Get
#region Private Methods #region Private Methods
@ -3275,14 +3289,6 @@ namespace OpenSim.Region.Framework.Scenes
STATUS_ROTATE_Z = rotate; STATUS_ROTATE_Z = rotate;
} }
public void SetBuoyancy(float fvalue)
{
if (PhysActor != null)
{
PhysActor.Buoyancy = fvalue;
}
}
public void SetDieAtEdge(bool p) public void SetDieAtEdge(bool p)
{ {
if (m_parentGroup == null) if (m_parentGroup == null)

View File

@ -3453,7 +3453,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
{ {
if (!m_host.ParentGroup.IsDeleted) if (!m_host.ParentGroup.IsDeleted)
{ {
m_host.ParentGroup.RootPart.SetBuoyancy((float)buoyancy); m_host.ParentGroup.RootPart.Buoyancy = (float)buoyancy;
} }
} }
} }
@ -3707,27 +3707,44 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return; return;
} }
} }
else if (m_host.SitTargetAvatar == agentID) // Sitting avatar else
{ {
// When agent is sitting, certain permissions are implicit if requested from sitting agent bool sitting = false;
int implicitPerms = ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | if (m_host.SitTargetAvatar == agentID)
ScriptBaseClass.PERMISSION_CONTROL_CAMERA |
ScriptBaseClass.PERMISSION_TRACK_CAMERA |
ScriptBaseClass.PERMISSION_TAKE_CONTROLS;
if ((perm & (~implicitPerms)) == 0) // Requested only implicit perms
{ {
m_host.TaskInventory.LockItemsForWrite(true); sitting = true;
m_host.TaskInventory[invItemID].PermsGranter = agentID; }
m_host.TaskInventory[invItemID].PermsMask = perm; else
m_host.TaskInventory.LockItemsForWrite(false); {
foreach (SceneObjectPart p in m_host.ParentGroup.Parts)
{
if (p.SitTargetAvatar == agentID)
sitting = true;
}
}
m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams( if (sitting)
"run_time_permissions", new Object[] { {
new LSL_Integer(perm) }, // When agent is sitting, certain permissions are implicit if requested from sitting agent
new DetectParams[0])); int implicitPerms = ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION |
ScriptBaseClass.PERMISSION_CONTROL_CAMERA |
ScriptBaseClass.PERMISSION_TRACK_CAMERA |
ScriptBaseClass.PERMISSION_TAKE_CONTROLS;
return; if ((perm & (~implicitPerms)) == 0) // Requested only implicit perms
{
m_host.TaskInventory.LockItemsForWrite(true);
m_host.TaskInventory[invItemID].PermsGranter = agentID;
m_host.TaskInventory[invItemID].PermsMask = perm;
m_host.TaskInventory.LockItemsForWrite(false);
m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams(
"run_time_permissions", new Object[] {
new LSL_Integer(perm) },
new DetectParams[0]));
return;
}
} }
} }