summaryrefslogtreecommitdiff
path: root/src/dirs.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-02-03 22:13:28 +0300
committerAndrei Karas <akaras@inbox.ru>2015-02-03 22:13:28 +0300
commit527d9d1aea2b840e98dd0976f7bd3426703a886a (patch)
treeb08af3a0162083b5208ada49e98b2d4a81e93230 /src/dirs.cpp
parent8f7f5129c39107aca1e5166be91940cdc073bb8e (diff)
downloadplus-527d9d1aea2b840e98dd0976f7bd3426703a886a.tar.gz
plus-527d9d1aea2b840e98dd0976f7bd3426703a886a.tar.bz2
plus-527d9d1aea2b840e98dd0976f7bd3426703a886a.tar.xz
plus-527d9d1aea2b840e98dd0976f7bd3426703a886a.zip
Fix compilation for Android with SDL2.
Diffstat (limited to 'src/dirs.cpp')
-rw-r--r--src/dirs.cpp87
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(