refactor: push the part of SceneObjectGroup.CheckSculptAndLoad() that actually deals with the part into a SceneObjectPart.CheckSculptAndLoad() method

bulletsim
Justin Clark-Casey (justincc) 2011-07-11 03:35:29 +01:00
parent 2f3d0e209f
commit 0badf3718d
2 changed files with 49 additions and 17 deletions

View File

@ -3289,6 +3289,13 @@ namespace OpenSim.Region.Framework.Scenes
return retmass; return retmass;
} }
/// <summary>
/// If the object is a sculpt/mesh, retrieve the mesh data for each part and reinsert it into each shape so that
/// the physics engine can use it.
/// </summary>
/// <remarks>
/// When the physics engine has finished with it, the sculpt data is discarded to save memory.
/// </remarks>
public void CheckSculptAndLoad() public void CheckSculptAndLoad()
{ {
if (IsDeleted) if (IsDeleted)
@ -3302,24 +3309,15 @@ namespace OpenSim.Region.Framework.Scenes
SceneObjectPart[] parts = m_parts.GetArray(); SceneObjectPart[] parts = m_parts.GetArray();
for (int i = 0; i < parts.Length; i++) for (int i = 0; i < parts.Length; i++)
{ parts[i].CheckSculptAndLoad();
SceneObjectPart part = parts[i];
if (part.Shape.SculptEntry && part.Shape.SculptTexture != UUID.Zero)
{
// check if a previously decoded sculpt map has been cached
if (File.Exists(System.IO.Path.Combine("j2kDecodeCache", "smap_" + part.Shape.SculptTexture.ToString())))
{
part.SculptTextureCallback(part.Shape.SculptTexture, null);
}
else
{
m_scene.AssetService.Get(
part.Shape.SculptTexture.ToString(), part, AssetReceived);
}
}
}
} }
/// <summary>
/// Handle an asset received asynchronously from the asset service.
/// </summary>
/// <param name="id"></param>
/// <param name="sender"></param>
/// <param name="asset"></param>
protected void AssetReceived(string id, Object sender, AssetBase asset) protected void AssetReceived(string id, Object sender, AssetBase asset)
{ {
SceneObjectPart sop = (SceneObjectPart)sender; SceneObjectPart sop = (SceneObjectPart)sender;

View File

@ -28,6 +28,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.IO;
using System.Reflection; using System.Reflection;
using System.Runtime.Serialization; using System.Runtime.Serialization;
using System.Security.Permissions; using System.Security.Permissions;
@ -4563,6 +4564,7 @@ namespace OpenSim.Region.Framework.Scenes
m_shape.PathTaperY = shapeBlock.PathTaperY; m_shape.PathTaperY = shapeBlock.PathTaperY;
m_shape.PathTwist = shapeBlock.PathTwist; m_shape.PathTwist = shapeBlock.PathTwist;
m_shape.PathTwistBegin = shapeBlock.PathTwistBegin; m_shape.PathTwistBegin = shapeBlock.PathTwistBegin;
if (PhysActor != null) if (PhysActor != null)
{ {
PhysActor.Shape = m_shape; PhysActor.Shape = m_shape;
@ -4583,6 +4585,37 @@ namespace OpenSim.Region.Framework.Scenes
ScheduleFullUpdate(); ScheduleFullUpdate();
} }
/// <summary>
/// If the part is a sculpt/mesh, retrieve the mesh data and reinsert it into the shape so that the physics
/// engine can use it.
/// </summary>
/// <remarks>
/// When the physics engine has finished with it, the sculpt data is discarded to save memory.
/// </remarks>
public void CheckSculptAndLoad()
{
// m_log.Debug("Processing CheckSculptAndLoad for {0} {1}", Name, LocalId);
if (ParentGroup.IsDeleted)
return;
if ((ParentGroup.RootPart.GetEffectiveObjectFlags() & (uint)PrimFlags.Phantom) != 0)
return;
if (Shape.SculptEntry && Shape.SculptTexture != UUID.Zero)
{
// check if a previously decoded sculpt map has been cached
if (File.Exists(System.IO.Path.Combine("j2kDecodeCache", "smap_" + Shape.SculptTexture.ToString())))
{
SculptTextureCallback(Shape.SculptTexture, null);
}
else
{
ParentGroup.Scene.AssetService.Get(Shape.SculptTexture.ToString(), this, AssetReceived);
}
}
}
/// <summary> /// <summary>
/// Update the textures on the part. /// Update the textures on the part.
/// </summary> /// </summary>
@ -4819,6 +4852,7 @@ namespace OpenSim.Region.Framework.Scenes
Inventory.ApplyNextOwnerPermissions(); Inventory.ApplyNextOwnerPermissions();
} }
public void UpdateLookAt() public void UpdateLookAt()
{ {
try try