Enforce physical prim max size on single prims.
Also convert a lock() to ReaderWriterLockSlim that i missed in the last commitavinationmerge
parent
9888f95068
commit
2e6dce434f
|
@ -2871,11 +2871,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
scale.Y = m_scene.m_maxNonphys;
|
scale.Y = m_scene.m_maxNonphys;
|
||||||
if (scale.Z > m_scene.m_maxNonphys)
|
if (scale.Z > m_scene.m_maxNonphys)
|
||||||
scale.Z = m_scene.m_maxNonphys;
|
scale.Z = m_scene.m_maxNonphys;
|
||||||
|
|
||||||
SceneObjectPart part = GetChildPart(localID);
|
SceneObjectPart part = GetChildPart(localID);
|
||||||
if (part != null)
|
if (part != null)
|
||||||
{
|
{
|
||||||
part.Resize(scale);
|
|
||||||
if (part.PhysActor != null)
|
if (part.PhysActor != null)
|
||||||
{
|
{
|
||||||
if (part.PhysActor.IsPhysical)
|
if (part.PhysActor.IsPhysical)
|
||||||
|
@ -2890,7 +2888,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
part.PhysActor.Size = scale;
|
part.PhysActor.Size = scale;
|
||||||
m_scene.PhysicsScene.AddPhysicsActorTaint(part.PhysActor);
|
m_scene.PhysicsScene.AddPhysicsActorTaint(part.PhysActor);
|
||||||
}
|
}
|
||||||
//if (part.UUID != m_rootPart.UUID)
|
part.Resize(scale);
|
||||||
|
|
||||||
HasGroupChanged = true;
|
HasGroupChanged = true;
|
||||||
ScheduleGroupForFullUpdate();
|
ScheduleGroupForFullUpdate();
|
||||||
|
@ -2931,77 +2929,76 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
float y = (scale.Y / part.Scale.Y);
|
float y = (scale.Y / part.Scale.Y);
|
||||||
float z = (scale.Z / part.Scale.Z);
|
float z = (scale.Z / part.Scale.Z);
|
||||||
|
|
||||||
lock (m_parts)
|
lockPartsForRead(true);
|
||||||
|
if (x > 1.0f || y > 1.0f || z > 1.0f)
|
||||||
{
|
{
|
||||||
if (x > 1.0f || y > 1.0f || z > 1.0f)
|
foreach (SceneObjectPart obPart in m_parts.Values)
|
||||||
{
|
{
|
||||||
foreach (SceneObjectPart obPart in m_parts.Values)
|
if (obPart.UUID != m_rootPart.UUID)
|
||||||
{
|
{
|
||||||
if (obPart.UUID != m_rootPart.UUID)
|
Vector3 oldSize = new Vector3(obPart.Scale);
|
||||||
|
|
||||||
|
float f = 1.0f;
|
||||||
|
float a = 1.0f;
|
||||||
|
|
||||||
|
if (part.PhysActor != null && part.PhysActor.IsPhysical)
|
||||||
{
|
{
|
||||||
Vector3 oldSize = new Vector3(obPart.Scale);
|
if (oldSize.X*x > m_scene.m_maxPhys)
|
||||||
|
|
||||||
float f = 1.0f;
|
|
||||||
float a = 1.0f;
|
|
||||||
|
|
||||||
if (part.PhysActor != null && part.PhysActor.IsPhysical)
|
|
||||||
{
|
{
|
||||||
if (oldSize.X*x > m_scene.m_maxPhys)
|
f = m_scene.m_maxPhys / oldSize.X;
|
||||||
{
|
a = f / x;
|
||||||
f = m_scene.m_maxPhys / oldSize.X;
|
x *= a;
|
||||||
a = f / x;
|
y *= a;
|
||||||
x *= a;
|
z *= a;
|
||||||
y *= a;
|
|
||||||
z *= a;
|
|
||||||
}
|
|
||||||
if (oldSize.Y*y > m_scene.m_maxPhys)
|
|
||||||
{
|
|
||||||
f = m_scene.m_maxPhys / oldSize.Y;
|
|
||||||
a = f / y;
|
|
||||||
x *= a;
|
|
||||||
y *= a;
|
|
||||||
z *= a;
|
|
||||||
}
|
|
||||||
if (oldSize.Z*z > m_scene.m_maxPhys)
|
|
||||||
{
|
|
||||||
f = m_scene.m_maxPhys / oldSize.Z;
|
|
||||||
a = f / z;
|
|
||||||
x *= a;
|
|
||||||
y *= a;
|
|
||||||
z *= a;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
if (oldSize.Y*y > m_scene.m_maxPhys)
|
||||||
{
|
{
|
||||||
if (oldSize.X*x > m_scene.m_maxNonphys)
|
f = m_scene.m_maxPhys / oldSize.Y;
|
||||||
{
|
a = f / y;
|
||||||
f = m_scene.m_maxNonphys / oldSize.X;
|
x *= a;
|
||||||
a = f / x;
|
y *= a;
|
||||||
x *= a;
|
z *= a;
|
||||||
y *= a;
|
}
|
||||||
z *= a;
|
if (oldSize.Z*z > m_scene.m_maxPhys)
|
||||||
}
|
{
|
||||||
if (oldSize.Y*y > m_scene.m_maxNonphys)
|
f = m_scene.m_maxPhys / oldSize.Z;
|
||||||
{
|
a = f / z;
|
||||||
f = m_scene.m_maxNonphys / oldSize.Y;
|
x *= a;
|
||||||
a = f / y;
|
y *= a;
|
||||||
x *= a;
|
z *= a;
|
||||||
y *= a;
|
}
|
||||||
z *= a;
|
}
|
||||||
}
|
else
|
||||||
if (oldSize.Z*z > m_scene.m_maxNonphys)
|
{
|
||||||
{
|
if (oldSize.X*x > m_scene.m_maxNonphys)
|
||||||
f = m_scene.m_maxNonphys / oldSize.Z;
|
{
|
||||||
a = f / z;
|
f = m_scene.m_maxNonphys / oldSize.X;
|
||||||
x *= a;
|
a = f / x;
|
||||||
y *= a;
|
x *= a;
|
||||||
z *= a;
|
y *= a;
|
||||||
}
|
z *= a;
|
||||||
|
}
|
||||||
|
if (oldSize.Y*y > m_scene.m_maxNonphys)
|
||||||
|
{
|
||||||
|
f = m_scene.m_maxNonphys / oldSize.Y;
|
||||||
|
a = f / y;
|
||||||
|
x *= a;
|
||||||
|
y *= a;
|
||||||
|
z *= a;
|
||||||
|
}
|
||||||
|
if (oldSize.Z*z > m_scene.m_maxNonphys)
|
||||||
|
{
|
||||||
|
f = m_scene.m_maxNonphys / oldSize.Z;
|
||||||
|
a = f / z;
|
||||||
|
x *= a;
|
||||||
|
y *= a;
|
||||||
|
z *= a;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
lockPartsForRead(false);
|
||||||
|
|
||||||
Vector3 prevScale = part.Scale;
|
Vector3 prevScale = part.Scale;
|
||||||
prevScale.X *= x;
|
prevScale.X *= x;
|
||||||
|
|
Loading…
Reference in New Issue