loading_progress_tracker.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #pragma once
  2. #include <QObject>
  3. #include <QString>
  4. #include <QStringList>
  5. #include <functional>
  6. class LoadingProgressTracker : public QObject {
  7. Q_OBJECT
  8. public:
  9. enum class LoadingStage {
  10. NOT_STARTED,
  11. INITIALIZING,
  12. LOADING_MAP_DATA,
  13. LOADING_TERRAIN,
  14. LOADING_BIOME,
  15. LOADING_WATER_FEATURES,
  16. LOADING_ROADS,
  17. LOADING_ENVIRONMENT,
  18. LOADING_FOG,
  19. LOADING_ENTITIES,
  20. LOADING_AUDIO,
  21. GENERATING_MINIMAP,
  22. INITIALIZING_SYSTEMS,
  23. FINALIZING,
  24. COMPLETED,
  25. FAILED
  26. };
  27. Q_ENUM(LoadingStage)
  28. explicit LoadingProgressTracker(QObject *parent = nullptr);
  29. void start_loading();
  30. void set_stage(LoadingStage stage, const QString &detail = QString());
  31. void complete_stage(LoadingStage stage);
  32. void report_error(const QString &error_message);
  33. [[nodiscard]] bool is_complete() const;
  34. [[nodiscard]] bool has_failed() const;
  35. [[nodiscard]] LoadingStage current_stage() const { return m_current_stage; }
  36. [[nodiscard]] float progress() const;
  37. [[nodiscard]] QString stage_name(LoadingStage stage) const;
  38. [[nodiscard]] QString current_detail() const { return m_current_detail; }
  39. signals:
  40. void stage_changed(LoadingStage stage, QString detail);
  41. void progress_changed(float progress);
  42. void loading_completed();
  43. void loading_failed(QString error_message);
  44. private:
  45. LoadingStage m_current_stage;
  46. QString m_current_detail;
  47. bool m_failed;
  48. float stage_to_progress(LoadingStage stage) const;
  49. };