Some MSB is required when required.
[naja.git] / naja / widgets / info_area.py
index a25d5bfdf5b5add97ae79da46c7729adf9a01e51..f0f8eefee7c86b1ac291c9f418d915cba17d2118 100644 (file)
@@ -7,7 +7,7 @@ import pygame.locals as pgl
 from naja.constants import (
     INFO_SIZE, ACT, KEYS, EXAMINE, PALETTE,
     ACTION_TEXT_OFFSET, INFO_LEFT_PADDING,
-    INFO_RIGHT_PADDING, BIT_SIZE)
+    INFO_RIGHT_PADDING, BIT_SIZE, BITS)
 from naja.events import finish_event
 from naja.resources import resources
 from naja.resources.mutators import EIGHT_BIT, blender
@@ -22,14 +22,14 @@ from naja.widgets.text import TextBoxWidget, TextWidget
 HINTS = {
     ACT: ("Choose an action using the Up/Down keys.\n"
           "Press Return to execute the action."),
-    EXAMINE: "Select a card to examine using the arrow keys.",
+    EXAMINE: "Select a tile to examine using the arrow keys.",
 }
 
-HINT_LEGAL_MOVE = "\nPress Return to move to this card."
+HINT_LEGAL_MOVE = "\nPress Return to move to this tile."
 
 TITLES = {
     ACT: "Choose an Action",
-    EXAMINE: "Select a Card",
+    EXAMINE: "Select a Tile",
 }
 
 
@@ -94,7 +94,7 @@ class InfoAreaWidget(Widget):
 
         # Game mode (puzzle, easy, standard, hard, etc ...)
         game_mode = TextBoxWidget(
-            (0, 0), "UNKNOWN", padding=4, centre=True,
+            (0, 0), self.mode_hint(), padding=4, centre=True,
             colour=PALETTE.WHITE, border=2,
             bg_colour=PALETTE.BLACK, border_colour=PALETTE.BLUE,
             box_width=box_width)
@@ -103,6 +103,16 @@ class InfoAreaWidget(Widget):
         y_offset = (INFO_SIZE[1] - BIT_SIZE[1] + 12)
         self.surface.blit(game_mode.surface, pos())
 
+    def mode_hint(self):
+        gameboard = self.state.gameboard
+        if gameboard.puzzle:
+            return "PUZZLE"
+        return {
+            0: "DEATH", 1: "LUDICROUS",
+            2: "RAMBO", 3: "HARD",
+            4: "STANDARD", 5: "EASY",
+        }.get(gameboard.max_health, "UNKNOWN")
+
     def prepare_action(self, choice, action, y_offset, box_width):
         x_offset = INFO_LEFT_PADDING
         glyphs_x_offset = 0
@@ -128,8 +138,10 @@ class InfoAreaWidget(Widget):
                               [(x_offset, y_offset), (right, y_offset),
                                (right, bottom), (x_offset, bottom)], 4)
 
-        if action.required_bits:
-            img_name = BIT_MAP[action.required_bits].replace(
+        required_keys = action.required_bits & frozenset([
+            BITS.RED, BITS.GREEN, BITS.BLUE])
+        if required_keys in BIT_MAP:
+            img_name = BIT_MAP[required_keys].replace(
                 '.png', '_small.png')
             img = resources.get_image(img_name,
                                       transforms=(EIGHT_BIT,))
@@ -138,14 +150,22 @@ class InfoAreaWidget(Widget):
         else:
             glyphs_x_offset = INFO_LEFT_PADDING
 
-        for glyph in action.GLYPHS:
+        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, (glyphs_x_offset - msb_rect.width - 4, glyphs_y_offset)
+            )
+
+        for glyph in action.get_glyphs():
             img = resources.get_image(
                 glyph, transforms=(EIGHT_BIT, blender(PALETTE.GREY)))
             self.surface.blit(img, (glyphs_x_offset, glyphs_y_offset - 4))
             glyphs_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, (glyphs_x_offset, glyphs_y_offset - 4))