Fix physics proxy regeneration when a mesh with more than one submesh is resized
Addresses http://opensimulator.org/mantis/view.php?id=5584bulletsim
parent
7247ca1644
commit
18652eb87e
|
@ -2662,13 +2662,18 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
SceneObjectPart part = GetChildPart(localID);
|
||||
if (part != null)
|
||||
{
|
||||
// m_log.DebugFormat(
|
||||
// "[SCENE OBJECT GROUP]: Group resizing {0} {1} from {2} to {3}", Name, localID, part.Scale, scale);
|
||||
|
||||
part.IgnoreUndoUpdate = true;
|
||||
|
||||
if (scale.X > m_scene.m_maxNonphys)
|
||||
scale.X = m_scene.m_maxNonphys;
|
||||
if (scale.Y > m_scene.m_maxNonphys)
|
||||
scale.Y = m_scene.m_maxNonphys;
|
||||
if (scale.Z > m_scene.m_maxNonphys)
|
||||
scale.Z = m_scene.m_maxNonphys;
|
||||
|
||||
if (part.PhysActor != null && part.PhysActor.IsPhysical)
|
||||
{
|
||||
if (scale.X > m_scene.m_maxPhys)
|
||||
|
@ -2780,7 +2785,14 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
newSize.Z *= z;
|
||||
obPart.Resize(newSize);
|
||||
obPart.UpdateOffSet(currentpos);
|
||||
|
||||
if (obPart.PhysActor != null)
|
||||
{
|
||||
obPart.PhysActor.Size = newSize;
|
||||
m_scene.PhysicsScene.AddPhysicsActorTaint(obPart.PhysActor);
|
||||
}
|
||||
}
|
||||
|
||||
obPart.IgnoreUndoUpdate = false;
|
||||
obPart.StoreUndoState();
|
||||
}
|
||||
|
|
|
@ -2839,6 +2839,8 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// <param name="scale"></param>
|
||||
public void Resize(Vector3 scale)
|
||||
{
|
||||
// m_log.DebugFormat("[SCENE OBJECT PART]: Resizing {0} {1} to {2}", Name, LocalId, scale);
|
||||
|
||||
StoreUndoState();
|
||||
m_shape.Scale = scale;
|
||||
|
||||
|
@ -2976,6 +2978,11 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets sculpt and mesh data, and tells the physics engine to process the change.
|
||||
/// </summary>
|
||||
/// <param name="textureID">Texture id of the mesh. XXX: Redundant since this is also in AssetBase</param>
|
||||
/// <param name="texture">The mesh itself.</param>
|
||||
public void SculptTextureCallback(UUID textureID, AssetBase texture)
|
||||
{
|
||||
if (m_shape.SculptEntry)
|
||||
|
@ -4613,7 +4620,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// </remarks>
|
||||
public void CheckSculptAndLoad()
|
||||
{
|
||||
// m_log.Debug("Processing CheckSculptAndLoad for {0} {1}", Name, LocalId);
|
||||
// m_log.DebugFormat("Processing CheckSculptAndLoad for {0} {1}", Name, LocalId);
|
||||
|
||||
if (ParentGroup.IsDeleted)
|
||||
return;
|
||||
|
|
|
@ -303,6 +303,10 @@ namespace OpenSim.Region.Physics.Meshing
|
|||
|
||||
private Mesh CreateMeshFromPrimMesher(string primName, PrimitiveBaseShape primShape, Vector3 size, float lod)
|
||||
{
|
||||
// m_log.DebugFormat(
|
||||
// "[MESH]: Creating physics proxy for {0}, shape {1}",
|
||||
// primName, (OpenMetaverse.SculptType)primShape.SculptType);
|
||||
|
||||
PrimMesh primMesh;
|
||||
PrimMesher.SculptMesh sculptMesh;
|
||||
|
||||
|
@ -668,7 +672,6 @@ namespace OpenSim.Region.Physics.Meshing
|
|||
|
||||
// If this mesh has been created already, return it instead of creating another copy
|
||||
// For large regions with 100k+ prims and hundreds of copies of each, this can save a GB or more of memory
|
||||
|
||||
key = GetMeshKey(primShape, size, lod);
|
||||
if (m_uniqueMeshes.TryGetValue(key, out mesh))
|
||||
return mesh;
|
||||
|
|
|
@ -2284,6 +2284,7 @@ Console.WriteLine("changeshape not need meshing");
|
|||
if (value.IsFinite())
|
||||
{
|
||||
_size = value;
|
||||
// m_log.DebugFormat("[PHYSICS]: Set size on {0} to {1}", Name, value);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue