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

其他游戏

开发平台:

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 HK_BASE_LOCAL_FRAME_H
  9. #define HK_BASE_LOCAL_FRAME_H
  10. class hkLocalFrameCollector;
  11. class hkLocalFrameGroup;
  12. /// An abstract local frame that can be part of a hierarchy of local frames.
  13. class hkLocalFrame : public hkReferencedObject
  14. {
  15. public:
  16. HK_DECLARE_REFLECTION();
  17. HK_DECLARE_CLASS_ALLOCATOR( HK_MEMORY_CLASS_BASE );
  18. /// Default constructor does nothing.
  19. hkLocalFrame() {}
  20. /// Finish constructor (for internal use).
  21. hkLocalFrame( hkFinishLoadedObjectFlag flag ) : hkReferencedObject(flag) {}
  22. /// Get the transform from the coordinates of this local frame to the coordinates
  23. /// at the root of the local frame hierarchy.
  24. void getTransformToRoot( hkTransform& transform ) const;
  25. /// Get the position of this local frame in the coordinates
  26. /// at the root of the local frame hierarchy.
  27. void getPositionInRoot( hkVector4& position ) const;
  28. /// Return the transform from the coordinates of this frame to 
  29. /// the coordinates of the parent frame.
  30. virtual void getLocalTransform( hkTransform& transform ) const = 0;
  31. /// Sets the local space transform
  32. virtual void setLocalTransform( const hkTransform& transform ) = 0;
  33. /// Return the position of this frame in the coordinates of the parent frame.
  34. /// The default implementation calls getLocalTransform() and then pulls the 
  35. /// position from the transform.
  36. virtual void getLocalPosition( hkVector4& position ) const;
  37. /// Get all of the frames near a given point.
  38. virtual void getNearbyFrames( const hkVector4& target, hkReal maxDistance, hkLocalFrameCollector& collector ) const = 0;
  39. /// Get the name of the character (can be HK_NULL).
  40. virtual const char* getName() const = 0;
  41. /// Get the local frame that is this frame's parent.
  42. virtual const hkLocalFrame* getParentFrame() const = 0;
  43. /// Set the local frame that is this frame's parent.
  44. virtual void setParentFrame( const hkLocalFrame* parentFrame ) = 0;
  45. /// Get the number of children of this local frame
  46. virtual int getNumChildFrames() const = 0;
  47. /// Get the i'th child of this hkLocalFrame
  48. virtual hkLocalFrame* getChildFrame( int i ) const = 0;
  49. /// Get the group to which this frame belongs.
  50. virtual const hkLocalFrameGroup* getGroup() const = 0;
  51. /// Set the group to which this frame belongs.
  52. virtual void setGroup( const hkLocalFrameGroup* localFrameGroup ) = 0;
  53. };
  54. /// An abstract class for collecting local frames.
  55. class hkLocalFrameCollector : public hkReferencedObject
  56. {
  57. public:
  58. HK_DECLARE_CLASS_ALLOCATOR( HK_MEMORY_CLASS_BASE );
  59. /// Add a local frame to the collector.
  60. virtual void addFrame( const hkLocalFrame* frame, hkReal distance ) = 0;
  61. };
  62. /// All the local frames with the same group name share a hkLocalFrameGroup.
  63. class hkLocalFrameGroup : public hkReferencedObject
  64. {
  65. //+vtable(true)
  66. public:
  67. HK_DECLARE_REFLECTION();
  68. HK_DECLARE_CLASS_ALLOCATOR( HK_MEMORY_CLASS_BASE );
  69. /// Default constructor( The memory associated with the name must be managed by the you ).
  70. hkLocalFrameGroup( const char* name ) : m_name(name) {}
  71. /// Finish constructor (for internal use).
  72. hkLocalFrameGroup( hkFinishLoadedObjectFlag flag ) : hkReferencedObject(flag) {}
  73. /// Get the name of the group (cannot be HK_NULL).
  74. const char* getName() const { return m_name; }
  75. private:
  76. /// The name of this group (unmanaged memory).
  77. const char* m_name;
  78. };
  79. /// A local frame that stores a transform, name, and parent and children pointers.
  80. class hkSimpleLocalFrame : public hkLocalFrame
  81. {
  82. public:
  83. // +version(1)
  84. HK_DECLARE_REFLECTION();
  85. HK_DECLARE_CLASS_ALLOCATOR( HK_MEMORY_CLASS_BASE );
  86. /// Default constructor does nothing.
  87. hkSimpleLocalFrame() : m_parentFrame(HK_NULL), m_group(HK_NULL), m_name(HK_NULL) {}
  88. /// Finish constructor (for internal use).
  89. hkSimpleLocalFrame( hkFinishLoadedObjectFlag flag ) : hkLocalFrame(flag), m_children(flag) {}
  90. /// Destructor removes references to the children.
  91. ~hkSimpleLocalFrame();
  92. // hkLocalFrame implementation
  93. virtual void getLocalTransform( hkTransform& transform ) const;
  94. /// Sets the local space transform
  95. virtual void setLocalTransform( const hkTransform& transform );
  96. // hkLocalFrame implementation
  97. virtual void getLocalPosition( hkVector4& position ) const;
  98. // hkLocalFrame implementation
  99. virtual void getNearbyFrames( const hkVector4& target, hkReal maxDistance, hkLocalFrameCollector& collector ) const;
  100. // hkLocalFrame implementation
  101. virtual const char* getName() const { return m_name; }
  102. // hkLocalFrame implementation
  103. virtual const hkLocalFrame* getParentFrame() const { return m_parentFrame; }
  104. // hkLocalFrame implementation
  105. virtual void setParentFrame( const hkLocalFrame* parentFrame ) { m_parentFrame = parentFrame; }
  106. // hkLocalFrame implementation
  107. virtual int getNumChildFrames() const;
  108. // hkLocalFrame implementation
  109. virtual hkLocalFrame* getChildFrame( int i ) const;
  110. // hkLocalFrame implementation
  111. virtual const hkLocalFrameGroup* getGroup() const { return m_group; }
  112. // hkLocalFrame implementation
  113. virtual void setGroup( const hkLocalFrameGroup* group );
  114. /// Transforms points from this coordinate frame to the coordinate system of the parent frame.
  115. hkTransform m_transform;
  116. /// The children of this frame. This frame owns the children, so a reference will be removed
  117. /// when this frame is destroyed.  If you build one of these objects in code, make sure
  118. /// to add a reference to each child.
  119. hkArray<class hkLocalFrame*> m_children;
  120. /// The parent frame.  This frame does not own the parent, so we don't do any reference counting.
  121. const hkLocalFrame* m_parentFrame;
  122. /// The group that this local frame belongs to (can be HK_NULL).
  123. const hkLocalFrameGroup* m_group;
  124. /// The name of this frame (unmanaged memory).
  125. const char* m_name;
  126. };
  127. #endif 
  128. /*
  129. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  130. * Confidential Information of Havok.  (C) Copyright 1999-2009
  131. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  132. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  133. * rights, and intellectual property rights in the Havok software remain in
  134. * Havok and/or its suppliers.
  135. * Use of this software for evaluation purposes is subject to and indicates
  136. * acceptance of the End User licence Agreement for this product. A copy of
  137. * the license is included with this software and is also available at www.havok.com/tryhavok.
  138. */