aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs113
-rw-r--r--OpenSim/Region/Physics/OdePlugin/ODEPrim.cs118
2 files changed, 190 insertions, 41 deletions
diff --git a/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs b/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs
index 6feba21..87241e1 100644
--- a/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs
+++ b/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs
@@ -141,7 +141,8 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
141 "show object uuid", 141 "show object uuid",
142 "show object uuid [--full] <UUID>", 142 "show object uuid [--full] <UUID>",
143 "Show details of a scene object with the given UUID", 143 "Show details of a scene object with the given UUID",
144 "The --full option will print out information on all the parts of the object.", 144 "The --full option will print out information on all the parts of the object.\n"
145 + "For yet more detailed part information, use the \"show part\" commands.",
145 HandleShowObjectByUuid); 146 HandleShowObjectByUuid);
146 147
147 m_console.Commands.AddCommand( 148 m_console.Commands.AddCommand(
@@ -151,6 +152,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
151 "show object name [--full] [--regex] <name>", 152 "show object name [--full] [--regex] <name>",
152 "Show details of scene objects with the given name.", 153 "Show details of scene objects with the given name.",
153 "The --full option will print out information on all the parts of the object.\n" 154 "The --full option will print out information on all the parts of the object.\n"
155 + "For yet more detailed part information, use the \"show part\" commands.\n"
154 + "If --regex is specified then the name is treatead as a regular expression.", 156 + "If --regex is specified then the name is treatead as a regular expression.",
155 HandleShowObjectByName); 157 HandleShowObjectByName);
156 158
@@ -161,6 +163,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
161 "show object pos [--full] <start-coord> to <end-coord>", 163 "show object pos [--full] <start-coord> to <end-coord>",
162 "Show details of scene objects within the given area.", 164 "Show details of scene objects within the given area.",
163 "The --full option will print out information on all the parts of the object.\n" 165 "The --full option will print out information on all the parts of the object.\n"
166 + "For yet more detailed part information, use the \"show part\" commands.\n"
164 + "Each component of the coord is comma separated. There must be no spaces between the commas.\n" 167 + "Each component of the coord is comma separated. There must be no spaces between the commas.\n"
165 + "If you don't care about the z component you can simply omit it.\n" 168 + "If you don't care about the z component you can simply omit it.\n"
166 + "If you don't care about the x or y components then you can leave them blank (though a comma is still required)\n" 169 + "If you don't care about the x or y components then you can leave them blank (though a comma is still required)\n"
@@ -242,7 +245,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
242 m_console.OutputFormat(sb.ToString()); 245 m_console.OutputFormat(sb.ToString());
243 } 246 }
244 247
245 private void OutputSopsToConsole(Predicate<SceneObjectPart> searchPredicate) 248 private void OutputSopsToConsole(Predicate<SceneObjectPart> searchPredicate, bool showFull)
246 { 249 {
247 List<SceneObjectGroup> sceneObjects = m_scene.GetSceneObjectGroups(); 250 List<SceneObjectGroup> sceneObjects = m_scene.GetSceneObjectGroups();
248 List<SceneObjectPart> parts = new List<SceneObjectPart>(); 251 List<SceneObjectPart> parts = new List<SceneObjectPart>();
@@ -253,7 +256,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
253 256
254 foreach (SceneObjectPart part in parts) 257 foreach (SceneObjectPart part in parts)
255 { 258 {
256 AddScenePartReport(sb, part); 259 AddScenePartReport(sb, part, showFull);
257 sb.Append("\n"); 260 sb.Append("\n");
258 } 261 }
259 262
@@ -362,21 +365,27 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
362 OutputSogsToConsole(searchPredicate, showFull); 365 OutputSogsToConsole(searchPredicate, showFull);
363 } 366 }
364 367
365 private void HandleShowPartByUuid(string module, string[] cmd) 368 private void HandleShowPartByUuid(string module, string[] cmdparams)
366 { 369 {
367 if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene)) 370 if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene))
368 return; 371 return;
369 372
370 if (cmd.Length < 4) 373// bool showFull = false;
374 OptionSet options = new OptionSet();
375// options.Add("full", v => showFull = v != null );
376
377 List<string> mainParams = options.Parse(cmdparams);
378
379 if (mainParams.Count < 4)
371 { 380 {
372 m_console.OutputFormat("Usage: show part uuid <uuid>"); 381 m_console.OutputFormat("Usage: show part uuid [--full] <uuid>");
373 return; 382 return;
374 } 383 }
375 384
376 UUID objectUuid; 385 UUID objectUuid;
377 if (!UUID.TryParse(cmd[3], out objectUuid)) 386 if (!UUID.TryParse(mainParams[3], out objectUuid))
378 { 387 {
379 m_console.OutputFormat("{0} is not a valid uuid", cmd[3]); 388 m_console.OutputFormat("{0} is not a valid uuid", mainParams[3]);
380 return; 389 return;
381 } 390 }
382 391
@@ -389,7 +398,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
389 } 398 }
390 399
391 StringBuilder sb = new StringBuilder(); 400 StringBuilder sb = new StringBuilder();
392 AddScenePartReport(sb, sop); 401 AddScenePartReport(sb, sop, true);
393 402
394 m_console.OutputFormat(sb.ToString()); 403 m_console.OutputFormat(sb.ToString());
395 } 404 }
@@ -399,13 +408,19 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
399 if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene)) 408 if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene))
400 return; 409 return;
401 410
402 if (cmdparams.Length < 5) 411// bool showFull = false;
412 OptionSet options = new OptionSet();
413// options.Add("full", v => showFull = v != null );
414
415 List<string> mainParams = options.Parse(cmdparams);
416
417 if (mainParams.Count < 5)
403 { 418 {
404 m_console.OutputFormat("Usage: show part pos <start-coord> to <end-coord>"); 419 m_console.OutputFormat("Usage: show part pos [--full] <start-coord> to <end-coord>");
405 return; 420 return;
406 } 421 }
407 422
408 string rawConsoleStartVector = cmdparams[3]; 423 string rawConsoleStartVector = mainParams[3];
409 Vector3 startVector; 424 Vector3 startVector;
410 425
411 if (!ConsoleUtil.TryParseConsoleMinVector(rawConsoleStartVector, out startVector)) 426 if (!ConsoleUtil.TryParseConsoleMinVector(rawConsoleStartVector, out startVector))
@@ -414,7 +429,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
414 return; 429 return;
415 } 430 }
416 431
417 string rawConsoleEndVector = cmdparams[5]; 432 string rawConsoleEndVector = mainParams[5];
418 Vector3 endVector; 433 Vector3 endVector;
419 434
420 if (!ConsoleUtil.TryParseConsoleMaxVector(rawConsoleEndVector, out endVector)) 435 if (!ConsoleUtil.TryParseConsoleMaxVector(rawConsoleEndVector, out endVector))
@@ -423,7 +438,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
423 return; 438 return;
424 } 439 }
425 440
426 OutputSopsToConsole(sop => Util.IsInsideBox(sop.AbsolutePosition, startVector, endVector)); 441 OutputSopsToConsole(sop => Util.IsInsideBox(sop.AbsolutePosition, startVector, endVector), true);
427 } 442 }
428 443
429 private void HandleShowPartByName(string module, string[] cmdparams) 444 private void HandleShowPartByName(string module, string[] cmdparams)
@@ -431,14 +446,17 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
431 if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene)) 446 if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene))
432 return; 447 return;
433 448
449// bool showFull = false;
434 bool useRegex = false; 450 bool useRegex = false;
435 OptionSet options = new OptionSet().Add("regex", v=> useRegex = v != null ); 451 OptionSet options = new OptionSet();
452// options.Add("full", v => showFull = v != null );
453 options.Add("regex", v => useRegex = v != null );
436 454
437 List<string> mainParams = options.Parse(cmdparams); 455 List<string> mainParams = options.Parse(cmdparams);
438 456
439 if (mainParams.Count < 4) 457 if (mainParams.Count < 4)
440 { 458 {
441 m_console.OutputFormat("Usage: show part name [--regex] <name>"); 459 m_console.OutputFormat("Usage: show part name [--full] [--regex] <name>");
442 return; 460 return;
443 } 461 }
444 462
@@ -456,16 +474,26 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
456 searchPredicate = sop => sop.Name == name; 474 searchPredicate = sop => sop.Name == name;
457 } 475 }
458 476
459 OutputSopsToConsole(searchPredicate); 477 OutputSopsToConsole(searchPredicate, true);
460 } 478 }
461 479
480 /// <summary>
481 /// Append a scene object report to an input StringBuilder
482 /// </summary>
483 /// <returns></returns>
484 /// <param name='sb'></param>
485 /// <param name='so'</param>
486 /// <param name='showFull'>
487 /// If true then information on all parts of an object is appended.
488 /// If false then only summary information about an object is appended.
489 /// </param>
462 private StringBuilder AddSceneObjectReport(StringBuilder sb, SceneObjectGroup so, bool showFull) 490 private StringBuilder AddSceneObjectReport(StringBuilder sb, SceneObjectGroup so, bool showFull)
463 { 491 {
464 if (showFull) 492 if (showFull)
465 { 493 {
466 foreach (SceneObjectPart sop in so.Parts) 494 foreach (SceneObjectPart sop in so.Parts)
467 { 495 {
468 AddScenePartReport(sb, sop); 496 AddScenePartReport(sb, sop, false);
469 sb.Append("\n"); 497 sb.Append("\n");
470 } 498 }
471 } 499 }
@@ -491,7 +519,17 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
491 return sb.Append(cdl.ToString()); 519 return sb.Append(cdl.ToString());
492 } 520 }
493 521
494 private StringBuilder AddScenePartReport(StringBuilder sb, SceneObjectPart sop) 522 /// <summary>
523 /// Append a scene object part report to an input StringBuilder
524 /// </summary>
525 /// <returns></returns>
526 /// <param name='sb'></param>
527 /// <param name='sop'</param>
528 /// <param name='showFull'>
529 /// If true then information on each inventory item will be shown.
530 /// If false then only summary inventory information is shown.
531 /// </param>
532 private StringBuilder AddScenePartReport(StringBuilder sb, SceneObjectPart sop, bool showFull)
495 { 533 {
496 ConsoleDisplayList cdl = new ConsoleDisplayList(); 534 ConsoleDisplayList cdl = new ConsoleDisplayList();
497 cdl.AddRow("Name", sop.Name); 535 cdl.AddRow("Name", sop.Name);
@@ -504,11 +542,46 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
504 sop.IsRoot ? "Is Root" : string.Format("{0} {1}", sop.ParentGroup.Name, sop.ParentGroup.UUID)); 542 sop.IsRoot ? "Is Root" : string.Format("{0} {1}", sop.ParentGroup.Name, sop.ParentGroup.UUID));
505 cdl.AddRow("Link number", sop.LinkNum); 543 cdl.AddRow("Link number", sop.LinkNum);
506 cdl.AddRow("Flags", sop.Flags); 544 cdl.AddRow("Flags", sop.Flags);
507 cdl.AddRow("Items", sop.Inventory.Count); 545
546 object itemsOutput;
547 if (showFull)
548 {
549 StringBuilder itemsSb = new StringBuilder("\n");
550 itemsOutput = AddScenePartItemsReport(itemsSb, sop.Inventory).ToString();
551 }
552 else
553 {
554 itemsOutput = sop.Inventory.Count;
555 }
556
557
558 cdl.AddRow("Items", itemsOutput);
508 559
509 return sb.Append(cdl.ToString()); 560 return sb.Append(cdl.ToString());
510 } 561 }
511 562
563 private StringBuilder AddScenePartItemsReport(StringBuilder sb, IEntityInventory inv)
564 {
565 ConsoleDisplayTable cdt = new ConsoleDisplayTable();
566 cdt.Indent = 2;
567
568 cdt.AddColumn("Name", 50);
569 cdt.AddColumn("Type", 12);
570 cdt.AddColumn("Running", 7);
571 cdt.AddColumn("Item UUID", 36);
572 cdt.AddColumn("Asset UUID", 36);
573
574 foreach (TaskInventoryItem item in inv.GetInventoryItems())
575 cdt.AddRow(
576 item.Name,
577 ((InventoryType)item.InvType).ToString(),
578 (InventoryType)item.InvType == InventoryType.LSL ? item.ScriptRunning.ToString() : "n/a",
579 item.ItemID.ToString(),
580 item.AssetID.ToString());
581
582 return sb.Append(cdt.ToString());
583 }
584
512 private void HandleDeleteObject(string module, string[] cmd) 585 private void HandleDeleteObject(string module, string[] cmd)
513 { 586 {
514 if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene)) 587 if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene))
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index 7a0857f..a3bb72c 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -341,8 +341,17 @@ namespace OpenSim.Region.Physics.OdePlugin
341 prim_geom = geom; 341 prim_geom = geom;
342//Console.WriteLine("SetGeom to " + prim_geom + " for " + Name); 342//Console.WriteLine("SetGeom to " + prim_geom + " for " + Name);
343 343
344 d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories); 344 if (m_assetFailed)
345 d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); 345 {
346 d.GeomSetCategoryBits(prim_geom, 0);
347 d.GeomSetCollideBits(prim_geom, 0);
348 }
349 else
350 {
351
352 d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
353 d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
354 }
346 355
347 _parent_scene.geom_name_map[prim_geom] = Name; 356 _parent_scene.geom_name_map[prim_geom] = Name;
348 _parent_scene.actor_name_map[prim_geom] = this; 357 _parent_scene.actor_name_map[prim_geom] = this;
@@ -405,8 +414,17 @@ namespace OpenSim.Region.Physics.OdePlugin
405 myrot.W = _orientation.W; 414 myrot.W = _orientation.W;
406 d.BodySetQuaternion(Body, ref myrot); 415 d.BodySetQuaternion(Body, ref myrot);
407 d.GeomSetBody(prim_geom, Body); 416 d.GeomSetBody(prim_geom, Body);
408 m_collisionCategories |= CollisionCategories.Body; 417
409 m_collisionFlags |= (CollisionCategories.Land | CollisionCategories.Wind); 418 if (m_assetFailed)
419 {
420 d.GeomSetCategoryBits(prim_geom, 0);
421 d.GeomSetCollideBits(prim_geom, 0);
422 }
423 else
424 {
425 m_collisionCategories |= CollisionCategories.Body;
426 m_collisionFlags |= (CollisionCategories.Land | CollisionCategories.Wind);
427 }
410 428
411 d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories); 429 d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
412 d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); 430 d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
@@ -778,8 +796,16 @@ namespace OpenSim.Region.Physics.OdePlugin
778 m_collisionCategories &= ~CollisionCategories.Body; 796 m_collisionCategories &= ~CollisionCategories.Body;
779 m_collisionFlags &= ~(CollisionCategories.Wind | CollisionCategories.Land); 797 m_collisionFlags &= ~(CollisionCategories.Wind | CollisionCategories.Land);
780 798
781 d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories); 799 if (m_assetFailed)
782 d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); 800 {
801 d.GeomSetCategoryBits(prim_geom, 0);
802 d.GeomSetCollideBits(prim_geom, 0);
803 }
804 else
805 {
806 d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
807 d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
808 }
783 809
784 d.BodyDestroy(Body); 810 d.BodyDestroy(Body);
785 lock (childrenPrim) 811 lock (childrenPrim)
@@ -803,8 +829,17 @@ namespace OpenSim.Region.Physics.OdePlugin
803 m_collisionCategories &= ~CollisionCategories.Body; 829 m_collisionCategories &= ~CollisionCategories.Body;
804 m_collisionFlags &= ~(CollisionCategories.Wind | CollisionCategories.Land); 830 m_collisionFlags &= ~(CollisionCategories.Wind | CollisionCategories.Land);
805 831
806 d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories); 832 if (m_assetFailed)
807 d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); 833 {
834 d.GeomSetCategoryBits(prim_geom, 0);
835 d.GeomSetCollideBits(prim_geom, 0);
836 }
837 else
838 {
839
840 d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
841 d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
842 }
808 843
809 Body = IntPtr.Zero; 844 Body = IntPtr.Zero;
810 } 845 }
@@ -1094,8 +1129,16 @@ Console.WriteLine("ZProcessTaints for " + Name);
1094 prm.m_collisionFlags |= (CollisionCategories.Land | CollisionCategories.Wind); 1129 prm.m_collisionFlags |= (CollisionCategories.Land | CollisionCategories.Wind);
1095 1130
1096//Console.WriteLine(" GeomSetCategoryBits 1: " + prm.prim_geom + " - " + (int)prm.m_collisionCategories + " for " + Name); 1131//Console.WriteLine(" GeomSetCategoryBits 1: " + prm.prim_geom + " - " + (int)prm.m_collisionCategories + " for " + Name);
1097 d.GeomSetCategoryBits(prm.prim_geom, (int)prm.m_collisionCategories); 1132 if (prm.m_assetFailed)
1098 d.GeomSetCollideBits(prm.prim_geom, (int)prm.m_collisionFlags); 1133 {
1134 d.GeomSetCategoryBits(prm.prim_geom, 0);
1135 d.GeomSetCollideBits(prm.prim_geom, 0);
1136 }
1137 else
1138 {
1139 d.GeomSetCategoryBits(prm.prim_geom, (int)prm.m_collisionCategories);
1140 d.GeomSetCollideBits(prm.prim_geom, (int)prm.m_collisionFlags);
1141 }
1099 1142
1100 d.Quaternion quat = new d.Quaternion(); 1143 d.Quaternion quat = new d.Quaternion();
1101 quat.W = prm._orientation.W; 1144 quat.W = prm._orientation.W;
@@ -1140,10 +1183,18 @@ Console.WriteLine("ZProcessTaints for " + Name);
1140 m_collisionCategories |= CollisionCategories.Body; 1183 m_collisionCategories |= CollisionCategories.Body;
1141 m_collisionFlags |= (CollisionCategories.Land | CollisionCategories.Wind); 1184 m_collisionFlags |= (CollisionCategories.Land | CollisionCategories.Wind);
1142 1185
1143//Console.WriteLine("GeomSetCategoryBits 2: " + prim_geom + " - " + (int)m_collisionCategories + " for " + Name); 1186 if (m_assetFailed)
1144 d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories); 1187 {
1145//Console.WriteLine(" Post GeomSetCategoryBits 2"); 1188 d.GeomSetCategoryBits(prim_geom, 0);
1146 d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); 1189 d.GeomSetCollideBits(prim_geom, 0);
1190 }
1191 else
1192 {
1193 //Console.WriteLine("GeomSetCategoryBits 2: " + prim_geom + " - " + (int)m_collisionCategories + " for " + Name);
1194 d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
1195 //Console.WriteLine(" Post GeomSetCategoryBits 2");
1196 d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
1197 }
1147 1198
1148 d.Quaternion quat2 = new d.Quaternion(); 1199 d.Quaternion quat2 = new d.Quaternion();
1149 quat2.W = _orientation.W; 1200 quat2.W = _orientation.W;
@@ -1304,8 +1355,16 @@ Console.WriteLine("ZProcessTaints for " + Name);
1304 disableBodySoft(); 1355 disableBodySoft();
1305 } 1356 }
1306 1357
1307 d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories); 1358 if (m_assetFailed)
1308 d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); 1359 {
1360 d.GeomSetCategoryBits(prim_geom, 0);
1361 d.GeomSetCollideBits(prim_geom, 0);
1362 }
1363 else
1364 {
1365 d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
1366 d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
1367 }
1309 1368
1310 if (IsPhysical) 1369 if (IsPhysical)
1311 { 1370 {
@@ -1326,8 +1385,16 @@ Console.WriteLine("ZProcessTaints for " + Name);
1326 if (m_collidesWater) 1385 if (m_collidesWater)
1327 m_collisionFlags |= CollisionCategories.Water; 1386 m_collisionFlags |= CollisionCategories.Water;
1328 1387
1329 d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories); 1388 if (m_assetFailed)
1330 d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); 1389 {
1390 d.GeomSetCategoryBits(prim_geom, 0);
1391 d.GeomSetCollideBits(prim_geom, 0);
1392 }
1393 else
1394 {
1395 d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories);
1396 d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
1397 }
1331 1398
1332 if (IsPhysical) 1399 if (IsPhysical)
1333 { 1400 {
@@ -1504,6 +1571,8 @@ Console.WriteLine("CreateGeom:");
1504 // m_log.Debug(m_localID); 1571 // m_log.Debug(m_localID);
1505 if (mesh == null) 1572 if (mesh == null)
1506 CheckMeshAsset(); 1573 CheckMeshAsset();
1574 else
1575 m_assetFailed = false;
1507 } 1576 }
1508 1577
1509#if SPAM 1578#if SPAM
@@ -2007,6 +2076,8 @@ Console.WriteLine(" JointCreateFixed");
2007 mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, meshlod, IsPhysical); 2076 mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, meshlod, IsPhysical);
2008 if (mesh == null) 2077 if (mesh == null)
2009 CheckMeshAsset(); 2078 CheckMeshAsset();
2079 else
2080 m_assetFailed = false;
2010 } 2081 }
2011 2082
2012 } 2083 }
@@ -2060,9 +2131,12 @@ Console.WriteLine(" JointCreateFixed");
2060 m_collisionFlags &= ~CollisionCategories.Water; 2131 m_collisionFlags &= ~CollisionCategories.Water;
2061 } 2132 }
2062 2133
2063 d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); 2134 if (m_assetFailed)
2064 } 2135 d.GeomSetCollideBits(prim_geom, 0);
2136 else
2065 2137
2138 d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags);
2139 }
2066 /// <summary> 2140 /// <summary>
2067 /// Change prim in response to a shape taint. 2141 /// Change prim in response to a shape taint.
2068 /// </summary> 2142 /// </summary>
@@ -2110,6 +2184,8 @@ Console.WriteLine(" JointCreateFixed");
2110 mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, meshlod, IsPhysical); 2184 mesh = _parent_scene.mesher.CreateMesh(Name, _pbs, _size, meshlod, IsPhysical);
2111 if (mesh == null) 2185 if (mesh == null)
2112 CheckMeshAsset(); 2186 CheckMeshAsset();
2187 else
2188 m_assetFailed = false;
2113 } 2189 }
2114 2190
2115 CreateGeom(m_targetSpace, mesh); 2191 CreateGeom(m_targetSpace, mesh);
@@ -3278,7 +3354,7 @@ Console.WriteLine(" JointCreateFixed");
3278 3354
3279 _pbs.SculptData = new byte[asset.Data.Length]; 3355 _pbs.SculptData = new byte[asset.Data.Length];
3280 asset.Data.CopyTo(_pbs.SculptData, 0); 3356 asset.Data.CopyTo(_pbs.SculptData, 0);
3281 m_assetFailed = false; 3357// m_assetFailed = false;
3282 m_taintshape = true; 3358 m_taintshape = true;
3283 _parent_scene.AddPhysicsActorTaint(this); 3359 _parent_scene.AddPhysicsActorTaint(this);
3284 } 3360 }