loading_progress_tracker.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #include "loading_progress_tracker.h"
  2. LoadingProgressTracker::LoadingProgressTracker(QObject *parent)
  3. : QObject(parent), m_current_stage(LoadingStage::NOT_STARTED),
  4. m_failed(false) {}
  5. void LoadingProgressTracker::start_loading() {
  6. m_current_stage = LoadingStage::INITIALIZING;
  7. m_current_detail = "";
  8. m_failed = false;
  9. emit stage_changed(m_current_stage, m_current_detail);
  10. emit progress_changed(progress());
  11. }
  12. void LoadingProgressTracker::set_stage(LoadingStage stage,
  13. const QString &detail) {
  14. if (m_failed || m_current_stage == LoadingStage::COMPLETED) {
  15. return;
  16. }
  17. m_current_stage = stage;
  18. m_current_detail = detail;
  19. emit stage_changed(stage, detail);
  20. emit progress_changed(progress());
  21. if (stage == LoadingStage::COMPLETED) {
  22. emit loading_completed();
  23. }
  24. }
  25. void LoadingProgressTracker::complete_stage(LoadingStage stage) {
  26. auto next_stage = static_cast<int>(stage) + 1;
  27. if (next_stage < static_cast<int>(LoadingStage::COMPLETED)) {
  28. set_stage(static_cast<LoadingStage>(next_stage));
  29. }
  30. }
  31. void LoadingProgressTracker::report_error(const QString &error_message) {
  32. m_failed = true;
  33. m_current_stage = LoadingStage::FAILED;
  34. m_current_detail = error_message;
  35. emit stage_changed(m_current_stage, error_message);
  36. emit loading_failed(error_message);
  37. }
  38. bool LoadingProgressTracker::is_complete() const {
  39. return m_current_stage == LoadingStage::COMPLETED;
  40. }
  41. bool LoadingProgressTracker::has_failed() const { return m_failed; }
  42. float LoadingProgressTracker::progress() const {
  43. return stage_to_progress(m_current_stage);
  44. }
  45. QString LoadingProgressTracker::stage_name(LoadingStage stage) const {
  46. switch (stage) {
  47. case LoadingStage::NOT_STARTED:
  48. return "Not Started";
  49. case LoadingStage::INITIALIZING:
  50. return "Initializing...";
  51. case LoadingStage::LOADING_MAP_DATA:
  52. return "Loading Map Data...";
  53. case LoadingStage::LOADING_TERRAIN:
  54. return "Loading Terrain...";
  55. case LoadingStage::LOADING_BIOME:
  56. return "Loading Biome...";
  57. case LoadingStage::LOADING_WATER_FEATURES:
  58. return "Loading Water Features...";
  59. case LoadingStage::LOADING_ROADS:
  60. return "Loading Roads...";
  61. case LoadingStage::LOADING_ENVIRONMENT:
  62. return "Loading Environment...";
  63. case LoadingStage::LOADING_FOG:
  64. return "Loading Fog...";
  65. case LoadingStage::LOADING_ENTITIES:
  66. return "Loading Units & Buildings...";
  67. case LoadingStage::LOADING_AUDIO:
  68. return "Loading Audio...";
  69. case LoadingStage::GENERATING_MINIMAP:
  70. return "Generating Minimap...";
  71. case LoadingStage::INITIALIZING_SYSTEMS:
  72. return "Initializing Game Systems...";
  73. case LoadingStage::FINALIZING:
  74. return "Finalizing...";
  75. case LoadingStage::COMPLETED:
  76. return "Complete";
  77. case LoadingStage::FAILED:
  78. return "Failed";
  79. default:
  80. return "Unknown";
  81. }
  82. }
  83. float LoadingProgressTracker::stage_to_progress(LoadingStage stage) const {
  84. const float total_stages = 13.0F;
  85. switch (stage) {
  86. case LoadingStage::NOT_STARTED:
  87. return 0.0F;
  88. case LoadingStage::INITIALIZING:
  89. return 1.0F / total_stages;
  90. case LoadingStage::LOADING_MAP_DATA:
  91. return 2.0F / total_stages;
  92. case LoadingStage::LOADING_TERRAIN:
  93. return 3.0F / total_stages;
  94. case LoadingStage::LOADING_BIOME:
  95. return 4.0F / total_stages;
  96. case LoadingStage::LOADING_WATER_FEATURES:
  97. return 5.0F / total_stages;
  98. case LoadingStage::LOADING_ROADS:
  99. return 6.0F / total_stages;
  100. case LoadingStage::LOADING_ENVIRONMENT:
  101. return 7.0F / total_stages;
  102. case LoadingStage::LOADING_FOG:
  103. return 8.0F / total_stages;
  104. case LoadingStage::LOADING_ENTITIES:
  105. return 9.0F / total_stages;
  106. case LoadingStage::LOADING_AUDIO:
  107. return 10.0F / total_stages;
  108. case LoadingStage::GENERATING_MINIMAP:
  109. return 11.0F / total_stages;
  110. case LoadingStage::INITIALIZING_SYSTEMS:
  111. return 12.0F / total_stages;
  112. case LoadingStage::FINALIZING:
  113. return 13.0F / total_stages;
  114. case LoadingStage::COMPLETED:
  115. return 1.0F;
  116. case LoadingStage::FAILED:
  117. return 0.0F;
  118. default:
  119. return 0.0F;
  120. }
  121. }