From 527d9d1aea2b840e98dd0976f7bd3426703a886a Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 3 Feb 2015 22:13:28 +0300 Subject: Fix compilation for Android with SDL2. --- src/dirs.cpp | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 86 insertions(+), 1 deletion(-) (limited to 'src/dirs.cpp') 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(f / 10), + static_cast(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( -- cgit v1.2.3-70-g09d2