aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/UbitOdePlugin/ODEMeshWorker.cs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Physics/UbitOdePlugin/ODEMeshWorker.cs43
1 files changed, 39 insertions, 4 deletions
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODEMeshWorker.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODEMeshWorker.cs
index f57149c..b0231e9 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/ODEMeshWorker.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/ODEMeshWorker.cs
@@ -29,12 +29,11 @@ namespace OpenSim.Region.Physics.OdePlugin
29 public float meshSculptLOD = 32; 29 public float meshSculptLOD = 32;
30 public float MeshSculptphysicalLOD = 32; 30 public float MeshSculptphysicalLOD = 32;
31 31
32
33 public ODEMeshWorker(OdeScene pScene, ILog pLog, IMesher pMesher, IConfig pConfig) 32 public ODEMeshWorker(OdeScene pScene, ILog pLog, IMesher pMesher, IConfig pConfig)
34 { 33 {
35 m_scene = pScene; 34 m_scene = pScene;
36 m_log = pLog; 35 m_log = pLog;
37 m_mesher = pMesher; 36 m_mesher = pMesher;
38 37
39 if (pConfig != null) 38 if (pConfig != null)
40 { 39 {
@@ -45,8 +44,6 @@ namespace OpenSim.Region.Physics.OdePlugin
45 } 44 }
46 } 45 }
47 46
48
49
50 /// <summary> 47 /// <summary>
51 /// Routine to figure out if we need to mesh this prim with our mesher 48 /// Routine to figure out if we need to mesh this prim with our mesher
52 /// </summary> 49 /// </summary>
@@ -207,9 +204,47 @@ namespace OpenSim.Region.Physics.OdePlugin
207 204
208 if(pbs.SculptData != null && pbs.SculptData.Length >0) 205 if(pbs.SculptData != null && pbs.SculptData.Length >0)
209 return m_mesher.CreateMesh(actor.Name, pbs, size, clod, true, convex); 206 return m_mesher.CreateMesh(actor.Name, pbs, size, clod, true, convex);
207
208 ODEAssetRequest asr;
209 RequestAssetDelegate assetProvider = m_scene.RequestAssetMethod;
210 if (assetProvider != null)
211 asr = new ODEAssetRequest(this, assetProvider, actor, pbs);
212 return null;
210 } 213 }
211 } 214 }
212 return mesh; 215 return mesh;
213 } 216 }
214 } 217 }
218
219 public class ODEAssetRequest
220 {
221 PhysicsActor m_actor;
222 ODEMeshWorker m_worker;
223 PrimitiveBaseShape m_pbs;
224
225 public ODEAssetRequest(ODEMeshWorker pWorker, RequestAssetDelegate provider, PhysicsActor pActor, PrimitiveBaseShape ppbs)
226 {
227 m_actor = pActor;
228 m_worker = pWorker;
229 m_pbs = ppbs;
230
231 if (provider == null)
232 return;
233
234 UUID assetID = m_pbs.SculptTexture;
235 if (assetID == UUID.Zero)
236 return;
237
238 provider(assetID, ODEassetReceived);
239 }
240
241 void ODEassetReceived(AssetBase asset)
242 {
243 if (m_actor != null && m_pbs != null && asset != null && asset.Data != null && asset.Data.Length > 0)
244 {
245 m_pbs.SculptData = asset.Data;
246 m_actor.Shape = m_pbs;
247 }
248 }
249 }
215} \ No newline at end of file 250} \ No newline at end of file