]> git.seodisparate.com - jumpartifact.com_demo_0/commitdiff
Add test fn to clear screens from js
authorStephen Seo <seo.disparate@gmail.com>
Thu, 31 Aug 2023 13:11:04 +0000 (22:11 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Thu, 31 Aug 2023 13:11:04 +0000 (22:11 +0900)
src/game.cc
src/game.h
src/main.cc
wasm_build/custom_shell.html

index 72359dc1b7e787ca1ed9401cfc18c80f51b8d712..6522250e9aa6f40a8e0e67b3b8b8228408fb4a1d 100644 (file)
@@ -21,3 +21,5 @@ void Game::update() {
 }
 
 void Game::draw() { screen_stack->draw(); }
+
+void Game::clear_screens() { screen_stack->clear_screens(); }
index b3fd492dcd49c87f46a8633645f5c8a8dad2d744..1d6c764eddab9fceb69f37f4fbc7c681e6bdff47 100644 (file)
@@ -22,6 +22,8 @@ class Game {
   void update();
   void draw();
 
+  void clear_screens();
+
  private:
   ScreenStack::Ptr screen_stack;
   std::chrono::steady_clock::time_point prev_time;
index 85a52fcd70083c439aba4a7ec18a025eb610923d..a0287e2ddbf06680a44f3316211d964d2f7c0d31 100644 (file)
@@ -15,6 +15,9 @@
 #include "game.h"
 
 #ifdef __EMSCRIPTEN__
+
+extern Game *global_game_ptr = nullptr;
+
 extern "C" {
 
 EM_BOOL resize_event_callback(int event_type, const EmscriptenUiEvent *event,
@@ -25,6 +28,15 @@ EM_BOOL resize_event_callback(int event_type, const EmscriptenUiEvent *event,
   }
   return false;
 }  // resize_event_callback(...)
+
+int EMSCRIPTEN_KEEPALIVE clear_all_screens() {
+  if (global_game_ptr) {
+    global_game_ptr->clear_screens();
+    return 0;
+  }
+  return 1;
+}
+
 }  // extern "C"
 #endif
 
@@ -46,6 +58,8 @@ int main() {
 #ifdef __EMSCRIPTEN__
   Game game{};
 
+  global_game_ptr = &game;
+
   SetWindowSize(call_js_get_canvas_width(), call_js_get_canvas_height());
 
   emscripten_set_resize_callback(EMSCRIPTEN_EVENT_TARGET_WINDOW, &game, false,
index b2956230fa765f5c4eb3392ecf0a0f09d0217190..2bf70b14a5813a1ad6bbe3998e9d632aab009b51 100644 (file)
@@ -59,6 +59,9 @@
       window.onerror = function() {
         console.log("onerror: " + event);
       };
+      function demo0_clear_all_screens() {
+        Module.ccall('clear_all_screens', 'number', [], []);
+      };
     </script>
     {{{ SCRIPT }}}
   </body>