mirror of
https://github.com/opensim/opensim.git
synced 2026-08-05 17:05:55 +08:00
mantis 7941: change llCollisionFilter code
This commit is contained in:
@@ -232,7 +232,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
[XmlIgnore]
|
||||
public int STATUS_ROTATE_Z; // this should not be used
|
||||
|
||||
private Dictionary<int, string> m_CollisionFilter = new Dictionary<int, string>();
|
||||
private int m_CollisionFilterType = 0; // -1 not in use, 0 accept false, 1 accept true
|
||||
private string m_CollisionFilterString = string.Empty;
|
||||
|
||||
/// <value>
|
||||
/// The UUID of the user inventory item from which this object was rezzed if this is a root part.
|
||||
@@ -683,15 +684,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
}
|
||||
}
|
||||
|
||||
public Dictionary<int, string> CollisionFilter
|
||||
{
|
||||
get { return m_CollisionFilter; }
|
||||
set
|
||||
{
|
||||
m_CollisionFilter = value;
|
||||
}
|
||||
}
|
||||
|
||||
protected bool APIDActive
|
||||
{
|
||||
get { return m_APIDActive; }
|
||||
@@ -2690,24 +2682,67 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
{
|
||||
}
|
||||
|
||||
public void SetCollisionFilter(bool access, string name, string id)
|
||||
{
|
||||
if(string.IsNullOrEmpty(id))
|
||||
{
|
||||
if (string.IsNullOrEmpty(name))
|
||||
{
|
||||
m_CollisionFilterString = string.Empty;
|
||||
m_CollisionFilterType = access ? 0 : -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_CollisionFilterString = name;
|
||||
m_CollisionFilterType = access ? 11 : 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (string.IsNullOrEmpty(name))
|
||||
{
|
||||
m_CollisionFilterString = id;
|
||||
m_CollisionFilterType = access ? 12 : 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_CollisionFilterString = name + id;
|
||||
m_CollisionFilterType = access ? 13 : 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void ClearCollisionFilter()
|
||||
{
|
||||
m_CollisionFilterType = 0;
|
||||
m_CollisionFilterString = string.Empty;
|
||||
}
|
||||
|
||||
public bool CollisionFilteredOut(UUID objectID, string objectName)
|
||||
{
|
||||
if(CollisionFilter.Count == 0)
|
||||
return false;
|
||||
|
||||
if (CollisionFilter.ContainsValue(objectID.ToString()) ||
|
||||
CollisionFilter.ContainsValue(objectID.ToString() + objectName) ||
|
||||
CollisionFilter.ContainsValue(UUID.Zero.ToString() + objectName))
|
||||
switch(m_CollisionFilterType)
|
||||
{
|
||||
if (CollisionFilter.ContainsKey(1))
|
||||
case 0: // not set
|
||||
return false;
|
||||
case -1: // disable all
|
||||
return true;
|
||||
|
||||
case 1: // false by name
|
||||
return m_CollisionFilterString.Equals(objectName, StringComparison.InvariantCultureIgnoreCase);
|
||||
case 2: // false by id
|
||||
return m_CollisionFilterString.Equals(objectID.ToString(), StringComparison.InvariantCultureIgnoreCase);
|
||||
case 3: // false by name and id
|
||||
return m_CollisionFilterString.Equals(objectName + objectID.ToString(), StringComparison.InvariantCultureIgnoreCase);
|
||||
case 11: // true by name
|
||||
return !m_CollisionFilterString.Equals(objectName, StringComparison.InvariantCultureIgnoreCase);
|
||||
case 12: // true by id
|
||||
return !m_CollisionFilterString.Equals(objectID.ToString(), StringComparison.InvariantCultureIgnoreCase);
|
||||
case 13: // true by name and id
|
||||
return !m_CollisionFilterString.Equals(objectName + objectID.ToString(), StringComparison.InvariantCultureIgnoreCase);
|
||||
|
||||
default:
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (CollisionFilter.ContainsKey(1))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
|
||||
@@ -3166,9 +3201,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
minsize = ParentGroup.Scene.m_minPhys;
|
||||
maxsize = ParentGroup.Scene.m_maxPhys;
|
||||
}
|
||||
scale.X = Util.Clamp(scale.X, minsize, maxsize);
|
||||
scale.Y = Util.Clamp(scale.Y, minsize, maxsize);
|
||||
scale.Z = Util.Clamp(scale.Z, minsize, maxsize);
|
||||
scale.X = Utils.Clamp(scale.X, minsize, maxsize);
|
||||
scale.Y = Utils.Clamp(scale.Y, minsize, maxsize);
|
||||
scale.Z = Utils.Clamp(scale.Z, minsize, maxsize);
|
||||
}
|
||||
// m_log.DebugFormat("[SCENE OBJECT PART]: Resizing {0} {1} to {2}", Name, LocalId, scale);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user