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

其他游戏

开发平台:

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 HKSCENEEXPORT_ATTRIBUTE_DESCRIPTION__H
  9. #define HKSCENEEXPORT_ATTRIBUTE_DESCRIPTION__H
  10. extern const hkClass hctAttributeDescriptionClass;
  11. extern const hkClass hctAttributeGroupDescriptionClass;
  12. extern const hkClass hctAttributeDescriptionDatabaseClass;
  13. extern const hkTypeInfo hctAttributeDescriptionTypeInfo;
  14. extern const hkTypeInfo hctAttributeGroupDescriptionTypeInfo;
  15. extern const hkTypeInfo hctAttributeDescriptionDatabaseTypeInfo;
  16. /// An attribute description object contains information about an attribute that can be used by
  17. /// an exporter to complement the data given by the modeler regarding that attribute. This is useful
  18. /// in order to support attribute types and hints not natively supported by the modeler.
  19. struct hctAttributeDescription
  20. {
  21. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_EXPORT, hctAttributeDescription );
  22. HK_DECLARE_REFLECTION();
  23. /// Name of the attribute we are describing
  24. const char* m_name;
  25. /// If a boolean attribute with the given name is not set to true, then this attribute is ignored.
  26. /// Note : From 4.0, attributes are usually automatically enabled/disabled if another bool/int attribute named
  27. /// "changeXXX" (where XXX is the name of this attribute) is found. This is done in hctAttributeProcessingUtil::processAttributeGroup().
  28. const char* m_enabledBy;
  29. /// Sometimes the modeler may use a type that doesn't match the expected final type.
  30. /// We can force a conversion by specifying one of these enums in m_forceType.
  31. enum ForcedType
  32. {
  33. LEAVE,
  34. FORCE_BOOL,
  35. FORCE_INT,
  36. FORCE_ENUM,
  37. FORCE_FLOAT,
  38. FORCE_STRING,
  39. FORCE_VECTOR,
  40. FORCE_MATRIX,
  41. FORCE_QUATERNION,
  42. };
  43. /// (Possibly) force this attribute to be of the given type.
  44. hkEnum<ForcedType,hkInt8> m_forcedType;
  45. /// For attributes with FORCE_ENUM, this describes the enum used for the given attribute.
  46. class hkClassEnum* m_enum;
  47. // Note : There should be a one to one mapping between this enum and the hkxattrib enum (serialization
  48. // doesn't like referencing it from here)
  49. /// This hint specifies extra information for the attribute; in particular, for numeric (float, vector) attributes
  50. /// it describes how it should be transformed if the scene is transformed.
  51. enum Hint 
  52. {
  53. /// No hint
  54. HINT_NONE = 0, 
  55. /// This attribute should be ignored
  56. HINT_IGNORE = 1, 
  57. /// This attribute should be fully transformed (rotated) but not scaled: it is a direction
  58. HINT_TRANSFORM = 2, 
  59. /// This attribute should be scaled : it is a distance
  60. HINT_SCALE = 4, 
  61. /// This attribute should be fully fully transformed and scaled : it is a position
  62. HINT_TRANSFORM_AND_SCALE= 6, 
  63. /// This attribute should be flipped upon handness flip : it is an angle
  64. HINT_FLIP = 8 
  65. };
  66. /// Want to know if it has a special meaning or usage
  67. hkEnum<Hint,hkInt8> m_hint;
  68. /// If true, the above hint(s) will override any previous hints - otherwise they will be OR-ed
  69. hkBool m_clearHints;
  70. /// Float attributes will be scaled by this value. It used to transform degrees into radians (in XSI)
  71. hkReal m_floatScale; 
  72. /// Constructor, sets defaults.
  73. hctAttributeDescription();
  74. };
  75. /// hctAttributeDescription objects are grouped in hctAttributeGroupDescription objects, 
  76. /// just as hkxAttribute objects are grouped in hkxAttributeGroup objects.
  77. struct hctAttributeGroupDescription
  78. {
  79. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_EXPORT, hctAttributeGroupDescription );
  80. HK_DECLARE_REFLECTION();
  81. /// Finds an attribute description by name in this attribute group description.
  82. hctAttributeDescription* findAttributeDescriptionByName (const char* name) const;
  83. /// The name of the attribute group description (should match the name of the hkxAttributeGroup it describes).
  84. /// For example: "hkRigidBody"
  85. const char* m_name;
  86. /// The array of hctAttributeDescription objects in this group.
  87. struct hctAttributeDescription* m_attributeDescriptions;
  88. /// The number of hctAttributeDescription objects in this group.
  89. int m_numAttributeDescriptions;
  90. };
  91. /// An hctAttributeDescriptionDatabase object stores descriptions for all attributes and attribute groups.
  92. /// It contains an array of hctAttributeGroupDescription objects.
  93. struct hctAttributeDescriptionDatabase
  94. {
  95. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_EXPORT, hctAttributeDescriptionDatabase );
  96. HK_DECLARE_REFLECTION();
  97. /// Searches for a description for a group by name.
  98. /// If found (not NULL) then use hctAttributeGroupDescription::findAttributeDescriptionByName
  99. /// to look for specific attribute data.
  100. struct hctAttributeGroupDescription* findAttributeDescriptionGroupByName (const char* name) const;
  101. /// The array of hctAttributeGroupDescription objects in the database.
  102. struct hctAttributeGroupDescription* m_groupDescriptions;
  103. /// The number of hctAttributeGroupDescription objects in the database.
  104. int m_numGroupDescriptions;
  105. };
  106. #endif // HKSCENEEXPORT_ATTRIBUTE_DESCRIPTION__H
  107. /*
  108. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  109. * Confidential Information of Havok.  (C) Copyright 1999-2009
  110. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  111. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  112. * rights, and intellectual property rights in the Havok software remain in
  113. * Havok and/or its suppliers.
  114. * Use of this software for evaluation purposes is subject to and indicates
  115. * acceptance of the End User licence Agreement for this product. A copy of
  116. * the license is included with this software and is also available at www.havok.com/tryhavok.
  117. */