Some MSB is required when required.
[naja.git] / naja / widgets / tile.py
index 5417dcf3ba3e4e8960c829d76dc8e7c4353a09cf..06a0f78a3baaceca3047c8e40af29f38b07b46ef 100644 (file)
@@ -74,11 +74,32 @@ class TileWidget(Widget):
         for action in card.actions:
             y_offset = self._prepare_action(action, y_offset)
 
+        self._prepare_countdown(card)
+
+    def _prepare_countdown(self, card):
+        if card.replacement_time is None:
+            return
+        elif card.replacement_time <= 1:
+            glyph = 'glyphs/countdown_1.png'
+        elif card.replacement_time == 2:
+            glyph = 'glyphs/countdown_2.png'
+        elif card.replacement_time == 3:
+            glyph = 'glyphs/countdown_3.png'
+        elif card.replacement_time < 8:
+            glyph = 'glyphs/countdown_4.png'
+        else:
+            glyph = 'glyphs/countdown_5.png'
+        img = resources.get_image(
+            glyph, transforms=(EIGHT_BIT, blender(PALETTE.DARK_VIOLET)))
+        self.surface.blit(img, (TILE_SIZE[0] - 20, 0))
+
     def _prepare_lock(self, action, y_offset):
-        if not action.required_bits:
+        required_keys = action.required_bits & frozenset([
+            BITS.RED, BITS.GREEN, BITS.BLUE])
+        if required_keys not in BIT_MAP:
             return 4
 
-        img_name = BIT_MAP[action.required_bits]
+        img_name = BIT_MAP[required_keys]
 
         if self.board_pos != self.state.player.position:
             x_offset = 0
@@ -92,19 +113,29 @@ class TileWidget(Widget):
                 y_offset += LOCK_HEIGHT - SMALL_LOCK_HEIGHT - 2
 
         img = resources.get_image(img_name, transforms=(EIGHT_BIT,))
+        img_rect = img.get_rect()
         self.surface.blit(img, (x_offset, y_offset))
-        return x_offset + img.get_width() + 2
+
+        if BITS.MSB in action.required_bits:
+            msb = resources.get_image('board/msb_lock_decoration.png',
+                                      transforms=(EIGHT_BIT,))
+            msb_rect = msb.get_rect()
+            self.surface.blit(
+                msb, (x_offset + img_rect.width - msb_rect.width, y_offset)
+            )
+
+        return x_offset + img_rect.width + 2
 
     def _prepare_action(self, action, y_offset):
         x_offset = self._prepare_lock(action, y_offset)
         if self.board_pos != self.state.player.position:
-            for glyph in action.GLYPHS:
+            for glyph in action.get_glyphs():
                 img = resources.get_image(glyph, transforms=(EIGHT_BIT,))
                 self.surface.blit(img, (x_offset, y_offset + 4))
                 x_offset += img.get_width()
-            if action.MSB_GLYPH is not None:
+            if action.get_msb_glyph() is not None:
                 img = resources.get_image(
-                    action.MSB_GLYPH,
+                    action.get_msb_glyph(),
                     transforms=(EIGHT_BIT, blender(PALETTE.LIGHT_VIOLET)))
                 self.surface.blit(img, (x_offset, y_offset + 4))
                 x_offset += img.get_width()