StartGameTab.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #include "StartGameTab.h"
  2. #include "ui_StartGameTab.h"
  3. #include "../mainwindow_moc.h"
  4. #include "../main.h"
  5. #include "../../lib/filesystem/Filesystem.h"
  6. StartGameTab::StartGameTab(QWidget * parent)
  7. : QWidget(parent)
  8. , ui(new Ui::StartGameTab)
  9. {
  10. ui->setupUi(this);
  11. refreshState();
  12. }
  13. StartGameTab::~StartGameTab()
  14. {
  15. delete ui;
  16. }
  17. MainWindow * StartGameTab::getMainWindow()
  18. {
  19. foreach(QWidget *w, qApp->allWidgets())
  20. if(QMainWindow* mainWin = qobject_cast<QMainWindow*>(w))
  21. return dynamic_cast<MainWindow *>(mainWin);
  22. return nullptr;
  23. }
  24. void StartGameTab::refreshState()
  25. {
  26. // Some players are using pirated version of the game with some of the files missing
  27. // leading to broken town hall menu (and possibly other dialogs)
  28. // Provide diagnostics to indicate problem with chair-monitor adaptor layer and not with VCMI
  29. static constexpr std::array potentiallyMissingFiles = {
  30. "Data/TpThBkDg.bmp",
  31. "Data/TpThBkFr.bmp",
  32. "Data/TpThBkIn.bmp",
  33. "Data/TpThBkNc.bmp",
  34. "Data/TpThBkSt.bmp",
  35. "Data/TpThBRrm.bmp",
  36. "Data/TpThBkCs.bmp",
  37. "Data/TpThBkRm.bmp",
  38. "Data/TpThBkTw.bmp",
  39. };
  40. // Some players for some reason don't have AB expansion campaign files
  41. static constexpr std::array armaggedonBladeCampaigns = {
  42. "DATA/AB",
  43. "DATA/BLOOD",
  44. "DATA/SLAYER",
  45. "DATA/FESTIVAL",
  46. "DATA/FIRE",
  47. "DATA/FOOL",
  48. };
  49. bool updateAvailable = false;
  50. bool checkedForUpdate = false;
  51. bool missingSoundtrack = !CResourceHandler::get()->existsResource(AudioPath::builtin("Music/MainMenu"));
  52. bool missingVideoFiles = !CResourceHandler::get()->existsResource(VideoPath::builtin("Video/H3Intro"));
  53. bool missingGameFiles = false;
  54. bool missingCampaings = false;
  55. for (const auto & filename : potentiallyMissingFiles)
  56. missingGameFiles &= !CResourceHandler::get()->existsResource(ImagePath::builtin(filename));
  57. for (const auto & filename : armaggedonBladeCampaigns)
  58. missingCampaings &= !CResourceHandler::get()->existsResource(ResourcePath(filename, EResType::CAMPAIGN));
  59. ui->buttonEngine->setText("VCMI " VCMI_VERSION_STRING);
  60. ui->buttonUpdateCheck->setVisible(!checkedForUpdate);
  61. ui->labelUpdateAvailable->setVisible(checkedForUpdate && updateAvailable);
  62. ui->labelUpdateNotFound->setVisible(checkedForUpdate && !updateAvailable);
  63. ui->buttonOpenChangelog->setVisible(checkedForUpdate && updateAvailable);
  64. ui->buttonOpenDownloads->setVisible(checkedForUpdate && updateAvailable);
  65. ui->labelMissingCampaigns->setVisible(missingCampaings);
  66. ui->labelMissingFiles->setVisible(missingGameFiles);
  67. ui->labelMissingVideo->setVisible(missingVideoFiles);
  68. ui->labelMissingSoundtrack->setVisible(missingSoundtrack);
  69. ui->buttonMissingCampaignsHelp->setVisible(missingCampaings);
  70. ui->buttonMissingFilesHelp->setVisible(missingGameFiles);
  71. ui->buttonMissingVideoHelp->setVisible(missingVideoFiles);
  72. ui->buttonMissingSoundtrackHelp->setVisible(missingSoundtrack);
  73. }
  74. void StartGameTab::on_buttonGameStart_clicked()
  75. {
  76. getMainWindow()->hide();
  77. startGame({});
  78. }
  79. void StartGameTab::on_buttonOpenChangelog_clicked()
  80. {
  81. QDesktopServices::openUrl(QUrl("https://vcmi.eu/ChangeLog/"));
  82. }
  83. void StartGameTab::on_buttonOpenDownloads_clicked()
  84. {
  85. QDesktopServices::openUrl(QUrl("https://vcmi.eu/download/"));
  86. }
  87. void StartGameTab::on_buttonUpdateCheck_clicked()
  88. {
  89. // TODO: implement
  90. }