diff --git a/CMakeLists.txt b/CMakeLists.txt index 6d851867..d2cc777a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,12 @@ project(bomberman) set(CMAKE_CXX_STANDARD 20) +if (EMSCRIPTEN) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s USE_GLFW=3 -s ASSERTIONS=1 -s WASM=1 -s ASYNCIFY") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s USE_GLFW=3 -s ASSERTIONS=1 -s WASM=1 -s ASYNCIFY") + set(CMAKE_EXECUTABLE_SUFFIX ".html") +endif () + include_directories(bomberman lib/Ray/sources) include_directories(bomberman lib/wal/sources) include_directories(bomberman sources) @@ -10,12 +16,6 @@ include_directories(bomberman sources) add_subdirectory(${PROJECT_SOURCE_DIR}/lib/wal) add_subdirectory(${PROJECT_SOURCE_DIR}/lib/Ray) -if (EMSCRIPTEN) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s USE_GLFW=3 -s ASSERTIONS=1 -s WASM=1 -s ASYNCIFY") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s USE_GLFW=3 -s ASSERTIONS=1 -s WASM=1 -s ASYNCIFY") - set(CMAKE_EXECUTABLE_SUFFIX ".html") -endif () - set(SOURCES sources/Models/GameState.hpp diff --git a/emsdk b/emsdk deleted file mode 160000 index f26ebb74..00000000 --- a/emsdk +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f26ebb74c0aa12d783a8552888cd9516b635838e diff --git a/emsdk.sh b/emsdk.sh index 75885814..4b88ab77 100755 --- a/emsdk.sh +++ b/emsdk.sh @@ -8,5 +8,5 @@ fi ./emsdk/emsdk activate latest source ./emsdk/emsdk_env.sh mkdir -p build && -cmake -S . -B build && +emcmake cmake -S . -B build -DPLATFORM=Web && cmake --build build \ No newline at end of file diff --git a/lib/wal/sources/Wal.hpp b/lib/wal/sources/Wal.hpp index bce38bec..8feb2507 100644 --- a/lib/wal/sources/Wal.hpp +++ b/lib/wal/sources/Wal.hpp @@ -17,8 +17,6 @@ #ifdef PLATFORM_WEB #include -void *walPtr = nullptr; -void *statePtr = nullptr; #endif namespace WAL @@ -117,9 +115,8 @@ namespace WAL Callback update(callback); #ifdef PLATFORM_WEB - walPtr = this; - statePtr = &state; - return emscripten_set_main_loop_arg((em_arg_callback_func)&runIteration, (void *)&callback, 0, 1); + void *paramPtr[3] = {this, &callback, &state}; + return emscripten_set_main_loop_arg((em_arg_callback_func)&runIteration, (void *)¶mPtr, 0, 1); #else return this->run(update, state); #endif @@ -152,11 +149,12 @@ namespace WAL #ifdef PLATFORM_WEB template - static void runIteration(void *callbackPtr) + static void runIteration(void *param) { - static const Callback callback = *((Callback *)callbackPtr); - static Wal *wal = (Wal *)walPtr; - static T *state = (T *)statePtr; + void *paramsPtr[3] = *param; + static const Callback callback = *((Callback *)param[1]); + static Wal *wal = (Wal *)param[0]; + static T *state = (T *)param[2]; static auto lastTick = std::chrono::steady_clock::now(); static std::chrono::nanoseconds fBehind(0);