]> git.seodisparate.com - LD52/commitdiff
Use sfx in game
authorStephen Seo <seo.disparate@gmail.com>
Sat, 7 Jan 2023 08:25:51 +0000 (17:25 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Sat, 7 Jan 2023 08:25:51 +0000 (17:25 +0900)
src/game.cc
src/game.h
src/main.cc

index 93bea65f78972700ae19f7c3c8d0039ab0a18439..642e4f3327f20b6dcd87012218b7f722d32dc6fd 100644 (file)
@@ -12,7 +12,7 @@ Game::Game()
     : re(std::random_device{}()), dist(0, FOOD_COUNT - 1), score(0),
       highScore(0), areaSizeRatio(1.0F), currentFood(dist(re)),
       blinkTimer(10.0F), cutTimer(0.0F), cutTimerRateInc(1.0F),
-      postCutTimer(0.0F) {
+      postCutTimer(0.0F), audioNoticeTimer(7.0F) {
   flags.set(0);
   flags.set(3);
 
@@ -24,6 +24,8 @@ void Game::do_update() {
   draw_impl();
 }
 
+void Game::screen_resized() { flags.set(3); }
+
 void Game::update_impl() {
   const float dt = GetFrameTime();
 
@@ -111,13 +113,19 @@ void Game::update_impl() {
       flags.set(2);
       ++score;
       flags.set(0);
+      PlaySound(nicecut.at(std::uniform_int_distribution<unsigned int>(
+          0, nicecut.size() - 1)(re)));
     } else if (cutPos > offsetY + height / 3.0F) {
       // past range
       flags.set(5);
       postCutTimer = POST_CUT_TIME;
+      PlaySound(ohno.at(
+          std::uniform_int_distribution<unsigned int>(0, ohno.size() - 1)(re)));
     } else {
       // before range
       postCutTimer = POST_CUT_TIME;
+      PlaySound(ohno.at(
+          std::uniform_int_distribution<unsigned int>(0, ohno.size() - 1)(re)));
     }
 
     if (flags.test(4) && (flags.test(2) || flags.test(5)) && !flags.test(6)) {
@@ -146,6 +154,33 @@ void Game::update_impl() {
       reset(!flags.test(2));
     }
   }
+
+  if (!flags.test(7)) {
+    InitAudioDevice();
+
+    if (IsAudioDeviceReady()) {
+      nicecut.at(0) = LoadSound("resources/nicecut0.ogg");
+      nicecut.at(1) = LoadSound("resources/nicecut1.ogg");
+      nicecut.at(2) = LoadSound("resources/nicecut2.ogg");
+      nicecut.at(3) = LoadSound("resources/nicecut3.ogg");
+      nicecut.at(4) = LoadSound("resources/nicecut4.ogg");
+      nicecut.at(5) = LoadSound("resources/nicecut5.ogg");
+      nicecut.at(6) = LoadSound("resources/nicecut6.ogg");
+
+      ohno.at(0) = LoadSound("resources/ohno0.ogg");
+      ohno.at(1) = LoadSound("resources/ohno1.ogg");
+      ohno.at(2) = LoadSound("resources/ohno2.ogg");
+      ohno.at(3) = LoadSound("resources/ohno3.ogg");
+      ohno.at(4) = LoadSound("resources/ohno4.ogg");
+      ohno.at(5) = LoadSound("resources/ohno5.ogg");
+      ohno.at(6) = LoadSound("resources/ohno6.ogg");
+      flags.set(7);
+    }
+  }
+
+  if (audioNoticeTimer > 0.0F) {
+    audioNoticeTimer -= dt;
+  }
 }
 
 void Game::draw_impl() {
@@ -205,6 +240,9 @@ void Game::draw_impl() {
 
   DrawText(scoreString.c_str(), 2, 2, 32, BLACK);
   DrawText(highScoreString.c_str(), 2, 34, 32, BLACK);
+  if (audioNoticeTimer > 0.0F) {
+    DrawText("Try refreshing if there is no audio", 2, 70, 32, BLACK);
+  }
   EndDrawing();
 }
 
index 324e7195c8875f677b113c71d6f6cb29da63e12f..b96fa6ff7378ba65a3499a615894f611105b3e56 100644 (file)
@@ -2,6 +2,7 @@
 #define LD52_HARVEST_FOOD_CUTS_GAME_H_
 
 // standard library includes
+#include <array>
 #include <bitset>
 #include <random>
 
@@ -14,6 +15,8 @@ public:
 
   void do_update();
 
+  void screen_resized();
+
 private:
   void update_impl();
   void draw_impl();
@@ -25,6 +28,8 @@ private:
   std::string scoreString;
   std::string highScoreString;
   Texture2D spriteSheet;
+  std::array<Sound, 7> nicecut;
+  std::array<Sound, 7> ohno;
   unsigned long long score;
   unsigned long long highScore;
   /*
@@ -35,6 +40,7 @@ private:
    * 4 - cut has happened
    * 5 - sad
    * 6 - relativeCutPos is set
+   * 7 - audio loaded
    */
   std::bitset<32> flags;
   float areaSizeRatio;
@@ -57,6 +63,7 @@ private:
   float splitDY;
   float splitDAngle;
   float postCutTimer;
+  float audioNoticeTimer;
 };
 
 #endif
index 245593a9925a9a639739903151b12944c9fbef76..2d40f9b428cf31a872926e6e6bbefb6fa58faff7 100644 (file)
@@ -22,6 +22,7 @@ EM_BOOL resize_event_callback(int event_type, const EmscriptenUiEvent *event,
                               void *ud) {
   if (event_type == EMSCRIPTEN_EVENT_RESIZE) {
     SetWindowSize(call_js_get_canvas_width(), call_js_get_canvas_height());
+    ((Game *)ud)->screen_resized();
   }
   return false;
 }
@@ -45,7 +46,7 @@ int main() {
 
   SetWindowSize(call_js_get_canvas_width(), call_js_get_canvas_height());
 
-  emscripten_set_resize_callback(EMSCRIPTEN_EVENT_TARGET_WINDOW, nullptr, false,
+  emscripten_set_resize_callback(EMSCRIPTEN_EVENT_TARGET_WINDOW, &game, false,
                                  resize_event_callback);
 
   emscripten_set_main_loop_arg(game_update, &game, 0, 1);