diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-02-03 22:13:28 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-02-03 22:13:28 +0300 |
commit | 527d9d1aea2b840e98dd0976f7bd3426703a886a (patch) | |
tree | b08af3a0162083b5208ada49e98b2d4a81e93230 /src/dirs.cpp | |
parent | 8f7f5129c39107aca1e5166be91940cdc073bb8e (diff) | |
download | manaplus-527d9d1aea2b840e98dd0976f7bd3426703a886a.tar.gz manaplus-527d9d1aea2b840e98dd0976f7bd3426703a886a.tar.bz2 manaplus-527d9d1aea2b840e98dd0976f7bd3426703a886a.tar.xz manaplus-527d9d1aea2b840e98dd0976f7bd3426703a886a.zip |
Fix compilation for Android with SDL2.
Diffstat (limited to 'src/dirs.cpp')
-rw-r--r-- | src/dirs.cpp | 87 |
1 files changed, 86 insertions, 1 deletions
diff --git a/src/dirs.cpp b/src/dirs.cpp index 5f68bb449..94067420b 100644 --- a/src/dirs.cpp +++ b/src/dirs.cpp @@ -55,6 +55,91 @@ #define _nacl_dir std::string("/persistent/manaplus") #endif +#ifdef ANDROID +#ifdef USE_SDL2 +#include "render/graphics.h" + +int loadingProgressCounter = 1; + +static void updateProgress(int cnt) +{ + const int progress = cnt + loadingProgressCounter; + const int h = mainGraphics->mHeight; + mainGraphics->setColor(Color(255, 255, 255)); + const int maxSize = mainGraphics->mWidth - 100; + const int width = maxSize * progress / 450; + mainGraphics->fillRectangle(Rect(50, h - 100, width, 50)); + mainGraphics->updateScreen(); +} + +void Dirs::setProgress() +{ + loadingProgressCounter++; + updateProgress(loadingProgressCounter); +} + +static void resetProgress() +{ + loadingProgressCounter = 0; + updateProgress(loadingProgressCounter); +} + +void extractAssets() +{ + if (!getenv("APPDIR")) + { + logger->log("error: APPDIR is not set!"); + return; + } + const std::string fileName = std::string(getenv( + "APPDIR")).append("/data.zip"); + logger->log("Extracting asset into: " + fileName); + uint8_t *buf = new uint8_t[1000000]; + + FILE *const file = fopen(fileName.c_str(), "w"); + for (int f = 0; f < 100; f ++) + { + std::string part = strprintf("manaplus-data.zip%u%u", + static_cast<unsigned int>(f / 10), + static_cast<unsigned int>(f % 10)); + logger->log("testing asset: " + part); + SDL_RWops *const rw = SDL_RWFromFile(part.c_str(), "r"); + if (rw) + { + const int size = SDL_RWsize(rw); + int size2 = SDL_RWread(rw, buf, 1, size); + logger->log("asset size: %d", size2); + fwrite(buf, 1, size2, file); + SDL_RWclose(rw); + Dirs::setProgress(); + } + else + { + break; + } + } + fclose(file); + + const std::string fileName2 = std::string(getenv( + "APPDIR")).append("/locale.zip"); + FILE *const file2 = fopen(fileName2.c_str(), "w"); + SDL_RWops *const rw = SDL_RWFromFile("manaplus-locale.zip", "r"); + if (rw) + { + const int size = SDL_RWsize(rw); + int size2 = SDL_RWread(rw, buf, 1, size); + fwrite(buf, 1, size2, file2); + SDL_RWclose(rw); + Dirs::setProgress(); + } + fclose(file2); + + delete [] buf; +} + +#endif +#endif + void Dirs::updateDataPath() { if (settings.options.dataPath.empty() @@ -78,7 +163,7 @@ void Dirs::extractDataDir() #ifdef ANDROID #ifdef USE_SDL2 Files::setCopyCallBack(&updateProgress); - setProgress(0); + resetProgress(); extractAssets(); const std::string zipName = std::string(getenv( |