int main(int argc, char** argv) { // Applications variables std::vector<Screen*> screensList; Screen::Screens screenType = Screen::Screens::MainMenu; // Window creation sf::RenderWindow app(sf::VideoMode(1440, 900, 32), "BearDefense"); // Create the level loader object to load general game data. LevelLoader loader(".\\data\\GeneralGameData.json"); // Load the AI data. loader.load(".\\data\\AIGameData.json"); // Prepare menu and game screens MainMenuScreen mainMenu(loader.getMenuData()); screensList.push_back(&mainMenu); GameScreen gameScreen(loader.getGameData()); screensList.push_back(&gameScreen); // Main loop - invokes the run method on the currently // selected screen type (i.e. main menu or game screen). while (screenType != Screen::Screens::Quit) { if (screenType == Screen::Screens::Game) { // Show the mouse cursor app.setMouseCursorVisible(true); } else { // Hide the mouse cursor app.setMouseCursorVisible(false); } screenType = screensList.at(static_cast<int>(screenType))->run(app); } return EXIT_SUCCESS; }
void MainWindow::Private::captureFleetDetail() { qDebug() << "captureFleetDetail"; //設定確認 checkSavePath(); QRect captureRect = DETAIL_RECT_CAPTURE; QImage resultImg(captureRect.width() * 2 , captureRect.height() * 3 ,QImage::Format_ARGB32); resultImg.fill(Qt::transparent); QPainter painter(&resultImg); GameScreen gameScreen(ui.webView->capture()); if (!gameScreen.isVisible(GameScreen::Ship1Part)) { ui.statusBar->showMessage(tr("not in organization"), STATUS_BAR_MSG_TIME); return; } //開始確認 QMessageBox::StandardButton res = QMessageBox::warning(q , tr("Kan Memo") , tr("Capture the fleet ditail.\nPlease wait while a cup of coffee.") , QMessageBox::Yes | QMessageBox::Cancel); if(res == QMessageBox::Cancel) return; //メニュー無効 ui.menuBar->setEnabled(false); ui.toolBar->setEnabled(false); ui.webView->setAttribute(Qt::WA_TransparentForMouseEvents, true); ui.statusBar->showMessage(tr("making fleet detail"), -1); ui.progressBar->show(); ui.progressBar->setValue(0); for (int i = 0; i < 6; i++) { if (!gameScreen.isVisible(static_cast<GameScreen::PartType>(GameScreen::Ship1Part + i))) break; gameScreen.click(ui.webView, static_cast<GameScreen::PartType>(GameScreen::Ship1Part + i), GameScreen::WaitLonger); QImage tmpImg = ui.webView->capture().copy(captureRect); painter.drawImage(captureRect.width() * (i % 2) , captureRect.height() * (i / 2) , tmpImg); ui.progressBar->setValue((i + 1) * 100 / 6); gameScreen.click(ui.webView, GameScreen::Ship1Part); } ui.progressBar->hide(); ui.webView->setAttribute(Qt::WA_TransparentForMouseEvents, false); ui.statusBar->clearMessage(); char format[] = "jpg"; QString path = makeFileName(QString(format)); qDebug() << "path:" << path; //保存する ui.statusBar->showMessage(tr("saving to %1...").arg(path), STATUS_BAR_MSG_TIME); if(resultImg.save(path, format)) { //つぶやくダイアログ openTweetDialog(path); }else{ ui.statusBar->showMessage(tr("failed save image"), STATUS_BAR_MSG_TIME); } //メニュー復活 ui.menuBar->setEnabled(true); ui.toolBar->setEnabled(true); }
//思い出を残す void MainWindow::Private::captureGame(bool andEdit) { qDebug() << "captureGame"; //設定確認 checkSavePath(); QImage img = ui.webView->capture(); if (img.isNull()) { ui.statusBar->showMessage(tr("failed capture image"), STATUS_BAR_MSG_TIME); return; } GameScreen gameScreen(img); if (gameScreen.isVisible(GameScreen::HeaderPart)) { //提督名をマスク if(settings.value(SETTING_GENERAL_MASK_ADMIRAL_NAME, false).toBool()) { maskImage(&img, ADMIRAL_RECT_HEADER); } //司令部レベルをマスク if(settings.value(SETTING_GENERAL_MASK_HQ_LEVEL, false).toBool()) { maskImage(&img, HQ_LEVEL_RECT_HEADER); } } QString format; if(settings.value(SETTING_GENERAL_SAVE_PNG, false).toBool()) format = QStringLiteral("png"); else format = QStringLiteral("jpg"); QString path = makeFileName(format); // qDebug() << "path:" << path; if(andEdit){ //編集もする QString tempPath = makeTempFileName(format); QString editPath = makeFileName(format); // qDebug() << "temp path:" << tempPath; //保存する ui.statusBar->showMessage(tr("saving to %1...").arg(tempPath), STATUS_BAR_MSG_TIME); if (img.save(tempPath, format.toUtf8().constData())) { //編集ダイアログ openImageEditDialog(path, tempPath, editPath); } else { ui.statusBar->showMessage(tr("failed save image"), STATUS_BAR_MSG_TIME); } //テンポラリのファイルを消す QFile::remove(tempPath); }else{ //キャプチャーだけ //保存する ui.statusBar->showMessage(tr("saving to %1...").arg(path), STATUS_BAR_MSG_TIME); if (img.save(path, format.toUtf8().constData())) { //つぶやくダイアログ openTweetDialog(path); } else { ui.statusBar->showMessage(tr("failed save image"), STATUS_BAR_MSG_TIME); } } }