소스 검색

Implemented some of Start Game tab functionality

Ivan Savenko 10 달 전
부모
커밋
4e83120882
3개의 변경된 파일93개의 추가작업 그리고 2개의 파일을 삭제
  1. 2 0
      launcher/mainwindow_moc.cpp
  2. 82 1
      launcher/startGame/StartGameTab.cpp
  3. 9 1
      launcher/startGame/StartGameTab.h

+ 2 - 0
launcher/mainwindow_moc.cpp

@@ -166,12 +166,14 @@ void MainWindow::exitSetup()
 void MainWindow::switchToStartTab()
 {
 	ui->startGameButton->setEnabled(true);
+	ui->startGameButton->setChecked(true);
 	ui->tabListWidget->setCurrentIndex(TabRows::START);
 }
 
 void MainWindow::switchToModsTab()
 {
 	ui->startGameButton->setEnabled(true);
+	ui->modslistButton->setChecked(true);
 	ui->tabListWidget->setCurrentIndex(TabRows::MODS);
 }
 

+ 82 - 1
launcher/startGame/StartGameTab.cpp

@@ -4,11 +4,15 @@
 #include "../mainwindow_moc.h"
 #include "../main.h"
 
+#include "../../lib/filesystem/Filesystem.h"
+
 StartGameTab::StartGameTab(QWidget * parent)
 	: QWidget(parent)
 	, ui(new Ui::StartGameTab)
 {
 	ui->setupUi(this);
+
+	refreshState();
 }
 
 StartGameTab::~StartGameTab()
@@ -24,9 +28,86 @@ MainWindow * StartGameTab::getMainWindow()
 	return nullptr;
 }
 
-void StartGameTab::on_buttonPlay_clicked()
+void StartGameTab::refreshState()
+{
+	// Some players are using pirated version of the game with some of the files missing
+	// leading to broken town hall menu (and possibly other dialogs)
+	// Provide diagnostics to indicate problem with chair-monitor adaptor layer and not with VCMI
+	static constexpr std::array potentiallyMissingFiles = {
+		"Data/TpThBkDg.bmp",
+		"Data/TpThBkFr.bmp",
+		"Data/TpThBkIn.bmp",
+		"Data/TpThBkNc.bmp",
+		"Data/TpThBkSt.bmp",
+		"Data/TpThBRrm.bmp",
+		"Data/TpThBkCs.bmp",
+		"Data/TpThBkRm.bmp",
+		"Data/TpThBkTw.bmp",
+	};
+
+	// Some players for some reason don't have AB expansion campaign files
+	static constexpr std::array armaggedonBladeCampaigns = {
+		"DATA/AB",
+		"DATA/BLOOD",
+		"DATA/SLAYER",
+		"DATA/FESTIVAL",
+		"DATA/FIRE",
+		"DATA/FOOL",
+	};
+
+	bool updateAvailable = false;
+	bool checkedForUpdate = false;
+
+	bool missingSoundtrack = !CResourceHandler::get()->existsResource(AudioPath::builtin("Music/MainMenu"));
+	bool missingVideoFiles = !CResourceHandler::get()->existsResource(VideoPath::builtin("Video/H3Intro"));
+	bool missingGameFiles = false;
+	bool missingCampaings = false;
+
+	for (const auto & filename : potentiallyMissingFiles)
+		missingGameFiles &= !CResourceHandler::get()->existsResource(ImagePath::builtin(filename));
+
+	for (const auto & filename : armaggedonBladeCampaigns)
+		missingCampaings &= !CResourceHandler::get()->existsResource(ResourcePath(filename, EResType::CAMPAIGN));
+
+	ui->buttonEngine->setText("VCMI " VCMI_VERSION_STRING);
+	ui->buttonUpdateCheck->setVisible(!checkedForUpdate);
+	ui->labelUpdateAvailable->setVisible(checkedForUpdate && updateAvailable);
+	ui->labelUpdateNotFound->setVisible(checkedForUpdate && !updateAvailable);
+	ui->buttonOpenChangelog->setVisible(checkedForUpdate && updateAvailable);
+	ui->buttonOpenDownloads->setVisible(checkedForUpdate && updateAvailable);
+
+	ui->labelMissingCampaigns->setVisible(missingCampaings);
+	ui->labelMissingFiles->setVisible(missingGameFiles);
+	ui->labelMissingVideo->setVisible(missingVideoFiles);
+	ui->labelMissingSoundtrack->setVisible(missingSoundtrack);
+
+	ui->buttonMissingCampaignsHelp->setVisible(missingCampaings);
+	ui->buttonMissingFilesHelp->setVisible(missingGameFiles);
+	ui->buttonMissingVideoHelp->setVisible(missingVideoFiles);
+	ui->buttonMissingSoundtrackHelp->setVisible(missingSoundtrack);
+}
+
+void StartGameTab::on_buttonGameStart_clicked()
 {
 	getMainWindow()->hide();
 	startGame({});
 }
 
+
+void StartGameTab::on_buttonOpenChangelog_clicked()
+{
+	QDesktopServices::openUrl(QUrl("https://vcmi.eu/ChangeLog/"));
+}
+
+
+void StartGameTab::on_buttonOpenDownloads_clicked()
+{
+	QDesktopServices::openUrl(QUrl("https://vcmi.eu/download/"));
+}
+
+
+void StartGameTab::on_buttonUpdateCheck_clicked()
+{
+	// TODO: implement
+}
+

+ 9 - 1
launcher/startGame/StartGameTab.h

@@ -15,12 +15,20 @@ class StartGameTab : public QWidget
 	Q_OBJECT
 
 	MainWindow * getMainWindow();
+
+	void refreshState();
 public:
 	explicit StartGameTab(QWidget * parent = nullptr);
 	~StartGameTab();
 
 private slots:
-	void on_buttonPlay_clicked();
+	void on_buttonGameStart_clicked();
+
+	void on_buttonOpenChangelog_clicked();
+
+	void on_buttonOpenDownloads_clicked();
+
+	void on_buttonUpdateCheck_clicked();
 
 private:
 	Ui::StartGameTab * ui;