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

其他游戏

开发平台:

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_ATTRIBUTE_CLASS_H
  9. #define HK_ATTRIBUTE_CLASS_H
  10. #include <Common/Base/Reflection/hkClassMember.h>
  11. #include <Common/Base/Reflection/hkClassEnum.h>
  12. #include <Common/Base/Math/hkMath.h>
  13. extern const hkClass hkRangeRealAttributeClass;
  14. /// An attribute for specifying the range of possible values for an hkReal.
  15. struct hkRangeRealAttribute
  16. {
  17. //+defineattribute(true)
  18. public:
  19. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_HKCLASS, hkRangeRealAttribute );
  20. HK_DECLARE_REFLECTION();
  21. inline hkRangeRealAttribute(hkReal absmin, hkReal absmax, hkReal softmin, hkReal softmax) :
  22. m_absmin(absmin), m_absmax(absmax), m_softmin(softmin), m_softmax(softmax)
  23. {
  24. HK_ASSERT2(0x2fd9e4a5, m_absmin <= m_absmax, "Make sure that absmin is less or equal than absmax.");
  25. HK_ASSERT2(0x2fd9e4a6, m_softmin <= m_softmax, "Make sure that softmin is less or equal than softmax.");
  26. HK_ASSERT2(0x2fd9e4a7, m_absmin <= m_softmin && m_softmax <= m_absmax, "Make sure that softmin and softmax are within [absmin,absmax] range.");
  27. }
  28. /// The value should never be lower than this.
  29. /// Default minimum is -HK_REAL_MAX.
  30. hkReal m_absmin;
  31. /// The value should never be higher than this.
  32. /// Default maximum is HK_REAL_MAX.
  33. hkReal m_absmax;
  34. /// The value should typically not by lower than this.
  35. hkReal m_softmin;
  36. /// The value should typically not be higher than this.
  37. hkReal m_softmax;
  38. };
  39. extern const hkClass hkRangeInt32AttributeClass;
  40. /// An attribute for specifying the range of possible values for an hkInt32.
  41. struct hkRangeInt32Attribute
  42. {
  43. //+defineattribute(true)
  44. public:
  45. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_HKCLASS, hkRangeInt32Attribute );
  46. HK_DECLARE_REFLECTION();
  47. inline hkRangeInt32Attribute(hkInt32 absmin, hkInt32 absmax, hkInt32 softmin, hkInt32 softmax) :
  48. m_absmin(absmin), m_absmax(absmax), m_softmin(softmin), m_softmax(softmax)
  49. {
  50. HK_ASSERT2(0x2fd9e4a8, m_absmin <= m_absmax, "Make sure that absmin is less or equal than absmax.");
  51. HK_ASSERT2(0x2fd9e4a9, m_softmin <= m_softmax, "Make sure that softmin is less or equal than softmax.");
  52. HK_ASSERT2(0x2fd9e4b0, m_absmin <= m_softmin && m_softmax <= m_absmax, "Make sure that softmin and softmax are within [absmin,absmax] range.");
  53. }
  54. /// The value should never be lower than this.
  55. /// Default minimum is HK_INT32_MIN.
  56. hkInt32 m_absmin;
  57. /// The value should never be higher than this.
  58. /// Default maximum is HK_INT32_MAX.
  59. hkInt32 m_absmax;
  60. /// The value should typically not by lower than this.
  61. hkInt32 m_softmin;
  62. /// The value should typically not be higher than this.
  63. hkInt32 m_softmax;
  64. };
  65. extern const hkClass hkUiAttributeClass;
  66. /// An attribute for specifying editor specific information (visibility, editability, ...)
  67. struct hkUiAttribute
  68. {
  69. //+defineattribute(true)
  70. //+version(1)
  71. public:
  72. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_HKCLASS, hkUiAttribute );
  73. HK_DECLARE_REFLECTION();
  74. // This is a bitfield(!) used to filter out certain modelers from displaying selected GUI elements.
  75. enum HideInModeler
  76. {
  77. NONE = 0,
  78. MAX  = 1, /// This member will not be displayed in 3ds Max's GUI.
  79. MAYA = 2, /// This member will not be displayed in Maya's GUI.
  80. };
  81. /// Defines whether the member is visible in an editor
  82. hkBool m_visible;
  83. /// Can be used to explicitly hide GUI elements in certain modelers.
  84. hkEnum<HideInModeler,hkInt8> m_hideInModeler;
  85. /// An alternative label for the GUI element.
  86. const char* m_label;
  87. /// Opens a new subgroup with the specified name.
  88. const char* m_group;
  89. /// Close the current subgroup.
  90. hkBool m_endGroup;
  91. /// Close a second subgroup on the same line. Kinda hacky right now.
  92. hkBool m_endGroup2;
  93. /// If set to true, this member will only show up under the 'Advanced Settings' section in the GUI.
  94. hkBool m_advanced;
  95. };
  96. extern const hkClass hkGizmoAttributeClass;
  97. /// An attribute for specifying visual editing aids ('Gizmos') to be displayed in the modeler
  98. struct hkGizmoAttribute
  99. {
  100. //+defineattribute(true)
  101. public:
  102. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_HKCLASS, hkGizmoAttribute );
  103. HK_DECLARE_REFLECTION();
  104. enum GizmoType
  105. {
  106. POINT = 0, ///
  107. SPHERE, ///
  108. PLANE, ///
  109. ARROW ///
  110. };
  111. /// Defines whether the gizmo is visible in the modeler
  112. hkBool m_visible;
  113. /// An alternative label for the GUI element.
  114. const char* m_label;
  115. /// The gizmo type.
  116. hkEnum<GizmoType,hkInt8> m_type;
  117. };
  118. extern const hkClass hkModelerNodeTypeAttributeClass;
  119. /// An attribute for specifying the type of base modeler node this class needs
  120. struct hkModelerNodeTypeAttribute
  121. {
  122. //+defineattribute(true)
  123. HK_DECLARE_REFLECTION();
  124. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_HKCLASS, hkModelerNodeTypeAttribute );
  125. enum ModelerType
  126. {
  127. DEFAULT = 0,
  128. LOCATOR, /// This class should use a locator type node.
  129. };
  130. /// Can be used to define the modeler node type
  131. hkEnum<ModelerType,hkInt8> m_type;
  132. };
  133. extern const hkClass hkLinkAttributeClass;
  134. /// An attribute for specifying the type of link for a class member (only appropriate for a pointer or string)
  135. struct hkLinkAttribute
  136. {
  137. //+defineattribute(true)
  138. HK_DECLARE_REFLECTION();
  139. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_HKCLASS, hkLinkAttribute );
  140. enum Link
  141. {
  142. NONE = 0,
  143. DIRECT_LINK, /// This member represents a link to the object being pointed to.
  144. CHILD, /// This member represents a link to an object which must child off the current object.
  145. MESH, /// This member represents a link to a mesh (as defined by the relevant external modeler/editor.
  146. PARENT_NAME, /// This member represents a link to the name of the object (effectively will store the name of the object in the string)
  147. };
  148. /// Can be used to define the link type
  149. hkEnum<Link,hkInt8> m_type;
  150. };
  151. extern const hkClass hkSemanticsAttributeClass;
  152. /// An attribute for specifying more details about a class member
  153. struct hkSemanticsAttribute
  154. {
  155. //+defineattribute(true)
  156. HK_DECLARE_REFLECTION();
  157. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_HKCLASS, hkSemanticsAttribute );
  158. enum Semantics
  159. {
  160. UNKNOWN = 0,
  161. DISTANCE,
  162. ANGLE,
  163. NORMAL,
  164. POSITION,
  165. };
  166. /// Can be used to define the parameter in more detail.
  167. hkEnum<Semantics,hkInt8> m_type;
  168. };
  169. extern const hkClass hkDescriptionAttributeClass;
  170. /// An attribute giving a string description to a class member.
  171. struct hkDescriptionAttribute
  172. {
  173. //+defineattribute(true)
  174. HK_DECLARE_REFLECTION();
  175. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_HKCLASS, hkDescriptionAttribute );
  176. /// The description string.
  177. char* m_string;
  178. };
  179. extern const hkClass hkArrayTypeAttributeClass;
  180. /// An attribute for specifying the type of an hkArray
  181. struct hkArrayTypeAttribute
  182. {
  183. //+defineattribute(true)
  184. HK_DECLARE_REFLECTION();
  185. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_HKCLASS, hkArrayTypeAttribute );
  186. enum ArrayType
  187. {
  188. NONE = 0,
  189. POINTSOUP, /// This member represents an array of points in space.
  190. };
  191. /// Can be used to define the array type
  192. hkEnum<ArrayType,hkInt8> m_type;
  193. };
  194. extern const hkClass hkDataObjectTypeAttributeClass;
  195. /// An attribute overriding reflected member type for hkDataObject.
  196. struct hkDataObjectTypeAttribute
  197. {
  198. //+defineattribute(true)
  199. HK_DECLARE_REFLECTION();
  200. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_HKCLASS, hkDataObjectTypeAttribute );
  201. /// The type name string.
  202. char* m_typeName;
  203. };
  204. extern const hkClass hkDocumentationAttributeClass;
  205. /// An attribute linking a class to the corresponding section in the documentation.
  206. struct hkDocumentationAttribute
  207. {
  208. //+defineattribute(true)
  209. HK_DECLARE_REFLECTION();
  210. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_HKCLASS, hkDocumentationAttribute );
  211. /// The XML tag linking to the section (SECT1) that holds the documentation.
  212. const char* m_docsSectionTag;
  213. };
  214. #endif // HK_ATTRIBUTE_CLASS_H
  215. /*
  216. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  217. * Confidential Information of Havok.  (C) Copyright 1999-2009
  218. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  219. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  220. * rights, and intellectual property rights in the Havok software remain in
  221. * Havok and/or its suppliers.
  222. * Use of this software for evaluation purposes is subject to and indicates
  223. * acceptance of the End User licence Agreement for this product. A copy of
  224. * the license is included with this software and is also available at www.havok.com/tryhavok.
  225. */