diff --git a/CMakeLists.txt b/CMakeLists.txt index 8d36ad2..8ee2d8d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -158,6 +158,7 @@ set(MAIN_SOURCE src/main.cpp src/audio.cpp src/bitmap.cpp + src/emscripten.cpp src/eventthread.cpp src/filesystem.cpp src/font.cpp diff --git a/src/bitmap.cpp b/src/bitmap.cpp index 90a1659..f61d3c9 100644 --- a/src/bitmap.cpp +++ b/src/bitmap.cpp @@ -45,7 +45,7 @@ #include "eventthread.h" #ifdef __EMSCRIPTEN__ -#include +#include "emscripten.hpp" #endif #define GUARD_MEGA \ @@ -237,39 +237,6 @@ struct BitmapPrivate } }; -#ifdef __EMSCRIPTEN__ -EM_JS(void, load_file_async, (const char* fullPathC), { - Asyncify.handleSleep(function(wakeUp) { - const fullPath = UTF8ToString(fullPathC); - - // Make cache object - if (!window.fileAsyncCache) window.fileAsyncCache = {}; - - // Check if already loaded - if (window.fileAsyncCache.hasOwnProperty(fullPath)) return wakeUp(); - - // Get full destination - const file = "game/" + fullPath; - - // Get path and filename - const path = "/" + file.substring(0, file.lastIndexOf("/")); - const filename = file.substring(file.lastIndexOf("/") + 1); - - // Get target URL - const iurl = "gameasync/" + fullPath; - - // Delete original file - FS.unlink(path + "/" + filename); - - // Get the new file - FS.createPreloadedFile(path, filename, iurl, true, true, function() { - window.fileAsyncCache[fullPath] = 1; - wakeUp(); - }, console.error); - }); -}); -#endif; - struct BitmapOpenHandler : FileSystem::OpenHandler { SDL_Surface *surf; diff --git a/src/emscripten.cpp b/src/emscripten.cpp new file mode 100644 index 0000000..fefa90c --- /dev/null +++ b/src/emscripten.cpp @@ -0,0 +1,33 @@ +#include "emscripten.hpp" + +EM_JS(void, load_file_async, (const char* fullPathC), { + Asyncify.handleSleep(function(wakeUp) { + const fullPath = UTF8ToString(fullPathC); + + // Make cache object + if (!window.fileAsyncCache) window.fileAsyncCache = {}; + + // Check if already loaded + if (window.fileAsyncCache.hasOwnProperty(fullPath)) return wakeUp(); + + // Get full destination + const file = "game/" + fullPath; + + // Get path and filename + const path = "/" + file.substring(0, file.lastIndexOf("/")); + const filename = file.substring(file.lastIndexOf("/") + 1); + + // Get target URL + const iurl = "gameasync/" + fullPath; + + // Delete original file + FS.unlink(path + "/" + filename); + + // Get the new file + FS.createPreloadedFile(path, filename, iurl, true, true, function() { + window.fileAsyncCache[fullPath] = 1; + wakeUp(); + }, console.error); + }); +}); + diff --git a/src/emscripten.hpp b/src/emscripten.hpp new file mode 100644 index 0000000..a44e991 --- /dev/null +++ b/src/emscripten.hpp @@ -0,0 +1,14 @@ +#ifndef EMSCRIPTEN_HPP +#define EMSCRIPTEN_HPP + +#ifdef __EMSCRIPTEN__ +#include + +extern "C" { + void load_file_async(const char* fullPathC); +} + +#endif + +#endif +