hkpFirstPersonGun.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. #ifndef HKP_FIRST_PERSON_GUN_H
  9. #define HKP_FIRST_PERSON_GUN_H
  10. #include <Common/Base/Reflection/Attributes/hkAttributes.h>
  11. #include <Common/Base/Types/Physics/ContactPoint/hkContactPoint.h>
  12. #include <Physics/Dynamics/Entity/hkpRigidBody.h>
  13. #include <Physics/Dynamics/World/hkpWorld.h>
  14. #include <Physics/Collide/Agent/Collidable/hkpCollidable.h>
  15. #include <Physics/Collide/Shape/Convex/Sphere/hkpSphereShape.h>
  16. /// Class for reacting on bullet creation/deletion etc.
  17. /// Guns that use a physics object as a bullet, should call the methods at appropriate places.
  18. /// warning This class is reference counted.
  19. class hkpFirstPersonGunBulletListener : public hkReferencedObject
  20. {
  21. public:
  22. HK_DECLARE_CLASS_ALLOCATOR(HK_MEMORY_CLASS_DEMO);
  23. /// Called after a bullet has been created before it is added to the world.
  24. virtual void bulletCreatedCallback(hkpRigidBody* bullet) {}
  25. /// Called before the bullet is removed from the world and destroyed.
  26. virtual void bulletDeletedCallback(hkpRigidBody* bullet) {}
  27. /// Called whenever the gun is fired. Both a from and a to are allowed to be NULL if the gun has no specific origin or target.
  28. virtual void gunFiredCallback(const hkVector4* from, const hkVector4* to) {}
  29. };
  30. extern const hkClass hkpFirstPersonGunClass;
  31. /// Base class for weapons, used by the Havok demos.
  32. /// One can register listeners to obtain bullet created/deleted events.
  33. /// Typical usage would be for creating/deleting graphics representations of the bullet.
  34. class hkpFirstPersonGun : public hkReferencedObject
  35. {
  36. public:
  37. HK_DECLARE_CLASS_ALLOCATOR(HK_MEMORY_CLASS_DEMO);
  38. HK_DECLARE_REFLECTION();
  39. enum Type
  40. {
  41. WEAPON_TYPE_INVALID = 0,
  42. WEAPON_TYPE_BALLGUN,
  43. WEAPON_TYPE_GRENADEGUN,
  44. WEAPON_TYPE_GRAVITYGUN,
  45. WEAPON_TYPE_MOUNTEDBALLGUN,
  46. WEAPON_TYPE_TWEAKERGUN,
  47. WEAPON_TYPE_MISSILEGUN,
  48. WEAPON_TYPE_RAYCASTGUN,
  49. WEAPON_TYPE_SPHEREGUN,
  50. WEAPON_TYPE_STICKYGUN,
  51. WEAPON_TYPE_NUM_TYPES
  52. };
  53. enum KeyboardKey
  54. {
  55. KEY_F1 = 0x70,
  56. KEY_F2 = 0x71,
  57. KEY_F3 = 0x72,
  58. KEY_F4 = 0x73,
  59. KEY_F5 = 0x74,
  60. KEY_F6 = 0x75,
  61. KEY_F7 = 0x76,
  62. KEY_F8 = 0x77,
  63. KEY_F9 = 0x78,
  64. KEY_F10 = 0x79,
  65. KEY_F11 = 0x7A,
  66. KEY_F12 = 0x7B
  67. };
  68. hkpFirstPersonGun();
  69. hkpFirstPersonGun(class hkFinishLoadedObjectFlag flag);
  70. ~hkpFirstPersonGun();
  71. public:
  72. /// Use to create gun display
  73. virtual void initGun( hkpWorld* world ) {}
  74. /// Fire bullets
  75. virtual void fireGun( hkpWorld* world, const hkTransform& viewTransform ) {}
  76. /// Use to update display, remove bullets from world etc
  77. virtual void stepGun( hkReal timeStep, hkpWorld* world, const hkpRigidBody* characterBody, const hkTransform& viewTransform, bool fire, bool fireRmb ) {}
  78. /// Use to clean up gun display
  79. virtual void quitGun( hkpWorld* world );
  80. /// Get the name of the gun
  81. virtual const char* getName() const;
  82. virtual void reset(hkpWorld* world) {}
  83. struct SweepSphereOut
  84. {
  85. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR(HK_MEMORY_CLASS_DEMO, hkpFirstPersonGun::SweepSphereOut);
  86. hkContactPoint m_contactPoint;
  87. hkpShapeKey m_shapeKey;
  88. hkpRigidBody* m_body;
  89. };
  90. static hkResult HK_CALL sweepSphere(const hkpWorld* world, const hkVector4& sweepStart, hkReal radius,  const hkVector4& sweepEnd, SweepSphereOut& out );
  91. static void     HK_CALL calcVelocityToTarget(const hkVector4& position, const hkVector4& target, const hkVector4& gravity, hkReal speed, hkVector4& velocity);
  92. public:
  93. hkEnum<Type, hkUint8> m_type;               //+nosave
  94. const char* m_name;                         //+default("") +hk.Ui(visible=false)
  95. hkEnum<KeyboardKey, hkUint8> m_keyboardKey; //+default(hkpFirstPersonGun::KEY_F2) +hk.Ui(visible=true)
  96. hkArray<hkpFirstPersonGunBulletListener*> m_listeners; //+nosave
  97. };
  98. #endif // HKP_FIRST_PERSON_GUN_H
  99. /*
  100. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  101. * Confidential Information of Havok.  (C) Copyright 1999-2009
  102. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  103. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  104. * rights, and intellectual property rights in the Havok software remain in
  105. * Havok and/or its suppliers.
  106. * Use of this software for evaluation purposes is subject to and indicates
  107. * acceptance of the End User licence Agreement for this product. A copy of
  108. * the license is included with this software and is also available at www.havok.com/tryhavok.
  109. */