Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

129 lines
3.4 KiB

  1. //========= Copyright Valve Corporation, All rights reserved. ============//
  2. //
  3. // Purpose:
  4. //
  5. //=============================================================================
  6. #ifndef MANIPULATOR_H
  7. #define MANIPULATOR_H
  8. #ifdef _WIN32
  9. #pragma once
  10. #endif
  11. #include "vgui_controls/Panel.h"
  12. #include "mathlib/vector.h"
  13. //-----------------------------------------------------------------------------
  14. // Manipulator interface
  15. //-----------------------------------------------------------------------------
  16. class IManipulator
  17. {
  18. public:
  19. virtual ~IManipulator(){}
  20. virtual void OnBeginManipulation( void ) = 0;
  21. virtual void OnAcceptManipulation( void ) = 0;
  22. virtual void OnCancelManipulation( void ) = 0;
  23. virtual void OnTick( void ) = 0;
  24. virtual void OnCursorMoved( int x, int y ) = 0;
  25. virtual void OnMousePressed( vgui::MouseCode code, int x, int y ) = 0;
  26. virtual void OnMouseReleased( vgui::MouseCode code, int x, int y ) = 0;
  27. virtual void OnMouseWheeled( int delta ) = 0;
  28. virtual void SetViewportSize( int w, int h ) = 0;
  29. };
  30. //-----------------------------------------------------------------------------
  31. // Base class helper for implementing manipulators
  32. //-----------------------------------------------------------------------------
  33. class CBaseManipulator : public IManipulator
  34. {
  35. public:
  36. CBaseManipulator()
  37. {
  38. m_nViewport[ 0 ] = m_nViewport[ 1 ] = 0;
  39. }
  40. virtual void OnTick( void ) {};
  41. virtual void OnBeginManipulation( void ) {}
  42. virtual void OnAcceptManipulation( void ) {};
  43. virtual void OnCancelManipulation( void ) {};
  44. virtual void OnCursorMoved( int x, int y ) {};
  45. virtual void OnMousePressed( vgui::MouseCode code, int x, int y ) {};
  46. virtual void OnMouseReleased( vgui::MouseCode code, int x, int y ) {};
  47. virtual void OnMouseWheeled( int delta ) {};
  48. virtual void SetViewportSize( int w, int h )
  49. {
  50. m_nViewport[ 0 ] = w;
  51. m_nViewport[ 1 ] = h;
  52. }
  53. protected:
  54. int m_nViewport[ 2 ];
  55. };
  56. //-----------------------------------------------------------------------------
  57. // Base class for manipulators which operate on transforms
  58. //-----------------------------------------------------------------------------
  59. class CTransformManipulator : public CBaseManipulator
  60. {
  61. public:
  62. CTransformManipulator( matrix3x4_t *pTransform );
  63. void SetTransform( matrix3x4_t *transform );
  64. matrix3x4_t *GetTransform();
  65. protected:
  66. matrix3x4_t *m_pTransform;
  67. };
  68. //-----------------------------------------------------------------------------
  69. // Standard maya-like transform manipulator
  70. //-----------------------------------------------------------------------------
  71. class CPotteryWheelManip : public CTransformManipulator
  72. {
  73. public:
  74. CPotteryWheelManip( matrix3x4_t *pTransform );
  75. virtual void OnBeginManipulation( void );
  76. virtual void OnAcceptManipulation( void );
  77. virtual void OnCancelManipulation( void );
  78. virtual void OnTick( void );
  79. virtual void OnCursorMoved( int x, int y );
  80. virtual void OnMousePressed( vgui::MouseCode code, int x, int y );
  81. virtual void OnMouseReleased( vgui::MouseCode code, int x, int y );
  82. virtual void OnMouseWheeled( int delta );
  83. // Sets the zoom level
  84. void SetZoom( float flZoom );
  85. protected:
  86. int m_lastx, m_lasty;
  87. float m_zoom;
  88. float m_altitude, m_azimuth;
  89. //vec3 m_lookat
  90. float m_prevZoom;
  91. float m_prevAltitude, m_prevAzimuth;
  92. float m_flLastMouseTime;
  93. float m_flLastTickTime;
  94. float m_flSpin;
  95. bool m_bSpin;
  96. void UpdateTransform( void );
  97. void UpdateZoom( float delta );
  98. };
  99. #endif // MANIPULATOR_H