2
0

camera_controller.cpp 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #include "camera_controller.h"
  2. #include "game/core/world.h"
  3. #include "game/systems/camera_service.h"
  4. #include "game/systems/game_state_serializer.h"
  5. #include "render/gl/camera.h"
  6. #include <QDebug>
  7. #include <cmath>
  8. CameraController::CameraController(Render::GL::Camera *camera,
  9. Game::Systems::CameraService *camera_service,
  10. Engine::Core::World *world)
  11. : m_camera(camera), m_camera_service(camera_service), m_world(world) {}
  12. void CameraController::move(float dx, float dz) {
  13. if (!m_camera || !m_camera_service) {
  14. return;
  15. }
  16. m_camera_service->move(*m_camera, dx, dz);
  17. }
  18. void CameraController::elevate(float dy) {
  19. if (!m_camera || !m_camera_service) {
  20. return;
  21. }
  22. m_camera_service->elevate(*m_camera, dy);
  23. }
  24. void CameraController::reset(int local_owner_id,
  25. const Game::Systems::LevelSnapshot &level) {
  26. if (!m_camera || !m_world || !m_camera_service) {
  27. return;
  28. }
  29. m_camera_service->resetCamera(*m_camera, *m_world, local_owner_id,
  30. level.player_unit_id);
  31. }
  32. void CameraController::zoom(float delta) {
  33. if (!m_camera || !m_camera_service) {
  34. return;
  35. }
  36. m_camera_service->zoom(*m_camera, delta);
  37. }
  38. auto CameraController::distance() const -> float {
  39. if (!m_camera || !m_camera_service) {
  40. return 0.0F;
  41. }
  42. return m_camera_service->get_distance(*m_camera);
  43. }
  44. void CameraController::yaw(float degrees) {
  45. if (!m_camera || !m_camera_service) {
  46. return;
  47. }
  48. m_camera_service->yaw(*m_camera, degrees);
  49. }
  50. void CameraController::orbit(float yaw_deg, float pitch_deg) {
  51. if (!m_camera || !m_camera_service) {
  52. return;
  53. }
  54. if (!std::isfinite(yaw_deg) || !std::isfinite(pitch_deg)) {
  55. qWarning() << "CameraController::orbit received invalid input, ignoring:"
  56. << yaw_deg << pitch_deg;
  57. return;
  58. }
  59. m_camera_service->orbit(*m_camera, yaw_deg, pitch_deg);
  60. }
  61. void CameraController::orbit_direction(int direction, bool shift) {
  62. if (!m_camera || !m_camera_service) {
  63. return;
  64. }
  65. m_camera_service->orbit_direction(*m_camera, direction, shift);
  66. }
  67. void CameraController::follow_selection(bool enable) {
  68. if (!m_camera || !m_world || !m_camera_service) {
  69. return;
  70. }
  71. m_camera_service->follow_selection(*m_camera, *m_world, enable);
  72. }
  73. void CameraController::set_follow_lerp(float alpha) {
  74. if (!m_camera || !m_camera_service) {
  75. return;
  76. }
  77. m_camera_service->set_follow_lerp(*m_camera, alpha);
  78. }
  79. void CameraController::update_follow(bool follow_enabled) {
  80. if (follow_enabled && m_camera && m_world && m_camera_service) {
  81. m_camera_service->update_follow(*m_camera, *m_world, follow_enabled);
  82. }
  83. }