hkpWorldCinfo.h
上传用户:yisoukefu
上传日期:2020-08-09
资源大小:39506k
文件大小:27k
源码类别:

其他游戏

开发平台:

Visual C++

  1. /* 
  2.  * 
  3.  * Confidential Information of Telekinesys Research Limited (t/a Havok). Not for disclosure or distribution without Havok's
  4.  * prior written consent. This software contains code, techniques and know-how which is confidential and proprietary to Havok.
  5.  * Level 2 and Level 3 source code contains trade secrets of Havok. Havok Software (C) Copyright 1999-2009 Telekinesys Research Limited t/a Havok. All Rights Reserved. Use of this software is subject to the terms of an end user license agreement.
  6.  * 
  7.  */
  8. #ifndef HKDYNAMICS_WORLD_HKWORLDCINFO_XML_H
  9. #define HKDYNAMICS_WORLD_HKWORLDCINFO_XML_H
  10. #include <Common/Base/Types/Geometry/Aabb/hkAabb.h>
  11. #include <Physics/Dynamics/World/Memory/hkpWorldMemoryAvailableWatchDog.h>
  12. #include <Physics/Collide/Filter/hkpConvexListFilter.h>
  13. #include <Physics/Collide/Filter/List/hkpCollisionFilterList.h>
  14. /// hkpWorldCinfo meta information
  15. extern const class hkClass hkpWorldCinfoClass;
  16. /// This structure contains all the information needed to construct a hkpWorld
  17. /// object.
  18. class hkpWorldCinfo : public hkReferencedObject
  19. {
  20. public:
  21. // +version(2)
  22. HK_DECLARE_REFLECTION();
  23. /// Used to specify the speed/stiffness balance of the core solver.
  24. /// Havok's solver is an iterative solver and similar to a 'successive
  25. /// over relaxation' (SOR) method. That means that each constraint will not
  26. /// be solved perfectly, but rather solved like a very stiff spring,
  27. /// which gives the solver a 'soft' feeling. So the goal of the solver
  28. /// is to make the constraint to appear hard.
  29. /// There are 3 parameters to control the behavior of the solver:
  30. ///  - m_solverIterations: defines how often the solver iterates over
  31. ///    all constraints. The higher the number, the stiffer the constraints,
  32. ///    however you need to spend more CPU. Values between 2 and 16 are
  33. ///    reasonable, higher values could lead to instable behavior (in this
  34. ///    case you can achieve the same results by decreasing the physics delta time).
  35. ///  - m_tau: defines how much of the current constraint error is solved every
  36. ///    solver iteration. High values (0.8 .. 1.2 ) make the constraints harder,
  37.     ///    however they get more unstable as well. Smaller numbers (0.3 .. 0.6) give
  38. ///    much softer and smoother behavior, however you have to set the number of iterations
  39. ///    pretty high to achieve a stiff behavior.
  40.     ///  - m_damping: defines how the current bodies velocity is taken into account.
  41. ///    If you set damping to 0, you get an explicit solver, setting it to m_tau
  42. ///    makes the solver semi-implicit. A good choice is to set it to tau.
  43. ///  This enum list allows to define some reasonable defaults: NITERS refers
  44. ///  to the number of iterations, SOFT/MEDIUM/HARD refers to the value of tau and
  45. ///  damp.
  46. ///  Note: there is a new experimental parameter: m_solverNumMicroSteps. This allows for
  47. /// further increasing (multiply) the m_solverIterations without adding extra instability
  48. enum SolverType
  49. {
  50. ///
  51. SOLVER_TYPE_INVALID,
  52. /// 'Softest' solver type.
  53. SOLVER_TYPE_2ITERS_SOFT,
  54. /// .
  55. SOLVER_TYPE_2ITERS_MEDIUM,
  56. /// .
  57. SOLVER_TYPE_2ITERS_HARD,
  58. /// .
  59. SOLVER_TYPE_4ITERS_SOFT,
  60. /// .
  61. SOLVER_TYPE_4ITERS_MEDIUM,
  62. /// .
  63. SOLVER_TYPE_4ITERS_HARD,
  64. /// .
  65. SOLVER_TYPE_8ITERS_SOFT,
  66. /// .
  67. SOLVER_TYPE_8ITERS_MEDIUM,
  68. /// 'Hardest' solver type.
  69. SOLVER_TYPE_8ITERS_HARD,
  70. ///
  71. SOLVER_TYPE_MAX_ID
  72. };
  73. /// Specifies simulation with discrete or continuous collision detection.
  74. // Note: all simulation types with enumeration values >= SIMULATION_TYPE_CONTINUOUS set m_wantContinuousAgents = true in hkpWorld's constructor.
  75. enum SimulationType
  76. {
  77. ///
  78. SIMULATION_TYPE_INVALID,
  79. /// No continuous simulation is performed
  80. SIMULATION_TYPE_DISCRETE,
  81. /// Use this simulation if you want any continuous simulation.
  82. /// Depending on the hkpEntity->getQualityType(), collisions
  83. /// are not only performed at 'normal' physical timesteps (called PSI), but
  84. /// at any time when two objects collide (TOI)
  85. SIMULATION_TYPE_CONTINUOUS,
  86. /// Multithreaded continuous simulation.
  87. /// You must have read the multi threading user guide.<br>
  88.                 /// To use this you should call hkpWorld::stepMultithreaded(), see
  89. /// the hkDefaultPhysicsDemo::stepDemo for an example.
  90. /// Notes:
  91. ///   - The internal overhead for multi threaded is small and you can expect
  92. ///     good speedups, except:
  93. ///   - solving multiple TOI events can not be done on different threads,
  94. ///     so TOI are solved on a single thread. However the collision detection
  95. ///     for each TOI event can be solver multithreaded (see m_processToisMultithreaded) 
  96. SIMULATION_TYPE_MULTITHREADED,
  97. };
  98. /// Specifies how aggressively the engine accepts new contact points
  99. enum ContactPointGeneration
  100. {
  101. /// Try to gather as many contact points as possible. This
  102. /// gives you the highest quality at the cost of some (up to 25%)
  103. /// extra CPU. You should use this setting if you want to stack
  104. /// very small objects in your game
  105. CONTACT_POINT_ACCEPT_ALWAYS,
  106. /// Accept good contact points immediately and try to
  107. /// to reject the rest. This is a compromise
  108. CONTACT_POINT_REJECT_DUBIOUS,
  109. /// Uses some optimistic algorithms to speed up contact point generation.
  110. /// This can seriously increase the performance of the engine.
  111. /// Note: Stacking small objects becomes very difficult with this option enabled
  112. CONTACT_POINT_REJECT_MANY,
  113. };
  114. /// Tell the system what should happen if an objects leaves the
  115. /// extents of the broadphase.
  116. /// If you want to do your own implementation,
  117. /// just derive from hkpBroadPhaseBorder, implement your own
  118. /// maxPositionExceededCallback and call
  119. /// hkpWorld::setBroadPhaseBorder( new myBroadPhaseBorder() );
  120. enum BroadPhaseBorderBehaviour
  121. {
  122. /// Cause an assert and set the motion type to be fixed (default).
  123. BROADPHASE_BORDER_ASSERT,
  124. /// Set the motion type to be fixed and raise a warning.
  125. BROADPHASE_BORDER_FIX_ENTITY,
  126. /// Remove the entity from the hkpWorld and raise a warning.
  127. BROADPHASE_BORDER_REMOVE_ENTITY,
  128.     /// Do not do anything, just continue to work.
  129. /// If many (>20) objects leave the broadphase,
  130. /// serious memory and CPU can be wasted.
  131. BROADPHASE_BORDER_DO_NOTHING,
  132. };
  133. /// Default constructor
  134. hkpWorldCinfo();
  135. //
  136. // Methods
  137. //
  138. /// Set the parameters of the world's solver. Each solver type provides a different
  139. /// speed/stiffness balance for the simulation. The default solver type is
  140. /// SOLVER_TYPE_4ITERS_MEDIUM, which is fast and moderately soft.
  141. void setupSolverInfo(enum SolverType st);
  142. /// Sets the broadphase size to be a cube centered on the origin of side
  143. /// sideLength. See also m_broadPhaseWorldSize.
  144. void setBroadPhaseWorldSize(hkReal size);
  145. //
  146. // Members
  147. //
  148. public:
  149. //
  150. // Basic setup
  151. //
  152. /// The gravity for the world. The default is (0, -9.8, 0).
  153. hkVector4 m_gravity; //+default(0,-9.8f,0)
  154. /// This variable is used to guess at the maximum number of overlaps you will get
  155. /// when you add or remove an entity or phantom. It determines the size of the local
  156. /// array used to query the broadphase. The local array uses the hkMemory stack,
  157. /// The default value is 1024, which requires a local array stack area of 8K.
  158. hkInt32 m_broadPhaseQuerySize; //+default(1024)
  159. /// The velocity which defines when two objects are assumed to be
  160. /// in resting contact. If the approaching velocity of the two objects
  161. /// at a point of contact is higher than this value, a special more accurate collision
  162. /// restitution algorithm is called. By default this value is HK_REAL_MAX
  163. /// which thus disables this algorithm (though more accurate, this algorithm can, as a side-effect,
  164. /// cause instabilites for long thin bodies). If you want to enable this algorithm
  165. /// and are aware of the possible artifacts mentioned above, you can set this value to 0.2f
  166. /// (the value used in Havok 3.1.0 and 3.1.1).
  167. hkReal m_contactRestingVelocity;
  168. /// Tell the system what should happen if an objects leaves the
  169. /// extents of the broadphase. Read BroadPhaseBorderBehaviour for more details.
  170. /// This value defaults to BROADPHASE_BORDER_ASSERT
  171. hkEnum<BroadPhaseBorderBehaviour,hkInt8> m_broadPhaseBorderBehaviour;
  172. /// Defines the area dealt with by the collision detection broadphase. The size
  173. /// specified is a cuboid in world units - this cuboid defines the broadphase
  174. /// limits. There is a significant performance cost for objects that leave this
  175. /// area. The default size is a cube of side 1000, centred at the origin.
  176. class hkAabb m_broadPhaseWorldAabb;
  177. /// Enables/disables use of KD-trees. KD-trees speed up raycasting and linear casting 
  178. /// queries performed on the world. When this is disabled the hkpWorld uses the standard broadphase.
  179. hkBool m_useKdTree; //+default(false)
  180. /// Enables/disables automatic updating of the world's kd-tree after the world step.
  181. /// The kd-tree must be in sync with the world state in order to avoid missed raycasts.
  182. /// Thus this should be set to false if you intend to add, move, or remove objects 
  183. /// after the world has been stepped but before starting raycasts.
  184. /// If this is the case, you must call hkpWorld::updateKdTree() manually;
  185. hkBool m_autoUpdateKdTree; //+default(true)
  186. /// The collision tolerance. This is used to create and keep contact points even for
  187. /// non penetrating objects. This dramatically increases the stability of the
  188. /// system. The default collision tolerance is 0.1f.
  189. /// It is safe to decrease this value slightly when continuous simulation is enabled. This allows
  190. /// for more precise creation of contact points and better quality at the cost of generating
  191. /// more TOI events.
  192. hkReal m_collisionTolerance; //+default(.1f)
  193. /// The collision filter used by the hkpWorld. By default this is HK_NULL.
  194. /// If left as HK_NULL, a hkpNullCollisionFilter is set as the default filter in the
  195. /// world. This disables no collisions.
  196. hkRefPtr<class hkpCollisionFilter> m_collisionFilter;
  197. /// The filter used to decide how convex list shape collisions should be treated.
  198. /// By default this pointer is set to HK_NULL, in which case the default convex list filter
  199. /// will be created when the hkpWorld is constructed.
  200. /// It is not possible to change this collision filter after the world has been created.
  201. hkRefPtr<class hkpConvexListFilter> m_convexListFilter;
  202. /// The max linear velocity you expect the continuous physics to work correctly.
  203. /// This value is used to set internal tolerances. It defaults to 200 [meters per second]
  204. /// Note: This value does not limit the maximum linear velocities of rigid bodies.
  205. /// You have to set hkpRigidBody::m_maxLinearVelocity for each body yourself.
  206. hkReal m_expectedMaxLinearVelocity; //+default(200)
  207. /// For continuous physics this is the size of the toi queue as used by the collision detector.
  208. ///
  209. /// The collision detector exports tois into the hkMultithreadedSimulation::m_toiEvents array, which
  210. /// will have the initial size of m_sizeOfToiEventQueue. If more tois are generated, they will simply be
  211. /// dropped.
  212. int m_sizeOfToiEventQueue; //+default(250)
  213. /// The min delta time you expect between two PSI.
  214. /// This value is only used to set internal tolerances. It defaults to 1/30.0f second
  215. /// Note: This value does not limit the delta time.
  216. hkReal m_expectedMinPsiDeltaTime; //+default(1.0f/30.0f)
  217. /// The memory "watchdog" used by the world. By default this is HK_NULL, i.e. the memory
  218. /// for the world is not checked. If this is set, hkpWorldMemoryWatchDog::watchMemory will be
  219. /// called every step, which gives the hkpWorldMemoryWatchDog a chance to prevent the memory
  220. /// exceeding a desired threshold.
  221. hkRefPtr<class hkWorldMemoryAvailableWatchDog> m_memoryWatchDog;
  222. //
  223. // Optimizations
  224. //
  225. /// NOTE: There is currently a known issue HVK-2553 associated with markers which
  226. /// can cause a possible crash during simulation. You should leave this value at 0 in the meantime.
  227. /// This variable is used to subdivide the x-axis in the 3-axisSweepAndPrune space
  228. /// into regular intervals. Setting this value slows down the normal operations by a
  229. /// very small amount, but can speed up asynchronous broadphase queries by up to 10
  230. /// times. Values have to be of power of 2. A typical good value would be 64.
  231. /// The default is 0, i.e. markers are not enabled by default.
  232. hkInt32 m_broadPhaseNumMarkers;
  233. /// Specifies how aggressively the engine accepts new contact points
  234. /// Defaults to CONTACT_POINT_REJECT_MANY
  235. hkEnum<ContactPointGeneration, hkInt8> m_contactPointGeneration;
  236. /// On PLAYSTATION(R)3 contact point confirmed callbacks can be omitted when bodies have zero restitution.
  237. /// The default false value ensures all callbacks are triggered properly.
  238. hkBool m_allowToSkipConfirmedCallbacks; //+default(false)
  239. //
  240. // Solver settings
  241. //
  242. /// Parameter of the world's constraint solver. Default sets of values can be
  243. /// automatically set using the setupSolverInfo() method by passing the required
  244. /// hkSolverType. See SolverType or documentation for details on customizing these values.
  245. hkReal m_solverTau;
  246. /// Parameter of the world's constraint solver. Default sets of values can be
  247. /// automatically set using the setupSolverInfo() method by passing the required
  248. /// hkSolverType. See SolverType or documentation for details on customizing these values.
  249. /// The default is 0.6f
  250. hkReal m_solverDamp; //+default(.6f)
  251. /// Parameter of the world's constraint solver. Default sets of values can be
  252. /// automatically set using the setupSolverInfo() method by passing the required
  253. /// hkSolverType. See SolverType or documentation for details on customizing these values.
  254. /// The default is 4.
  255. hkInt32 m_solverIterations; //+default(4)
  256. /// This is the number of gauss seidel steps the solver performs during each Havok step.
  257. /// Basically this allows for virtually increasing the number of solver steps without
  258. /// adding extra instability. However the microsteps are not as powerful as the main
  259. /// solver steps.
  260. /// So by default this value should be 1. Only if you wish to increase the number
  261. /// of solver steps to be higher than 8 and you experience stability problems,
  262. /// you can increase this value and leave the number of solver steps to 4 or 8.
  263. hkInt32 m_solverMicrosteps; //+default(1)
  264. /// When using multithreading, this forces the solver to process the constraints in the same
  265. /// order as it is done in single-treaded mode. As the result, a big part of solving is performed
  266. /// by a single processing unit. This will cause a noticable/significant slowdown when
  267. /// processing a single large island.
  268. ///
  269. /// Leaving this option off (default) may cause some random jitter.
  270. hkBool m_forceCoherentConstraintOrderingInSolver; //+default(false)
  271. //
  272. // Internal algorithm settings
  273. //
  274. /// This value determines when collision normals will be welded. See the user guide for details.
  275. /// By default this is 30 degrees. This value is only used for two sided welding, if you build
  276. /// one sided welding information this value is not used.
  277. hkReal m_snapCollisionToConvexEdgeThreshold; //+default(.524f)
  278. /// This value determines when collision normals will be welded. See the user guide for details.
  279. /// This value is only used for two sided welding, if you build one sided welding information this value is not used.
  280. /// By default this is 40 degrees.
  281. hkReal m_snapCollisionToConcaveEdgeThreshold; //+default(0.698f)
  282. /// This flag determines whether tois will be rejected by welding. See the user guide for details.
  283. /// By default this is set to false, meaning that tois will always be accepted, even if
  284. /// they will cause a welding artefact.  If you set this to true, Tois will never produce welding artefacts,
  285. /// however it means that objects will be able to penetrate landscapes more easily even in continuous mode.
  286. /// Note that this is not an issue if you have build one sided welding information for your landscapes; in
  287. /// this case Tois are never rejected by setting this variable.
  288. hkBool m_enableToiWeldRejection; //+default(false)
  289. /// The recommended welding solution of versions 4.5 and later involves building welding info and storing
  290. /// additional data with the mesh. However, if you have not built this info, or wish to weld non-triangle
  291. /// based meshes, you may wish to enable the old, deprecated welding. To do so, set this flag to true.
  292. hkBool m_enableDeprecatedWelding; //+default(false)
  293. /// (Collision config) The early out distance default for Linear casts. Defaults to
  294. /// 0.01 units, usually about a 10th of collision tolerance so change this if you
  295. /// change the collision tolerance value.
  296. hkReal m_iterativeLinearCastEarlyOutDistance; //+default(.01f)
  297. /// (Collision config) The max number of iterations the Linear casts will make.
  298. /// Defaults to 20.
  299. hkInt32 m_iterativeLinearCastMaxIterations; //+default(20)
  300. /// Internal deactivation flag, leave at default.
  301. hkUint8 m_deactivationNumInactiveFramesSelectFlag0; //+default(0)
  302. /// Internal deactivation flag, leave at default.
  303. hkUint8 m_deactivationNumInactiveFramesSelectFlag1; //+default(0)
  304. /// Internal deactivation counter, leave at default.
  305. hkUint8 m_deactivationIntegrateCounter; //+default(0)
  306. /// This says whether bodies are to be activated when they get moved around with any
  307. /// of the setPositon/setRotation/setTransform calls. By default this is true.
  308. hkBool m_shouldActivateOnRigidBodyTransformChange; //+default(true)
  309. /// This is the base distance used for the deactivation check.
  310. /// The basic idea is that we deactivate an object if its position stays
  311. /// within a sphere (radius=m_deactivationReferenceDistance) for about 20 frames (high frequency deactivation).
  312. /// Or within a sphere (radius = 4*m_deactivationReferenceDistance) for about 80 frames (low frequency deactivation).
  313. /// If the object breaches this deactivation sphere, the center of the sphere is set to the current position
  314. /// of the object. Also the same rules apply to angular movement.
  315. /// Some details:
  316. ///  - Every object is only checked every 4th frame for high frequency deactivation
  317. ///  - Every object is only checked every 16th frame for low frequency deactivation
  318. ///  - Just before deactivating we check the velocity again. If the velocity has significantly increased
  319. ///    (is significantly (0.1f) bigger than 2 times the maximum velocity measured over the last 20/80 frames)
  320. ///    we do not deactivate this object.
  321. /// You can set some of those values in the hkpSolverInfo (hkpWorld::getSolverInfo()) for each deactivation class after the world is constructed.
  322. hkReal m_deactivationReferenceDistance; //+default(0.02f)
  323. /// Advanced Parameter:
  324. /// Rotates the normal of the contact point for TOI contact point resolution.
  325. /// The range of this parameter should be between 0 and 1 (0.2f by default).
  326. /// Setting this parameter bigger than 0 simulates an extra surface roughness,
  327. /// thereby allowing sliding objects to get an extra separating velocity and
  328. /// therefore reducing the frequency of subsequent TOI.
  329. /// In short: Setting this parameter to >0 adds extra bounce and can greatly
  330. /// reduce CPU.
  331. hkReal m_toiCollisionResponseRotateNormal; //+default(0.2f)
  332. /// The maximum number of hkpAgentSector elements that will be processed by each task split-off from an hkAgentSectorJob.
  333. int m_maxSectorsPerCollideTask; //+default(4)
  334. /// If set to true (default), the continuous TOI solver will run collision detection multithreaded (used in hkMultithreadedSimulation only)
  335. /// If set to false, the old-style single threaded variant will be used. 
  336. /// TOIs in general have to be solved sequentially and therefore cannot be solved multithreaded.
  337. /// However the collision detection part of each TOI can be parallelized and solved by different threads.
  338. /// As a result you should see a TOI solving speedup if a fast complicated object (e.g. listshape) hits a pile of other complicated objects.
  339. /// However you will not get any speedup (but rather a slow-down) if a simple object (e.g. ragdoll bone) hits another single object (e.g. landscape).
  340. /// You should try to experiment with that parameter to see which value suits your scenario best.
  341. /// Note: if you enable this flag the Havok worker threads will not be released until the stepDeltaTime() call is finished,
  342. ///       i.e. you cannot use them for different purposes even if they are idle.
  343. hkBool m_processToisMultithreaded; //+default(true)
  344. /// The maximum number of hkpAgentNnEntry elements that will be processed by each task split-off from an hkAgentNnEntryJob.
  345. /// This value is only used when m_processToisMultithreaded is enabled.
  346. int m_maxEntriesPerToiCollideTask; //+default(1)
  347. /// When checking for the allowed penetration depth, Havok's collision detection will initially allow for a fixed
  348. /// percentage of that depth during the first TOI. The remaining penetration depth will then be subdivided into a
  349. /// customizable number of TOIs. This allows for tweaking 'competing' collision agents to be resolved in a way the
  350. /// user prefers, e.g. if the player is standing beneath a downward bound elevator platform he should preferrably
  351. /// tunnel through the platform than through the floor (and by this possibly getting pushed out of the world).
  352. /// This value defines the number of TOIs to be triggered for collisions between fast-moving, non critical objects
  353. /// and the landscape (COLLISION_QUALITY_SIMPLIFIED_TOI) and has to be > 1.0.
  354. /// The default is 3.0.
  355. hkReal m_numToisTillAllowedPenetrationSimplifiedToi; //+default(3.0f)
  356. /// This value defines the number of TOIs to be triggered for collisions between two moving objects (COLLISION_QUALITY_TOI)
  357. /// and has to be > 1.0.
  358. /// For details see m_numToisTillAllowedPenetrationSimplifiedToi.
  359. /// The default is 3.0.
  360. hkReal m_numToisTillAllowedPenetrationToi; //+default(3.0f)
  361. /// This value defines the number of TOIs to be triggered for collisions between a (non-critical) moving object and
  362. /// the landscape (COLLISION_QUALITY_TOI_HIGHER) and has to be > 1.0.
  363. /// For details see m_numToisTillAllowedPenetrationSimplifiedToi.
  364. /// The default is 4.0.
  365. hkReal m_numToisTillAllowedPenetrationToiHigher; //+default(4.0f)
  366. /// This value defines the number of TOIs to be triggered for collisions between a (critical) moving object and the
  367. /// landscape (COLLISION_QUALITY_TOI_FORCED) and has to be > 1.0.
  368. /// For details see m_numToisTillAllowedPenetrationSimplifiedToi.
  369. /// The default is 20.0.
  370. hkReal m_numToisTillAllowedPenetrationToiForced; //+default(20.0f)
  371. //
  372. // Debugging flags
  373. //
  374. /// Set to false if you want deactivation to be disabled. See the frequency settings
  375. /// for deactivation too.
  376. hkBool m_enableDeactivation; //+default(true)
  377. /// Simulation type. By default this is SIMULATION_TYPE_CONTINUOUS. See hkpWorld::SimulationType for more details.
  378. hkEnum<SimulationType, hkInt8> m_simulationType;
  379. /// Sets whether the world is automatically segmented into separate islands each step.
  380. /// This should always be enabled. The default is enabled.
  381. hkBool m_enableSimulationIslands; //+default(true)
  382. /// This parameter allows to keep the islands size reasonable large to avoid performance overhead in multi threaded simulations.
  383. ///
  384. /// Having lots of very small islands can cause some unnecessary overhead in the multithreaded simulation.
  385. /// (Its like rendering single triangles using a modern graphics card).
  386. /// Therefore we have the concept of sparse islands.
  387. /// These islands could in theory be split into smaller islands,
  388. /// however its not done and those islands are flagged with hkpSimulationIsland::m_sparseEnabled = true.
  389. /// But whenever an island is deactivated, it will be checked for split and only that sub island will be deactivated
  390. /// which is actually inactive.
  391. ///
  392. /// This parameter only works in multithreading mode, otherwise it will not be used and will be set to 0.
  393. hkUint32 m_minDesiredIslandSize; //+default(64)
  394. /// Forces actions to be processed in a single thread. If you have a multi threaded simulation and
  395. /// you are using actions which influence objects other then the action's entities (listed in hkpAction::getEntities(), this flag must
  396. /// be set to true (e.g. hkpVehicleInstance applies forces on objects laying on the ground and uses a phantom).
  397. hkBool m_processActionsInSingleThread; //+default(true)
  398. /// Snaps the frameTimeMarker to the currentPsiTime when those times are close together.
  399. /// By default they must be less than .0001 seconds apart to be snapped together.
  400. /// This synchronization of frameTime and physicsTime is performed by default, and is useful to control numerical drift when e.g.
  401. /// running simulation at half the frequency of the frame rate. A side effect is such that the total time of simulation may
  402. /// slightly vary from the sum of frameDeltaTime parameters passed to world->setFrameTimeMarker(frameDeltaTime).
  403. /// If you use your hkpWorld for testing and precise measurements you may prefer to disable synchronization.
  404. /// To do this set this variable to 0.
  405. hkReal m_frameMarkerPsiSnap; //+default(.0001f)
  406. virtual ~hkpWorldCinfo() {}
  407. explicit hkpWorldCinfo( hkFinishLoadedObjectFlag flag );
  408. };
  409. #endif // HKDYNAMICS_WORLD_HKWORLDCINFO_XML_H
  410. /*
  411. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  412. * Confidential Information of Havok.  (C) Copyright 1999-2009
  413. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  414. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  415. * rights, and intellectual property rights in the Havok software remain in
  416. * Havok and/or its suppliers.
  417. * Use of this software for evaluation purposes is subject to and indicates
  418. * acceptance of the End User licence Agreement for this product. A copy of
  419. * the license is included with this software and is also available at www.havok.com/tryhavok.
  420. */