added drawing sparkles when laser hits mirrors for MM engine
authorHolger Schemel <info@artsoft.org>
Fri, 25 Nov 2022 19:40:08 +0000 (20:40 +0100)
committerHolger Schemel <info@artsoft.org>
Fri, 25 Nov 2022 19:40:08 +0000 (20:40 +0100)
src/game_mm/mm_game.c

index 1ef6339e826957c521ef5d79efc81935cbd8ebba..7b8a139b114fe8647bf23c6e37becc1af4c5b9d5 100644 (file)
@@ -1463,14 +1463,14 @@ boolean HitElement(int element, int hit_mask)
     LX += step_size * XS;
     LY += step_size * YS;
 
-#if 0
     // draw sparkles on mirror
-    if ((IS_MIRROR(element) || IS_MIRROR_FIXED(element)) &&
+    if ((IS_MIRROR(element) ||
+        IS_MIRROR_FIXED(element) ||
+        element == EL_PRISM) &&
        current_angle != laser.current_angle)
     {
-      MoveSprite(vp, &Pfeil[2], 4 + 16 * ELX, 5 + 16 * ELY + 1);
+      MovDelay[ELX][ELY] = 11;         // start animation
     }
-#endif
 
     if ((!IS_POLAR(element) && !IS_POLAR_CROSS(element)) &&
        current_angle != laser.current_angle)
@@ -2404,11 +2404,31 @@ static void GrowAmoeba(int x, int y)
 
 static void DrawFieldAnimated_MM(int x, int y)
 {
+  int element = Tile[x][y];
+
   if (IS_BLOCKED(x, y))
     return;
 
   DrawField_MM(x, y);
 
+  if (IS_MIRROR(element) ||
+      IS_MIRROR_FIXED(element) ||
+      element == EL_PRISM)
+  {
+    if (MovDelay[x][y] != 0)   // wait some time before next frame
+    {
+      MovDelay[x][y]--;
+
+      if (MovDelay[x][y] != 0)
+      {
+       int graphic = IMG_TWINKLE_WHITE;
+       int frame = getGraphicAnimationFrame(graphic, 10 - MovDelay[x][y]);
+
+       DrawGraphicThruMask_MM(SCREENX(x), SCREENY(y), graphic, frame);
+      }
+    }
+  }
+
   laser.redraw = TRUE;
 }