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

其他游戏

开发平台:

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. //
  9. //
  10. #ifndef HK_COLLIDE2_MOPP_REMOVE_TERMINALS_MODIFIER_H
  11. #define HK_COLLIDE2_MOPP_REMOVE_TERMINALS_MODIFIER_H
  12. #include <Physics/Internal/Collide/Mopp/Machine/hkpMoppModifier.h>
  13. class hkpMoppCode;
  14. class hkpShapeCollection;
  15. extern const hkClass hkpRemoveTerminalsMoppModifierClass;
  16. /// This class allows you to efficiently remove terminals from a mopp.
  17. /// You can use many instances of this class so long as each instance removes different
  18. /// terminals from the mopp. This class queries the mopp with the AABB of all terminals
  19. /// being removed to speed up the building of the internal tables. To get good performance,
  20. /// the triangles to remove should be all in the same area (so that the AABB is small).
  21. /// The construction of a hkpRemoveTerminalsMoppModifier does the AABB query described
  22. /// above, so is not as fast as the actual removal, or you can use a precalculated AABB.
  23. /// Since applying a modifier (via the applyRemoveTerminals() method) modifies the mopp
  24. /// code in-place, to 'undo' a removal (for example on level restart/reload) you must use
  25. /// the same modifier and call the undoRemoveTerminals() method.
  26. /// N.B. Modifiers must be 'undone' in the *reverse order* to that in which they were applied.
  27. class hkpRemoveTerminalsMoppModifier: public hkReferencedObject, public hkpMoppModifier
  28. {
  29. public:
  30. HK_DECLARE_CLASS_ALLOCATOR( HK_MEMORY_CLASS_MOPP );
  31. HK_DECLARE_REFLECTION();
  32. /// Build this modifier (which does an aabb query on the mopp) but does not
  33. /// alter the moppCode yet, so you can pre-construct this object.
  34. /// It calculates the quety aabb based on the shapes in the shapesContainer using keysToRemove
  35. hkpRemoveTerminalsMoppModifier( const hkpMoppCode* moppCode, const hkpShapeContainer* shapeContainer, const hkArray<hkpShapeKey>& keysToRemove );
  36. /// Build this modifier (which does an aabb query on the mopp) but does not
  37. /// alter the moppCode yet, so you can pre-construct this object. This version
  38. /// uses a precalculated aabb and is roughly 2-10 times faster than the other constructor
  39. hkpRemoveTerminalsMoppModifier( const hkpMoppCode* moppCode, const hkAabb& precalculatedAabb, const hkArray<hkpShapeKey>& keysToRemove );
  40. virtual ~hkpRemoveTerminalsMoppModifier();
  41. hkpRemoveTerminalsMoppModifier (hkFinishLoadedObjectFlag f) : hkReferencedObject(f), m_removeInfo(f) {}
  42. /// Actually remove the terminals from the moppCode. This function is very fast.
  43. void applyRemoveTerminals( hkpMoppCode* moppCode );
  44. /// Undo the removal of the terminals.
  45. /// N.B. Modifiers must be 'undone' in the reverse order to that in which they
  46. /// were 'applied'. This function is very fast.
  47. void undoRemoveTerminals( hkpMoppCode* moppCode );
  48. protected:
  49. // hkpMoppModifier interface implementation
  50. virtual hkBool shouldTerminalBeRemoved( hkUint32 id, const hkUint32 *properties );
  51. // hkpMoppModifier interface implementation
  52. virtual void addTerminalRemoveInfo( hkInt32 relativeMoppAddress );
  53. private:
  54. /// This member stores history of what has been removed from the MOPP code.
  55. /// Bits 0-7:  The original MOPP code instruction.
  56. /// Bits 8-31: The offset in the MOPP where the instruction was located.
  57. hkArray<hkUint32> m_removeInfo;
  58. /// for construction only
  59. const hkArray<hkpShapeKey>* m_tempShapesToRemove; //+nosave
  60. };
  61. #endif // HK_COLLIDE2_MOPP_REMOVE_TERMINALS_MODIFIER_H
  62. /*
  63. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  64. * Confidential Information of Havok.  (C) Copyright 1999-2009
  65. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  66. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  67. * rights, and intellectual property rights in the Havok software remain in
  68. * Havok and/or its suppliers.
  69. * Use of this software for evaluation purposes is subject to and indicates
  70. * acceptance of the End User licence Agreement for this product. A copy of
  71. * the license is included with this software and is also available at www.havok.com/tryhavok.
  72. */