💿🐜 Antkeeper source code https://antkeeper.com
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.

309 lines
7.6 KiB

3 years ago
  1. /*
  2. * Copyright (C) 2021 Christopher J. Howard
  3. *
  4. * This file is part of Antkeeper source code.
  5. *
  6. * Antkeeper source code is free software: you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation, either version 3 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * Antkeeper source code is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with Antkeeper source code. If not, see <http://www.gnu.org/licenses/>.
  18. */
  19. #ifndef ANTKEEPER_ENTITY_SYSTEM_CONTROL_HPP
  20. #define ANTKEEPER_ENTITY_SYSTEM_CONTROL_HPP
  21. #include "entity/systems/updatable.hpp"
  22. #include "entity/id.hpp"
  23. #include "event/event-handler.hpp"
  24. #include "event/input-events.hpp"
  25. #include "event/window-events.hpp"
  26. #include "input/control.hpp"
  27. #include "input/control-set.hpp"
  28. #include "scene/model-instance.hpp"
  29. #include "utility/fundamental-types.hpp"
  30. #include "scene/camera.hpp"
  31. class nest;
  32. namespace entity {
  33. namespace system {
  34. class camera;
  35. class control:
  36. public updatable,
  37. public event_handler<mouse_moved_event>,
  38. public event_handler<window_resized_event>
  39. {
  40. public:
  41. control(entity::registry& registry);
  42. virtual void update(double t, double dt);
  43. void set_invert_mouse_x(bool invert);
  44. void set_invert_mouse_y(bool invert);
  45. void set_camera_system(system::camera* camera_system);
  46. void set_nest(::nest* nest);
  47. void set_tool(scene::model_instance* tool);
  48. void set_flashlight(entity::id entity_id);
  49. void set_camera_subject(entity::id entity_id);
  50. void set_viewport(const float4& viewport);
  51. void set_underground_camera(scene::camera* camera);
  52. input::control_set* get_control_set();
  53. input::control* get_move_forward_control();
  54. input::control* get_move_back_control();
  55. input::control* get_move_left_control();
  56. input::control* get_move_right_control();
  57. input::control* get_rotate_ccw_control();
  58. input::control* get_rotate_cw_control();
  59. input::control* get_tilt_up_control();
  60. input::control* get_tilt_down_control();
  61. input::control* get_zoom_in_control();
  62. input::control* get_zoom_out_control();
  63. input::control* get_adjust_camera_control();
  64. input::control* get_ascend_control();
  65. input::control* get_descend_control();
  66. input::control* get_toggle_view_control();
  67. input::control* get_tool_menu_control();
  68. input::control* get_equip_lens_control();
  69. input::control* get_equip_brush_control();
  70. input::control* get_equip_forceps_control();
  71. input::control* get_equip_marker_control();
  72. input::control* get_equip_container_control();
  73. input::control* get_equip_twig_control();
  74. input::control* get_next_marker_control();
  75. input::control* get_previous_marker_control();
  76. input::control* get_use_tool_control();
  77. input::control* get_fast_forward_control();
  78. input::control* get_rewind_control();
  79. input::control* get_exposure_increase_control();
  80. input::control* get_exposure_decrease_control();
  81. private:
  82. virtual void handle_event(const mouse_moved_event& event);
  83. virtual void handle_event(const window_resized_event& event);
  84. input::control_set control_set;
  85. input::control move_forward_control;
  86. input::control move_back_control;
  87. input::control move_left_control;
  88. input::control move_right_control;
  89. input::control rotate_ccw_control;
  90. input::control rotate_cw_control;
  91. input::control tilt_up_control;
  92. input::control tilt_down_control;
  93. input::control zoom_in_control;
  94. input::control zoom_out_control;
  95. input::control adjust_camera_control;
  96. input::control ascend_control;
  97. input::control descend_control;
  98. input::control toggle_view_control;
  99. input::control tool_menu_control;
  100. input::control equip_lens_control;
  101. input::control equip_brush_control;
  102. input::control equip_forceps_control;
  103. input::control equip_marker_control;
  104. input::control equip_container_control;
  105. input::control equip_twig_control;
  106. input::control next_marker_control;
  107. input::control previous_marker_control;
  108. input::control use_tool_control;
  109. input::control fast_forward_control;
  110. input::control rewind_control;
  111. input::control exposure_increase_control;
  112. input::control exposure_decrease_control;
  113. float zoom_speed;
  114. float min_elevation;
  115. float max_elevation;
  116. float near_focal_distance;
  117. float far_focal_distance;
  118. float near_movement_speed;
  119. float far_movement_speed;
  120. float near_fov;
  121. float far_fov;
  122. float near_clip_near;
  123. float far_clip_near;
  124. float near_clip_far;
  125. float far_clip_far;
  126. float timestep;
  127. float zoom;
  128. system::camera* camera_system;
  129. ::nest* nest;
  130. scene::model_instance* tool;
  131. float2 mouse_position;
  132. float4 viewport;
  133. entity::id flashlight_entity;
  134. entity::id camera_subject_entity;
  135. scene::camera* underground_camera;
  136. float mouse_angle;
  137. float old_mouse_angle;
  138. float flashlight_turns;
  139. float flashlight_turns_i;
  140. float flashlight_turns_f;
  141. };
  142. inline input::control_set* control::get_control_set()
  143. {
  144. return &control_set;
  145. }
  146. inline input::control* control::get_move_forward_control()
  147. {
  148. return &move_forward_control;
  149. }
  150. inline input::control* control::get_move_back_control()
  151. {
  152. return &move_back_control;
  153. }
  154. inline input::control* control::get_move_left_control()
  155. {
  156. return &move_left_control;
  157. }
  158. inline input::control* control::get_move_right_control()
  159. {
  160. return &move_right_control;
  161. }
  162. inline input::control* control::get_rotate_ccw_control()
  163. {
  164. return &rotate_ccw_control;
  165. }
  166. inline input::control* control::get_rotate_cw_control()
  167. {
  168. return &rotate_cw_control;
  169. }
  170. inline input::control* control::get_tilt_up_control()
  171. {
  172. return &tilt_up_control;
  173. }
  174. inline input::control* control::get_tilt_down_control()
  175. {
  176. return &tilt_down_control;
  177. }
  178. inline input::control* control::get_zoom_in_control()
  179. {
  180. return &zoom_in_control;
  181. }
  182. inline input::control* control::get_zoom_out_control()
  183. {
  184. return &zoom_out_control;
  185. }
  186. inline input::control* control::get_adjust_camera_control()
  187. {
  188. return &adjust_camera_control;
  189. }
  190. inline input::control* control::get_ascend_control()
  191. {
  192. return &ascend_control;
  193. }
  194. inline input::control* control::get_descend_control()
  195. {
  196. return &descend_control;
  197. }
  198. inline input::control* control::get_toggle_view_control()
  199. {
  200. return &toggle_view_control;
  201. }
  202. inline input::control* control::get_tool_menu_control()
  203. {
  204. return &tool_menu_control;
  205. }
  206. inline input::control* control::get_equip_lens_control()
  207. {
  208. return &equip_lens_control;
  209. }
  210. inline input::control* control::get_equip_brush_control()
  211. {
  212. return &equip_brush_control;
  213. }
  214. inline input::control* control::get_equip_forceps_control()
  215. {
  216. return &equip_forceps_control;
  217. }
  218. inline input::control* control::get_equip_marker_control()
  219. {
  220. return &equip_marker_control;
  221. }
  222. inline input::control* control::get_equip_container_control()
  223. {
  224. return &equip_container_control;
  225. }
  226. inline input::control* control::get_equip_twig_control()
  227. {
  228. return &equip_twig_control;
  229. }
  230. inline input::control* control::get_next_marker_control()
  231. {
  232. return &next_marker_control;
  233. }
  234. inline input::control* control::get_previous_marker_control()
  235. {
  236. return &previous_marker_control;
  237. }
  238. inline input::control* control::get_use_tool_control()
  239. {
  240. return &use_tool_control;
  241. }
  242. inline input::control* control::get_fast_forward_control()
  243. {
  244. return &fast_forward_control;
  245. }
  246. inline input::control* control::get_rewind_control()
  247. {
  248. return &rewind_control;
  249. }
  250. inline input::control* control::get_exposure_increase_control()
  251. {
  252. return &exposure_increase_control;
  253. }
  254. inline input::control* control::get_exposure_decrease_control()
  255. {
  256. return &exposure_decrease_control;
  257. }
  258. } // namespace system
  259. } // namespace entity
  260. #endif // ANTKEEPER_ENTITY_SYSTEM_CONTROL_HPP