public void llSetPhysicsMaterial(LSL_Integer bits, LSL_Float density, LSL_Float friction, LSL_Float restitution,
LSL_Float gravityMultiplier)
{
ObjectFlagUpdatePacket.ExtraPhysicsBlock[] blocks = new ObjectFlagUpdatePacket.ExtraPhysicsBlock[1];
blocks[0] = new ObjectFlagUpdatePacket.ExtraPhysicsBlock();
if ((bits & ScriptBaseClass.DENSITY) == ScriptBaseClass.DENSITY)
m_host.Density = (float)density;
else
blocks[0].Density = m_host.Density;
if ((bits & ScriptBaseClass.FRICTION) == ScriptBaseClass.FRICTION)
m_host.Friction = (float)friction;
else
blocks[0].Friction = m_host.Friction;
if ((bits & ScriptBaseClass.RESTITUTION) == ScriptBaseClass.RESTITUTION)
m_host.Restitution = (float)restitution;
else
blocks[0].Restitution = m_host.Restitution;
if ((bits & ScriptBaseClass.GRAVITY_MULTIPLIER) == ScriptBaseClass.GRAVITY_MULTIPLIER)
m_host.GravityMultiplier = (float)gravityMultiplier;
else
blocks[0].GravityMultiplier = m_host.GravityMultiplier;
bool UsePhysics = ((m_host.Flags & PrimFlags.Physics) != 0);
bool IsTemporary = ((m_host.Flags & PrimFlags.TemporaryOnRez) != 0);
bool IsPhantom = ((m_host.Flags & PrimFlags.Phantom) != 0);
bool IsVolumeDetect = m_host.VolumeDetectActive;
blocks[0].PhysicsShapeType = m_host.PhysicsType;
if (m_host.UpdatePrimFlags(UsePhysics, IsTemporary, IsPhantom, IsVolumeDetect, blocks))
m_host.ParentEntity.RebuildPhysicalRepresentation(true);
}