diff --git a/launcher/include/gameparser.h b/launcher/include/gameparser.h deleted file mode 100644 index 4232ce8..0000000 --- a/launcher/include/gameparser.h +++ /dev/null @@ -1,38 +0,0 @@ -// SPDX-FileCopyrightText: 2023 Joshua Goins -// SPDX-License-Identifier: GPL-3.0-or-later - -#pragma once - -#include -#include -#include - -enum class ScreenState { Splash, LobbyError, WorldFull, ConnectingToDataCenter, EnteredTitleScreen, InLoginQueue }; - -struct GameParseResult { - ScreenState state; - - int playersInQueue = -1; -}; - -inline bool operator==(const GameParseResult a, const GameParseResult b) -{ - return a.state == b.state && a.playersInQueue == b.playersInQueue; -} - -inline bool operator!=(const GameParseResult a, const GameParseResult b) -{ - return !(a == b); -} - -class GameParser -{ -public: - GameParser(); - ~GameParser(); - - GameParseResult parseImage(QImage image); - -private: - tesseract::TessBaseAPI *api; -}; \ No newline at end of file diff --git a/launcher/src/gameparser.cpp b/launcher/src/gameparser.cpp deleted file mode 100644 index 2c5e115..0000000 --- a/launcher/src/gameparser.cpp +++ /dev/null @@ -1,89 +0,0 @@ -// SPDX-FileCopyrightText: 2023 Joshua Goins -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "gameparser.h" - -#include -#include -#include - -GameParser::GameParser() -{ - api = new tesseract::TessBaseAPI(); - - if (api->Init(nullptr, "eng")) { - qDebug() << "Could not initialize tesseract!"; - return; - } - - api->SetPageSegMode(tesseract::PageSegMode::PSM_SINGLE_BLOCK); -} - -GameParser::~GameParser() -{ - api->End(); - delete api; -} - -GameParseResult GameParser::parseImage(QImage img) -{ - QBuffer buf; - img = img.convertToFormat(QImage::Format_Grayscale8); - img.save(&buf, "PNG", 100); - - Pix *image = pixReadMem((const l_uint8 *)buf.data().data(), buf.size()); - api->SetImage(image); - api->SetSourceResolution(300); - - const QString text = api->GetUTF8Text(); - - // TODO: clean up these names - const bool hasWorldFullText = text.contains("This World is currently full.") || text.contains("Players in queue"); - const bool hasLobbyErrorText = text.contains("The lobby server connection has encountered an error."); - const bool hasCONFIGURATIONText = text.contains("CONFIGURATION") || text.contains("ONLINE"); - const bool hasConnectingToData = text.contains("Connecting to data center"); - const bool worldTotallyFull = text.contains("3001"); - - if (hasLobbyErrorText) { - qDebug() << "LOBBY ERROR"; - - return {ScreenState::LobbyError, -1}; - } else { - if (worldTotallyFull) { - qDebug() << "TOTALLY FULL WORLD (CLOSED BY SQENIX)"; - - return {ScreenState::WorldFull, -1}; - } else { - if (hasConnectingToData) { - qDebug() << "CONNECTING TO DATA CENTER"; - - return {ScreenState::ConnectingToDataCenter, -1}; - } else { - if (hasWorldFullText) { - qDebug() << "FULL WORLD"; - - // attempt to extract number of players in queue - QRegularExpression exp("(?:Players in queue: )([\\d|,]*)"); - - auto match = exp.match(text); - if (match.isValid()) { - return {ScreenState::InLoginQueue, match.captured(1).remove(',').toInt()}; - } - - return {ScreenState::InLoginQueue, -1}; - } else { - if (hasCONFIGURATIONText) { - qDebug() << "TITLE SCREEN"; - return {ScreenState::EnteredTitleScreen, -1}; - } - } - } - } - } - - // TODO: figure out how to properly clear tesseract data - api->Clear(); - api->ClearAdaptiveClassifier(); - - return {ScreenState::Splash, -1}; -} \ No newline at end of file