added function to draw tape recorder play state
[rocksndiamonds.git] / src / tape.c
index 28bc0566655222b87b40e5bc241ba5c6b308397c..ff5f6199ef6f5c482e5d75d8cbb32a644a92b71a 100644 (file)
@@ -52,6 +52,8 @@ static struct GadgetInfo *tape_gadget[NUM_TAPE_BUTTONS];
                                         VIDEO_STATE_REC_OFF    |       \
                                         VIDEO_STATE_PAUSE_OFF  |       \
                                         VIDEO_STATE_FFWD_OFF   |       \
+                                        VIDEO_STATE_WARP_OFF   |       \
+                                        VIDEO_STATE_WARP2_OFF  |       \
                                         VIDEO_STATE_PBEND_OFF  |       \
                                         VIDEO_STATE_1STEP_OFF)
 #define VIDEO_PRESS_OFF                        (VIDEO_PRESS_PLAY_OFF   |       \
@@ -70,6 +72,8 @@ static struct GadgetInfo *tape_gadget[NUM_TAPE_BUTTONS];
                                         VIDEO_STATE_REC_ON     |       \
                                         VIDEO_STATE_PAUSE_ON   |       \
                                         VIDEO_STATE_FFWD_ON    |       \
+                                        VIDEO_STATE_WARP_ON    |       \
+                                        VIDEO_STATE_WARP2_ON   |       \
                                         VIDEO_STATE_PBEND_ON   |       \
                                         VIDEO_STATE_1STEP_ON)
 #define VIDEO_PRESS_ON                 (VIDEO_PRESS_PLAY_ON    |       \
@@ -352,6 +356,36 @@ void DrawVideoDisplaySymbol(unsigned int state)
   DrawVideoDisplay(state, VIDEO_DISPLAY_SYMBOL_ONLY);
 }
 
+void DrawVideoDisplayPlayState()
+{
+  int state = 0;
+
+  DrawVideoDisplay(VIDEO_STATE_OFF, 0);
+
+  state |= VIDEO_STATE_PLAY_ON;
+
+  if (tape.pausing)
+  {
+    state |= VIDEO_STATE_PAUSE_ON;
+  }
+  else
+  {
+    if (tape.deactivate_display)
+      state |= VIDEO_STATE_WARP2_ON;
+    else if (tape.warp_forward)
+      state |= VIDEO_STATE_WARP_ON;
+    else if (tape.fast_forward)
+      state |= VIDEO_STATE_FFWD_ON;
+
+    if (tape.pause_before_end)
+      state |= VIDEO_STATE_PBEND_ON;
+  }
+
+  // draw labels and symbols separately to prevent labels overlapping symbols
+  DrawVideoDisplayLabel(state);
+  DrawVideoDisplaySymbol(state);
+}
+
 void DrawCompleteVideoDisplay()
 {
   struct GraphicInfo *g_tape = &graphic_info[IMG_BACKGROUND_TAPE];
@@ -634,26 +668,12 @@ void TapeRecordAction(byte action_raw[MAX_PLAYERS])
 
 void TapeTogglePause(boolean toggle_manual)
 {
-  int state = 0;
-
   tape.pausing = !tape.pausing;
 
   if (tape.single_step && toggle_manual)
     tape.single_step = FALSE;
 
-  state |= VIDEO_STATE_PAUSE(tape.pausing);
-
-  if (tape.pause_before_end)
-    state |= VIDEO_STATE_PBEND(!tape.pausing);
-  else if (tape.fast_forward)
-    state |= VIDEO_STATE_FFWD(!tape.pausing);
-
-  if (tape.playing)
-    state |= VIDEO_STATE_PLAY_ON;
-  else
-    state |= VIDEO_STATE_1STEP(tape.single_step);
-
-  DrawVideoDisplay(state, 0);
+  DrawVideoDisplayPlayState();
 
   if (tape.warp_forward)
   {