diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs | 113 | ||||
-rw-r--r-- | OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 118 |
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 | } |