diff options
Diffstat (limited to 'OpenSim/Region/Physics/BulletSPlugin/BSScene.cs')
-rw-r--r-- | OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | 118 |
1 files changed, 103 insertions, 15 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs index e9a849c..581d540 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs | |||
@@ -37,14 +37,18 @@ using OpenMetaverse; | |||
37 | using OpenSim.Region.Framework; | 37 | using OpenSim.Region.Framework; |
38 | 38 | ||
39 | // TODOs for BulletSim (for BSScene, BSPrim, BSCharacter and BulletSim) | 39 | // TODOs for BulletSim (for BSScene, BSPrim, BSCharacter and BulletSim) |
40 | // Debug linkset | ||
41 | // Test with multiple regions in one simulator | ||
40 | // Adjust character capsule size when height is adjusted (ScenePresence.SetHeight) | 42 | // Adjust character capsule size when height is adjusted (ScenePresence.SetHeight) |
41 | // Test sculpties | 43 | // Test sculpties |
42 | // Compute physics FPS reasonably | 44 | // Compute physics FPS reasonably |
43 | // Based on material, set density and friction | 45 | // Based on material, set density and friction |
44 | // More efficient memory usage in passing hull information from BSPrim to BulletSim | 46 | // More efficient memory usage when passing hull information from BSPrim to BulletSim |
45 | // Four states of prim: Physical, regular, phantom and selected. Are we modeling these correctly? | 47 | // Four states of prim: Physical, regular, phantom and selected. Are we modeling these correctly? |
46 | // In SL one can set both physical and phantom (gravity, does not effect others, makes collisions with ground) | 48 | // In SL one can set both physical and phantom (gravity, does not effect others, makes collisions with ground) |
47 | // At the moment, physical and phantom causes object to drop through the terrain | 49 | // At the moment, physical and phantom causes object to drop through the terrain |
50 | // Physical phantom objects and related typing (collision options ) | ||
51 | // Check out llVolumeDetect. Must do something for that. | ||
48 | // Should prim.link() and prim.delink() membership checking happen at taint time? | 52 | // Should prim.link() and prim.delink() membership checking happen at taint time? |
49 | // Mesh sharing. Use meshHash to tell if we already have a hull of that shape and only create once | 53 | // Mesh sharing. Use meshHash to tell if we already have a hull of that shape and only create once |
50 | // Do attachments need to be handled separately? Need collision events. Do not collide with VolumeDetect | 54 | // Do attachments need to be handled separately? Need collision events. Do not collide with VolumeDetect |
@@ -52,6 +56,16 @@ using OpenSim.Region.Framework; | |||
52 | // Implement LockAngularMotion | 56 | // Implement LockAngularMotion |
53 | // Decide if clearing forces is the right thing to do when setting position (BulletSim::SetObjectTranslation) | 57 | // Decide if clearing forces is the right thing to do when setting position (BulletSim::SetObjectTranslation) |
54 | // Does NeedsMeshing() really need to exclude all the different shapes? | 58 | // Does NeedsMeshing() really need to exclude all the different shapes? |
59 | // Remove mesh and Hull stuff. Use mesh passed to bullet and use convexdecom from bullet. | ||
60 | // Add PID movement operations. What does ScenePresence.MoveToTarget do? | ||
61 | // Check terrain size. 128 or 127? | ||
62 | // Multiple contact points on collision? | ||
63 | // See code in ode::near... calls to collision_accounting_events() | ||
64 | // (This might not be a problem. ODE collects all the collisions with one object in one tick.) | ||
65 | // Use collision masks for collision with terrain and phantom objects | ||
66 | // Figure out how to not allocate a new Dictionary and List for every collision | ||
67 | // in BSPrim.Collide() and BSCharacter.Collide(). Can the same ones be reused? | ||
68 | // Raycast | ||
55 | // | 69 | // |
56 | namespace OpenSim.Region.Physics.BulletSPlugin | 70 | namespace OpenSim.Region.Physics.BulletSPlugin |
57 | { | 71 | { |
@@ -164,6 +178,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters | |||
164 | if (m_log.IsDebugEnabled) | 178 | if (m_log.IsDebugEnabled) |
165 | { | 179 | { |
166 | m_log.DebugFormat("{0}: Initialize: Setting debug callback for unmanaged code", LogHeader); | 180 | m_log.DebugFormat("{0}: Initialize: Setting debug callback for unmanaged code", LogHeader); |
181 | // the handle is saved to it doesn't get freed after this call | ||
167 | m_DebugLogCallbackHandle = new BulletSimAPI.DebugLogCallback(BulletLogger); | 182 | m_DebugLogCallbackHandle = new BulletSimAPI.DebugLogCallback(BulletLogger); |
168 | BulletSimAPI.SetDebugLogCallback(m_DebugLogCallbackHandle); | 183 | BulletSimAPI.SetDebugLogCallback(m_DebugLogCallbackHandle); |
169 | } | 184 | } |
@@ -172,7 +187,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters | |||
172 | 187 | ||
173 | mesher = meshmerizer; | 188 | mesher = meshmerizer; |
174 | // The bounding box for the simulated world | 189 | // The bounding box for the simulated world |
175 | Vector3 worldExtent = new Vector3(Constants.RegionSize, Constants.RegionSize, 4096f); | 190 | Vector3 worldExtent = new Vector3(Constants.RegionSize, Constants.RegionSize, 8192f); |
176 | 191 | ||
177 | // m_log.DebugFormat("{0}: Initialize: Calling BulletSimAPI.Initialize.", LogHeader); | 192 | // m_log.DebugFormat("{0}: Initialize: Calling BulletSimAPI.Initialize.", LogHeader); |
178 | m_worldID = BulletSimAPI.Initialize(worldExtent, m_paramsHandle.AddrOfPinnedObject(), | 193 | m_worldID = BulletSimAPI.Initialize(worldExtent, m_paramsHandle.AddrOfPinnedObject(), |
@@ -220,10 +235,20 @@ public class BSScene : PhysicsScene, IPhysicsParameters | |||
220 | parms.terrainFriction = 0.5f; | 235 | parms.terrainFriction = 0.5f; |
221 | parms.terrainHitFraction = 0.8f; | 236 | parms.terrainHitFraction = 0.8f; |
222 | parms.terrainRestitution = 0f; | 237 | parms.terrainRestitution = 0f; |
223 | parms.avatarFriction = 0.0f; | 238 | parms.avatarFriction = 0.5f; |
239 | parms.avatarRestitution = 0.0f; | ||
224 | parms.avatarDensity = 60f; | 240 | parms.avatarDensity = 60f; |
225 | parms.avatarCapsuleRadius = 0.37f; | 241 | parms.avatarCapsuleRadius = 0.37f; |
226 | parms.avatarCapsuleHeight = 1.5f; // 2.140599f | 242 | parms.avatarCapsuleHeight = 1.5f; // 2.140599f |
243 | parms.avatarContactProcessingThreshold = 0.1f; | ||
244 | |||
245 | parms.maxPersistantManifoldPoolSize = 0f; | ||
246 | parms.shouldDisableContactPoolDynamicAllocation = ConfigurationParameters.numericTrue; | ||
247 | parms.shouldForceUpdateAllAabbs = ConfigurationParameters.numericFalse; | ||
248 | parms.shouldRandomizeSolverOrder = ConfigurationParameters.numericFalse; | ||
249 | parms.shouldSplitSimulationIslands = ConfigurationParameters.numericFalse; | ||
250 | parms.shouldEnableFrictionCaching = ConfigurationParameters.numericFalse; | ||
251 | parms.numberOfSolverIterations = 0f; // means use default | ||
227 | 252 | ||
228 | if (config != null) | 253 | if (config != null) |
229 | { | 254 | { |
@@ -265,14 +290,40 @@ public class BSScene : PhysicsScene, IPhysicsParameters | |||
265 | parms.terrainHitFraction = pConfig.GetFloat("TerrainHitFraction", parms.terrainHitFraction); | 290 | parms.terrainHitFraction = pConfig.GetFloat("TerrainHitFraction", parms.terrainHitFraction); |
266 | parms.terrainRestitution = pConfig.GetFloat("TerrainRestitution", parms.terrainRestitution); | 291 | parms.terrainRestitution = pConfig.GetFloat("TerrainRestitution", parms.terrainRestitution); |
267 | parms.avatarFriction = pConfig.GetFloat("AvatarFriction", parms.avatarFriction); | 292 | parms.avatarFriction = pConfig.GetFloat("AvatarFriction", parms.avatarFriction); |
293 | parms.avatarRestitution = pConfig.GetFloat("AvatarRestitution", parms.avatarRestitution); | ||
268 | parms.avatarDensity = pConfig.GetFloat("AvatarDensity", parms.avatarDensity); | 294 | parms.avatarDensity = pConfig.GetFloat("AvatarDensity", parms.avatarDensity); |
269 | parms.avatarCapsuleRadius = pConfig.GetFloat("AvatarCapsuleRadius", parms.avatarCapsuleRadius); | 295 | parms.avatarCapsuleRadius = pConfig.GetFloat("AvatarCapsuleRadius", parms.avatarCapsuleRadius); |
270 | parms.avatarCapsuleHeight = pConfig.GetFloat("AvatarCapsuleHeight", parms.avatarCapsuleHeight); | 296 | parms.avatarCapsuleHeight = pConfig.GetFloat("AvatarCapsuleHeight", parms.avatarCapsuleHeight); |
297 | parms.avatarContactProcessingThreshold = pConfig.GetFloat("AvatarContactProcessingThreshold", parms.avatarContactProcessingThreshold); | ||
298 | |||
299 | parms.maxPersistantManifoldPoolSize = pConfig.GetFloat("MaxPersistantManifoldPoolSize", parms.maxPersistantManifoldPoolSize); | ||
300 | parms.shouldDisableContactPoolDynamicAllocation = ParamBoolean(pConfig, "ShouldDisableContactPoolDynamicAllocation", parms.shouldDisableContactPoolDynamicAllocation); | ||
301 | parms.shouldForceUpdateAllAabbs = ParamBoolean(pConfig, "ShouldForceUpdateAllAabbs", parms.shouldForceUpdateAllAabbs); | ||
302 | parms.shouldRandomizeSolverOrder = ParamBoolean(pConfig, "ShouldRandomizeSolverOrder", parms.shouldRandomizeSolverOrder); | ||
303 | parms.shouldSplitSimulationIslands = ParamBoolean(pConfig, "ShouldSplitSimulationIslands", parms.shouldSplitSimulationIslands); | ||
304 | parms.shouldEnableFrictionCaching = ParamBoolean(pConfig, "ShouldEnableFrictionCaching", parms.shouldEnableFrictionCaching); | ||
305 | parms.numberOfSolverIterations = pConfig.GetFloat("NumberOfSolverIterations", parms.numberOfSolverIterations); | ||
271 | } | 306 | } |
272 | } | 307 | } |
273 | m_params[0] = parms; | 308 | m_params[0] = parms; |
274 | } | 309 | } |
275 | 310 | ||
311 | // A helper function that handles a true/false parameter and returns the proper float number encoding | ||
312 | float ParamBoolean(IConfig config, string parmName, float deflt) | ||
313 | { | ||
314 | float ret = deflt; | ||
315 | if (config.Contains(parmName)) | ||
316 | { | ||
317 | ret = ConfigurationParameters.numericFalse; | ||
318 | if (config.GetBoolean(parmName, false)) | ||
319 | { | ||
320 | ret = ConfigurationParameters.numericTrue; | ||
321 | } | ||
322 | } | ||
323 | return ret; | ||
324 | } | ||
325 | |||
326 | |||
276 | // Called directly from unmanaged code so don't do much | 327 | // Called directly from unmanaged code so don't do much |
277 | private void BulletLogger(string msg) | 328 | private void BulletLogger(string msg) |
278 | { | 329 | { |
@@ -391,16 +442,16 @@ public class BSScene : PhysicsScene, IPhysicsParameters | |||
391 | { | 442 | { |
392 | EntityProperties entprop = m_updateArray[ii]; | 443 | EntityProperties entprop = m_updateArray[ii]; |
393 | // m_log.DebugFormat("{0}: entprop[{1}]: id={2}, pos={3}", LogHeader, ii, entprop.ID, entprop.Position); | 444 | // m_log.DebugFormat("{0}: entprop[{1}]: id={2}, pos={3}", LogHeader, ii, entprop.ID, entprop.Position); |
394 | BSCharacter actor; | ||
395 | if (m_avatars.TryGetValue(entprop.ID, out actor)) | ||
396 | { | ||
397 | actor.UpdateProperties(entprop); | ||
398 | continue; | ||
399 | } | ||
400 | BSPrim prim; | 445 | BSPrim prim; |
401 | if (m_prims.TryGetValue(entprop.ID, out prim)) | 446 | if (m_prims.TryGetValue(entprop.ID, out prim)) |
402 | { | 447 | { |
403 | prim.UpdateProperties(entprop); | 448 | prim.UpdateProperties(entprop); |
449 | continue; | ||
450 | } | ||
451 | BSCharacter actor; | ||
452 | if (m_avatars.TryGetValue(entprop.ID, out actor)) | ||
453 | { | ||
454 | actor.UpdateProperties(entprop); | ||
404 | } | 455 | } |
405 | } | 456 | } |
406 | } | 457 | } |
@@ -470,12 +521,12 @@ public class BSScene : PhysicsScene, IPhysicsParameters | |||
470 | 521 | ||
471 | public override void DeleteTerrain() | 522 | public override void DeleteTerrain() |
472 | { | 523 | { |
473 | m_log.DebugFormat("{0}: DeleteTerrain()", LogHeader); | 524 | // m_log.DebugFormat("{0}: DeleteTerrain()", LogHeader); |
474 | } | 525 | } |
475 | 526 | ||
476 | public override void Dispose() | 527 | public override void Dispose() |
477 | { | 528 | { |
478 | m_log.DebugFormat("{0}: Dispose()", LogHeader); | 529 | // m_log.DebugFormat("{0}: Dispose()", LogHeader); |
479 | } | 530 | } |
480 | 531 | ||
481 | public override Dictionary<uint, float> GetTopColliders() | 532 | public override Dictionary<uint, float> GetTopColliders() |
@@ -699,9 +750,23 @@ public class BSScene : PhysicsScene, IPhysicsParameters | |||
699 | new PhysParameterEntry("DeactivationTime", "Seconds before considering an object potentially static" ), | 750 | new PhysParameterEntry("DeactivationTime", "Seconds before considering an object potentially static" ), |
700 | new PhysParameterEntry("LinearSleepingThreshold", "Seconds to measure linear movement before considering static" ), | 751 | new PhysParameterEntry("LinearSleepingThreshold", "Seconds to measure linear movement before considering static" ), |
701 | new PhysParameterEntry("AngularSleepingThreshold", "Seconds to measure angular movement before considering static" ), | 752 | new PhysParameterEntry("AngularSleepingThreshold", "Seconds to measure angular movement before considering static" ), |
702 | // new PhysParameterEntry("CcdMotionThreshold", "" ), | 753 | new PhysParameterEntry("CcdMotionThreshold", "Continuious collision detection threshold (0 means no CCD)" ), |
703 | // new PhysParameterEntry("CcdSweptSphereRadius", "" ), | 754 | new PhysParameterEntry("CcdSweptSphereRadius", "Continuious collision detection test radius" ), |
704 | new PhysParameterEntry("ContactProcessingThreshold", "Distance between contacts before doing collision check" ), | 755 | new PhysParameterEntry("ContactProcessingThreshold", "Distance between contacts before doing collision check" ), |
756 | // Can only change the following at initialization time. Change the INI file and reboot. | ||
757 | new PhysParameterEntry("MaxPersistantManifoldPoolSize", "Number of manifolds pooled (0 means default)"), | ||
758 | new PhysParameterEntry("ShouldDisableContactPoolDynamicAllocation", "Enable to allow large changes in object count"), | ||
759 | new PhysParameterEntry("ShouldForceUpdateAllAabbs", "Enable to recomputer AABBs every simulator step"), | ||
760 | new PhysParameterEntry("ShouldRandomizeSolverOrder", "Enable for slightly better stacking interaction"), | ||
761 | new PhysParameterEntry("ShouldSplitSimulationIslands", "Enable splitting active object scanning islands"), | ||
762 | new PhysParameterEntry("ShouldEnableFrictionCaching", "Enable friction computation caching"), | ||
763 | new PhysParameterEntry("NumberOfSolverIterations", "Number of internal iterations (0 means default)"), | ||
764 | |||
765 | new PhysParameterEntry("Friction", "Set friction parameter for a specific object" ), | ||
766 | new PhysParameterEntry("Restitution", "Set restitution parameter for a specific object" ), | ||
767 | |||
768 | new PhysParameterEntry("Friction", "Set friction parameter for a specific object" ), | ||
769 | new PhysParameterEntry("Restitution", "Set restitution parameter for a specific object" ), | ||
705 | 770 | ||
706 | new PhysParameterEntry("TerrainFriction", "Factor to reduce movement against terrain surface" ), | 771 | new PhysParameterEntry("TerrainFriction", "Factor to reduce movement against terrain surface" ), |
707 | new PhysParameterEntry("TerrainHitFraction", "Distance to measure hit collisions" ), | 772 | new PhysParameterEntry("TerrainHitFraction", "Distance to measure hit collisions" ), |
@@ -710,7 +775,9 @@ public class BSScene : PhysicsScene, IPhysicsParameters | |||
710 | new PhysParameterEntry("AvatarDensity", "Density of an avatar. Changed on avatar recreation." ), | 775 | new PhysParameterEntry("AvatarDensity", "Density of an avatar. Changed on avatar recreation." ), |
711 | new PhysParameterEntry("AvatarRestitution", "Bouncyness. Changed on avatar recreation." ), | 776 | new PhysParameterEntry("AvatarRestitution", "Bouncyness. Changed on avatar recreation." ), |
712 | new PhysParameterEntry("AvatarCapsuleRadius", "Radius of space around an avatar" ), | 777 | new PhysParameterEntry("AvatarCapsuleRadius", "Radius of space around an avatar" ), |
713 | new PhysParameterEntry("AvatarCapsuleHeight", "Default height of space around avatar" ) | 778 | new PhysParameterEntry("AvatarCapsuleHeight", "Default height of space around avatar" ), |
779 | new PhysParameterEntry("AvatarContactProcessingThreshold", "Distance from capsule to check for collisions") | ||
780 | |||
714 | }; | 781 | }; |
715 | 782 | ||
716 | #region IPhysicsParameters | 783 | #region IPhysicsParameters |
@@ -733,6 +800,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters | |||
733 | switch (lparm) | 800 | switch (lparm) |
734 | { | 801 | { |
735 | case "detailedstats": m_detailedStatsStep = (int)val; break; | 802 | case "detailedstats": m_detailedStatsStep = (int)val; break; |
803 | |||
736 | case "meshlod": m_meshLOD = (int)val; break; | 804 | case "meshlod": m_meshLOD = (int)val; break; |
737 | case "sculptlod": m_sculptLOD = (int)val; break; | 805 | case "sculptlod": m_sculptLOD = (int)val; break; |
738 | case "maxsubstep": m_maxSubSteps = (int)val; break; | 806 | case "maxsubstep": m_maxSubSteps = (int)val; break; |
@@ -743,7 +811,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters | |||
743 | case "defaultdensity": m_params[0].defaultDensity = val; break; | 811 | case "defaultdensity": m_params[0].defaultDensity = val; break; |
744 | case "defaultrestitution": m_params[0].defaultRestitution = val; break; | 812 | case "defaultrestitution": m_params[0].defaultRestitution = val; break; |
745 | case "collisionmargin": m_params[0].collisionMargin = val; break; | 813 | case "collisionmargin": m_params[0].collisionMargin = val; break; |
746 | case "gravity": m_params[0].gravity = val; TaintedUpdateParameter(lparm, PhysParameterEntry.APPLY_TO_NONE, val); break; | 814 | case "gravity": m_params[0].gravity = val; TaintedUpdateParameter(lparm, localID, val); break; |
747 | 815 | ||
748 | case "lineardamping": UpdateParameterPrims(ref m_params[0].linearDamping, lparm, localID, val); break; | 816 | case "lineardamping": UpdateParameterPrims(ref m_params[0].linearDamping, lparm, localID, val); break; |
749 | case "angulardamping": UpdateParameterPrims(ref m_params[0].angularDamping, lparm, localID, val); break; | 817 | case "angulardamping": UpdateParameterPrims(ref m_params[0].angularDamping, lparm, localID, val); break; |
@@ -753,6 +821,17 @@ public class BSScene : PhysicsScene, IPhysicsParameters | |||
753 | case "ccdmotionthreshold": UpdateParameterPrims(ref m_params[0].ccdMotionThreshold, lparm, localID, val); break; | 821 | case "ccdmotionthreshold": UpdateParameterPrims(ref m_params[0].ccdMotionThreshold, lparm, localID, val); break; |
754 | case "ccdsweptsphereradius": UpdateParameterPrims(ref m_params[0].ccdSweptSphereRadius, lparm, localID, val); break; | 822 | case "ccdsweptsphereradius": UpdateParameterPrims(ref m_params[0].ccdSweptSphereRadius, lparm, localID, val); break; |
755 | case "contactprocessingthreshold": UpdateParameterPrims(ref m_params[0].contactProcessingThreshold, lparm, localID, val); break; | 823 | case "contactprocessingthreshold": UpdateParameterPrims(ref m_params[0].contactProcessingThreshold, lparm, localID, val); break; |
824 | // the following are used only at initialization time so setting them makes no sense | ||
825 | // case "maxPersistantmanifoldpoolSize": m_params[0].maxPersistantManifoldPoolSize = val; break; | ||
826 | // case "shoulddisablecontactpooldynamicallocation": m_params[0].shouldDisableContactPoolDynamicAllocation = val; break; | ||
827 | // case "shouldforceupdateallaabbs": m_params[0].shouldForceUpdateAllAabbs = val; break; | ||
828 | // case "shouldrandomizesolverorder": m_params[0].shouldRandomizeSolverOrder = val; break; | ||
829 | // case "shouldsplitsimulationislands": m_params[0].shouldSplitSimulationIslands = val; break; | ||
830 | // case "shouldenablefrictioncaching": m_params[0].shouldEnableFrictionCaching = val; break; | ||
831 | // case "numberofsolveriterations": m_params[0].numberOfSolverIterations = val; break; | ||
832 | |||
833 | case "friction": TaintedUpdateParameter(lparm, localID, val); break; | ||
834 | case "restitution": TaintedUpdateParameter(lparm, localID, val); break; | ||
756 | 835 | ||
757 | // set a terrain physical feature and cause terrain to be recalculated | 836 | // set a terrain physical feature and cause terrain to be recalculated |
758 | case "terrainfriction": m_params[0].terrainFriction = val; TaintedUpdateParameter("terrain", 0, val); break; | 837 | case "terrainfriction": m_params[0].terrainFriction = val; TaintedUpdateParameter("terrain", 0, val); break; |
@@ -764,6 +843,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters | |||
764 | case "avatarrestitution": UpdateParameterAvatars(ref m_params[0].avatarRestitution, "avatar", localID, val); break; | 843 | case "avatarrestitution": UpdateParameterAvatars(ref m_params[0].avatarRestitution, "avatar", localID, val); break; |
765 | case "avatarcapsuleradius": UpdateParameterAvatars(ref m_params[0].avatarCapsuleRadius, "avatar", localID, val); break; | 844 | case "avatarcapsuleradius": UpdateParameterAvatars(ref m_params[0].avatarCapsuleRadius, "avatar", localID, val); break; |
766 | case "avatarcapsuleheight": UpdateParameterAvatars(ref m_params[0].avatarCapsuleHeight, "avatar", localID, val); break; | 845 | case "avatarcapsuleheight": UpdateParameterAvatars(ref m_params[0].avatarCapsuleHeight, "avatar", localID, val); break; |
846 | case "avatarcontactprocessingthreshold": UpdateParameterAvatars(ref m_params[0].avatarContactProcessingThreshold, "avatar", localID, val); break; | ||
767 | 847 | ||
768 | default: ret = false; break; | 848 | default: ret = false; break; |
769 | } | 849 | } |
@@ -856,6 +936,13 @@ public class BSScene : PhysicsScene, IPhysicsParameters | |||
856 | case "ccdmotionthreshold": val = m_params[0].ccdMotionThreshold; break; | 936 | case "ccdmotionthreshold": val = m_params[0].ccdMotionThreshold; break; |
857 | case "ccdsweptsphereradius": val = m_params[0].ccdSweptSphereRadius; break; | 937 | case "ccdsweptsphereradius": val = m_params[0].ccdSweptSphereRadius; break; |
858 | case "contactprocessingthreshold": val = m_params[0].contactProcessingThreshold; break; | 938 | case "contactprocessingthreshold": val = m_params[0].contactProcessingThreshold; break; |
939 | case "maxPersistantmanifoldpoolSize": val = m_params[0].maxPersistantManifoldPoolSize; break; | ||
940 | case "shoulddisablecontactpooldynamicallocation": val = m_params[0].shouldDisableContactPoolDynamicAllocation; break; | ||
941 | case "shouldforceupdateallaabbs": val = m_params[0].shouldForceUpdateAllAabbs; break; | ||
942 | case "shouldrandomizesolverorder": val = m_params[0].shouldRandomizeSolverOrder; break; | ||
943 | case "shouldsplitsimulationislands": val = m_params[0].shouldSplitSimulationIslands; break; | ||
944 | case "shouldenablefrictioncaching": val = m_params[0].shouldEnableFrictionCaching; break; | ||
945 | case "numberofsolveriterations": val = m_params[0].numberOfSolverIterations; break; | ||
859 | 946 | ||
860 | case "terrainfriction": val = m_params[0].terrainFriction; break; | 947 | case "terrainfriction": val = m_params[0].terrainFriction; break; |
861 | case "terrainhitfraction": val = m_params[0].terrainHitFraction; break; | 948 | case "terrainhitfraction": val = m_params[0].terrainHitFraction; break; |
@@ -866,6 +953,7 @@ public class BSScene : PhysicsScene, IPhysicsParameters | |||
866 | case "avatarrestitution": val = m_params[0].avatarRestitution; break; | 953 | case "avatarrestitution": val = m_params[0].avatarRestitution; break; |
867 | case "avatarcapsuleradius": val = m_params[0].avatarCapsuleRadius; break; | 954 | case "avatarcapsuleradius": val = m_params[0].avatarCapsuleRadius; break; |
868 | case "avatarcapsuleheight": val = m_params[0].avatarCapsuleHeight; break; | 955 | case "avatarcapsuleheight": val = m_params[0].avatarCapsuleHeight; break; |
956 | case "avatarcontactprocessingthreshold": val = m_params[0].avatarContactProcessingThreshold; break; | ||
869 | default: ret = false; break; | 957 | default: ret = false; break; |
870 | 958 | ||
871 | } | 959 | } |