Clone of PhatAC @ https://github.com/floaterxk/PhatAC

Door.cpp 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #include "StdAfx.h"
  2. #include "PhysicsObj.h"
  3. #include "Door.h"
  4. #define DOOR_ANIMSET 0x09000023
  5. #define DOOR_OPEN 0x0B
  6. #define DOOR_CLOSED 0x0C
  7. CBaseDoor::CBaseDoor()
  8. {
  9. // Door properties should remain overridable.
  10. m_bOpen = FALSE;
  11. m_wOpenAnim = DOOR_OPEN;
  12. m_wCloseAnim = DOOR_CLOSED;
  13. m_WeenieBitfield |= BF_DOOR;
  14. m_strName = "Door";
  15. m_wTypeID = 0x19C;
  16. m_wIcon = 0x1317;
  17. m_dwModel = 0x0200027C; //0x19FF
  18. m_dwSoundSet = 0x20000023;
  19. m_dwEffectSet = 0x3400002B;
  20. m_fScale = 1.0f;
  21. m_PhysicsState = HAS_PHYSICS_BSP_PS | PhysicsState::REPORT_COLLISIONS_PS; //who the hell knows, collision related.
  22. m_ItemType = TYPE_MISC;
  23. m_Usability = USEABLE_REMOTE;
  24. m_UseDistance = 5.0f;
  25. m_dwAnimationSet = DOOR_ANIMSET;
  26. m_wForwardAnim = m_wCloseAnim;
  27. m_fForwardSpeed = 1.0f;
  28. m_fSpeedMod = 1.0f;
  29. }
  30. CBaseDoor::~CBaseDoor()
  31. {
  32. }
  33. void CBaseDoor::Precache()
  34. {
  35. //Load entity settings (location, and dynamic properties.)
  36. /*
  37. m_Origin.landcell = 0xA5B4003C;
  38. m_Origin.x = 174.3589935f;
  39. m_Origin.y = 77.19989777f;
  40. m_Origin.z = 46.08199692f;
  41. m_Angles.x = 1.0f;
  42. m_Angles.y = 0.0f;
  43. m_Angles.z = 0.0f;
  44. m_Angles.w = 0.0f;
  45. */
  46. }
  47. BOOL CBaseDoor::CloseThink()
  48. {
  49. if (m_bOpen)
  50. CloseDoor();
  51. return FALSE;
  52. }
  53. void CBaseDoor::OpenDoor()
  54. {
  55. Animation_PlayPrimary(m_wOpenAnim, 1.0f, 2.0f);
  56. m_bOpen = TRUE;
  57. SetThink(&CBaseDoor::CloseThink);
  58. m_fNextThink = g_pGlobals->Time() + 30.0f; //Close door after 30 seconds.
  59. }
  60. void CBaseDoor::CloseDoor()
  61. {
  62. Animation_PlayPrimary(m_wCloseAnim, 1.0f, 2.0f);
  63. m_bOpen = FALSE;
  64. HaltThink();
  65. }
  66. void CBaseDoor::Use(CPhysicsObj *pOther)
  67. {
  68. // should check approach distance in a parent toggle class
  69. if (Animation_IsActive())
  70. return;
  71. if ((Vector(pOther->m_Origin) - Vector(m_Origin)).Length() < m_UseDistance)
  72. {
  73. if (!m_bOpen)
  74. OpenDoor();
  75. else
  76. CloseDoor();
  77. }
  78. }