production_manager.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #pragma once
  2. #include <QObject>
  3. #include <QString>
  4. #include <QVariantMap>
  5. #include <QVector3D>
  6. #include <vector>
  7. namespace Engine::Core {
  8. class World;
  9. using EntityID = unsigned int;
  10. } // namespace Engine::Core
  11. namespace Render::GL {
  12. class Camera;
  13. }
  14. namespace Game::Systems {
  15. class PickingService;
  16. }
  17. struct ViewportState;
  18. class ProductionManager : public QObject {
  19. Q_OBJECT
  20. public:
  21. explicit ProductionManager(Engine::Core::World *world,
  22. Game::Systems::PickingService *picking_service,
  23. Render::GL::Camera *camera,
  24. QObject *parent = nullptr);
  25. void start_building_placement(const QString &building_type);
  26. void place_building_at_screen(qreal sx, qreal sy, int local_owner_id,
  27. const ViewportState &viewport);
  28. void cancel_building_placement();
  29. void reset_transient_state();
  30. [[nodiscard]] QString pending_building_type() const {
  31. return m_pending_building_type;
  32. }
  33. [[nodiscard]] bool is_placing_construction() const {
  34. return m_is_placing_construction;
  35. }
  36. void on_construction_mouse_move(qreal sx, qreal sy,
  37. const ViewportState &viewport);
  38. void on_construction_confirm();
  39. void on_construction_cancel();
  40. void start_builder_construction(const QString &item_type);
  41. [[nodiscard]] QVariantMap
  42. get_selected_production_state(int local_owner_id) const;
  43. [[nodiscard]] QVariantMap get_selected_builder_production_state() const;
  44. [[nodiscard]] QVariantMap
  45. get_unit_production_info(const QString &unit_type,
  46. const QString &nation_id) const;
  47. void set_rally_at_screen(qreal sx, qreal sy, int local_owner_id,
  48. const ViewportState &viewport);
  49. signals:
  50. void placing_construction_changed();
  51. void construction_placement_rejected();
  52. private:
  53. std::vector<Engine::Core::EntityID> collect_available_builders();
  54. QVector3D calculate_builder_center_position(
  55. const std::vector<Engine::Core::EntityID> &builder_ids);
  56. static float get_construction_build_time(const std::string &item_type);
  57. Engine::Core::World *m_world;
  58. Game::Systems::PickingService *m_picking_service;
  59. Render::GL::Camera *m_camera;
  60. QString m_pending_building_type;
  61. QString m_pending_construction_type;
  62. std::vector<Engine::Core::EntityID> m_pending_construction_builders;
  63. QVector3D m_construction_placement_position;
  64. bool m_is_placing_construction = false;
  65. };