Viewport4.h 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. /******************************************************************************/
  2. namespace Edit{
  3. /******************************************************************************/
  4. const_mem_addr struct Viewport4
  5. {
  6. enum VIEW_TYPE : Byte // view type
  7. {
  8. VIEW_TOP ,
  9. VIEW_DIAGONAL,
  10. VIEW_FRONT ,
  11. VIEW_LEFT ,
  12. VIEW_NUM ,
  13. };
  14. enum ORIENT_MODE : Byte // orientation mode
  15. {
  16. ORIENT_NONE , // disabled
  17. ORIENT_TOP_LEFT, // visible in top left corner
  18. ORIENT_RIGHT , // visible in right side
  19. };
  20. enum MOVE_MODE : Byte // movement mode
  21. {
  22. MOVE_NONE ,
  23. MOVE_DPAD ,
  24. MOVE_APAD ,
  25. MOVE_DRAG ,
  26. MOVE_ARROWS,
  27. };
  28. STRUCT(ViewportEx , Viewport)
  29. //{
  30. virtual void draw(C GuiPC &gpc);
  31. };
  32. struct View
  33. {
  34. ViewportEx viewport;
  35. Camera camera ;
  36. void setViewportCamera(); // manually activate the viewport and camera of this view
  37. }view[VIEW_NUM];
  38. STRUCT(DPad , GuiCustom)
  39. //{
  40. Bool touched;
  41. Flt angle;
  42. VecI2 axis;
  43. Viewport4 *v4;
  44. View *view;
  45. DPad() {v4=null; view=null; touched=false; angle=0; axis=0;}
  46. DPad& create(Viewport4 *v4, View *view);
  47. virtual GuiObj* test (C GuiPC &gpc, C Vec2 &pos, GuiObj* &mouse_wheel);
  48. virtual void update(C GuiPC &gpc);
  49. virtual void draw (C GuiPC &gpc);
  50. };
  51. STRUCT(DPadY , GuiCustom)
  52. //{
  53. Int dir;
  54. Viewport4 *v4;
  55. View *view;
  56. DPadY() {v4=null; view=null; dir=0;}
  57. DPadY& create(Viewport4 *v4, View *view);
  58. virtual void update(C GuiPC &gpc);
  59. virtual void draw (C GuiPC &gpc);
  60. };
  61. STRUCT(Zoom , GuiCustom)
  62. //{
  63. Flt zoom;
  64. Viewport4 *v4;
  65. View *view;
  66. Zoom() {v4=null; view=null; zoom=0;}
  67. Zoom& create(Viewport4 *v4, View *view);
  68. virtual void update(C GuiPC &gpc);
  69. virtual void draw (C GuiPC &gpc);
  70. };
  71. // manage
  72. Viewport4& create(void (*draw)(Viewport&), Flt default_pitch=0, Flt default_yaw=0, Flt default_dist=1, Flt from=0.01f, Flt range=100); // create and use 'draw' function for viewport drawing
  73. // get / set
  74. Flt minDist ()C; // get minimum camera distance
  75. Flt maxDist ()C; // get maximum camera distance
  76. Bool visible ()C; Viewport4& visible (Bool on ); // get/set viewport visibility
  77. C Rect& rect ()C {return _rect ;} Viewport4& rect (C Rect &rect ); // get/set viewport rectangle
  78. Bool fpp ()C {return _fpp ;} Viewport4& fpp (Bool on ); // get/set if camera in fpp mode
  79. Bool lock ()C {return _lock ;} Viewport4& lock (Bool on ); // get/set if camera in lock mode
  80. Bool perspective()C {return _perspective;} Viewport4& perspective(Bool on ); // get/set if perspective view mode
  81. Bool horizontal ()C {return _horizontal ;} Viewport4& horizontal (Bool on ); // get/set if horizontal movement mode
  82. Bool keyboard ()C {return _keyboard ;} Viewport4& keyboard (Bool on ); // get/set if keyboard movement enabled
  83. Int sel ()C {return _sel ;} Viewport4& sel (Int view ); // get/set selected view (VIEW_TYPE), -1=all
  84. Flt fppSpeed ()C {return _fpp_speed ;} Viewport4& fppSpeed (Flt speed); // get/set FPP camera speed, default=5
  85. Flt perspFov ()C {return _persp_fov ;} Viewport4& perspFov (Flt fov ); // get/set perspective FOV , default=DegToRad(70)
  86. Bool drawZoom ()C {return _draw_zoom ;} Viewport4& drawZoom (Bool on ); // get/set camera zoom visibility
  87. ORIENT_MODE orientMode ()C {return _orn_mode ;} Viewport4& orientMode (ORIENT_MODE mode ); // get/set camera orientation mode
  88. MOVE_MODE moveMode ()C {return _move_mode ;} Viewport4& moveMode ( MOVE_MODE mode ); // get/set camera movement mode
  89. View *last ()C {return _last ;} // get view that was last active, null if none
  90. View *focus ()C {return _focus ;} // get view with mouse focus , null if none
  91. View *getView (GuiObj *go); // get view from gui object , null if none, this method tests if 'go' belongs to any of the views, if so then it returns view associated with that object
  92. #if EE_PRIVATE
  93. View *getViewCtrl(GuiObj *go); // get view from gui object , null if none, this method tests if 'go' belongs to any of the views, if so then it returns view associated with that object
  94. Flt moveScale (View &view, Bool time=true)C; // get keyboard movement scale for 'view'
  95. void setRect ();
  96. void setCubeRect();
  97. #endif
  98. // operations
  99. Viewport4& show ( ) {return visible(true );}
  100. Viewport4& hide ( ) {return visible(false);}
  101. Viewport4& resetPosOrn ( ); // reset position and orientation
  102. Viewport4& axisAlign ( ); // align the cameras to axis
  103. Viewport4& moveTo (C VecD &pos ); // move camera focus to 'pos'
  104. Viewport4& dist ( Flt dist); // set camera distance
  105. Viewport4& toggleView ( Int view); // toggle selected view
  106. Viewport4& toggleOrientMode (ORIENT_MODE mode); // toggle orientation mode
  107. Viewport4& toggleMoveMode ( MOVE_MODE mode); // toggle movement mode
  108. Viewport4& toggleZoom ( ); // toggle drawing zoom pad
  109. Viewport4& togglePerspective( ); // toggle perspective view
  110. Viewport4& toggleHorizontal ( ); // toggle horizontal movement
  111. Viewport4& toggleKeyboard ( ); // toggle keyboard movement
  112. Viewport4& toggleFpp ( ); // toggle fpp view
  113. Viewport4& toggleLock ( ); // toggle cameras lock
  114. Viewport4& setViewportCamera( ); // manually activate the viewport and camera of last active view
  115. // update
  116. void update();
  117. #if !EE_PRIVATE
  118. private:
  119. #endif
  120. STRUCT(Cube , GuiCustom)
  121. //{
  122. Int part;
  123. MeshPtr mesh;
  124. Viewport4 *v4;
  125. View *view;
  126. Cube() {part=-1; v4=null; view=null;}
  127. #if EE_PRIVATE
  128. Cube& create(Viewport4 &v4, View &view);
  129. void setView(C GuiPC &gpc, Display::ViewportSettings &view, Camera &camera, MatrixM &matrix);
  130. void resetView( C Display::ViewportSettings &view, C Camera &camera);
  131. #endif
  132. virtual GuiObj* test (C GuiPC &gpc, C Vec2 &pos, GuiObj* &mouse_wheel);
  133. virtual void update(C GuiPC &gpc);
  134. virtual void draw (C GuiPC &gpc);
  135. };
  136. STRUCT(APad , GuiCustom)
  137. //{
  138. Bool touched;
  139. Vec2 start, cur;
  140. Viewport4 *v4;
  141. View *view;
  142. APad() {v4=null; view=null; touched=false;}
  143. APad& create(Viewport4 &v4, View &view);
  144. virtual GuiObj* test (C GuiPC &gpc, C Vec2 &pos, GuiObj* &mouse_wheel);
  145. virtual void update(C GuiPC &gpc);
  146. virtual void draw (C GuiPC &gpc);
  147. };
  148. STRUCT(APadY , GuiCustom)
  149. //{
  150. Bool touched;
  151. Flt start, cur;
  152. Viewport4 *v4;
  153. View *view;
  154. APadY() {v4=null; view=null; touched=false;}
  155. APadY& create(Viewport4 &v4, View &view);
  156. virtual void update(C GuiPC &gpc);
  157. virtual void draw (C GuiPC &gpc);
  158. };
  159. STRUCT(Drag , GuiCustom)
  160. //{
  161. Viewport4 *v4;
  162. View *view;
  163. Drag() {v4=null; view=null;}
  164. Drag& create(Viewport4 &v4, View &view);
  165. virtual GuiObj* test (C GuiPC &gpc, C Vec2 &pos, GuiObj* &mouse_wheel);
  166. virtual void update(C GuiPC &gpc);
  167. virtual void draw (C GuiPC &gpc);
  168. };
  169. STRUCT(DragY , GuiCustom)
  170. //{
  171. Viewport4 *v4;
  172. View *view;
  173. DragY() {v4=null; view=null;}
  174. DragY& create(Viewport4 &v4, View &view);
  175. virtual void update(C GuiPC &gpc);
  176. virtual void draw (C GuiPC &gpc);
  177. };
  178. STRUCT(Arrows , GuiCustom)
  179. //{
  180. Bool arrow_pushed[DIR_NUM];
  181. Rect arrow_rect [DIR_NUM];
  182. Viewport4 *v4;
  183. View *view;
  184. Arrows() {v4=null; view=null; Zero(arrow_pushed);}
  185. Arrows& create(Viewport4 &v4, View &view);
  186. virtual GuiObj& rect (C Rect &rect);
  187. virtual void update(C GuiPC &gpc );
  188. virtual void draw (C GuiPC &gpc );
  189. };
  190. Bool _perspective, _horizontal, _keyboard, _fpp, _lock, _draw_zoom;
  191. ORIENT_MODE _orn_mode;
  192. MOVE_MODE _move_mode;
  193. Int _sel;
  194. Flt _fpp_speed,
  195. _persp_fov,
  196. _default_pitch,
  197. _default_yaw ,
  198. _default_dist ,
  199. _rotate_time ;
  200. Vec2 _rotate_yaw ,
  201. _rotate_pitch ;
  202. Rect _rect;
  203. View *_focus, *_last, *_rotate_view;
  204. Cube _cube [VIEW_NUM];
  205. Zoom _zoom [VIEW_NUM];
  206. DPad _dpad [VIEW_NUM];
  207. DPadY _dpady [VIEW_NUM];
  208. APad _apad [VIEW_NUM];
  209. APadY _apady [VIEW_NUM];
  210. Drag _drag [VIEW_NUM];
  211. DragY _dragy [VIEW_NUM];
  212. Arrows _arrows[VIEW_NUM];
  213. };
  214. /******************************************************************************/
  215. } // namespace
  216. /******************************************************************************/
  217. void operator+=(GuiObj &gui_obj, Edit::Viewport4 &child); // add child
  218. void operator-=(GuiObj &gui_obj, Edit::Viewport4 &child); // remove child
  219. /******************************************************************************/