Borders and better spacing and game mode for info_area.
authorSimon Cross <hodgestar@gmail.com>
Sat, 17 May 2014 13:04:17 +0000 (15:04 +0200)
committerSimon Cross <hodgestar@gmail.com>
Sat, 17 May 2014 13:04:32 +0000 (15:04 +0200)
naja/widgets/info_area.py

index f6fde804c2e22aaaf2cd2e7e6e93d8eeca75f60a..a25d5bfdf5b5add97ae79da46c7729adf9a01e51 100644 (file)
@@ -6,7 +6,8 @@ import pygame.locals as pgl
 
 from naja.constants import (
     INFO_SIZE, ACT, KEYS, EXAMINE, PALETTE,
-    ACTION_TEXT_OFFSET, INFO_LEFT_PADDING, BIT_SIZE)
+    ACTION_TEXT_OFFSET, INFO_LEFT_PADDING,
+    INFO_RIGHT_PADDING, BIT_SIZE)
 from naja.events import finish_event
 from naja.resources import resources
 from naja.resources.mutators import EIGHT_BIT, blender
@@ -48,43 +49,61 @@ class InfoAreaWidget(Widget):
             self.set_position(self.state.player.position)
         self.surface = pygame.surface.Surface(INFO_SIZE)
         self.surface.fill((0, 0, 0))
-        # Extract actions and such from the card
+
+        box_width = INFO_SIZE[0] - INFO_LEFT_PADDING - INFO_RIGHT_PADDING
+        y_offset = 0
+        pos = lambda: (INFO_LEFT_PADDING, y_offset)
+
+        # Top title
         title = TextWidget(
-            (INFO_LEFT_PADDING, 0), TITLES[self.state.gameboard.player_mode],
+            pos(), TITLES[self.state.gameboard.player_mode],
             colour=PALETTE.WHITE)
         title.render(self.surface)
-        y_offset = title.surface.get_rect().height - 4
+        y_offset += title.surface.get_rect().height - 4
 
-        # TODO: Make this better.
+        # Bits
         bits_text = ''.join('1' if bit in self.card.bitwise_operand else '0'
                             for bit in reversed(range(8)))
         if self.card.bitwise_operand:
             bits_text = '%s %s' % (
                 bits_text, bit_glyphs(self.card.bitwise_operand))
-        card_bits = TextBoxWidget((INFO_LEFT_PADDING, y_offset), bits_text,
-                                  box_width=(INFO_SIZE[0] - INFO_LEFT_PADDING),
-                                  colour=PALETTE.LIGHT_TURQUOISE,
-                                  bg_colour=PALETTE.BLACK)
+        card_bits = TextBoxWidget(
+            pos(), bits_text, box_width=box_width,
+            colour=PALETTE.LIGHT_TURQUOISE, bg_colour=PALETTE.BLACK)
         card_bits.render(self.surface)
         y_offset += card_bits.surface.get_rect().height + 4
 
+        # Actions
         for choice, action in enumerate(self.card.actions):
-            y_offset = self.prepare_action(choice, action, y_offset)
-        # We cheat horribly for layout reasons
+            y_offset = self.prepare_action(choice, action, y_offset, box_width)
+
+        # Hint text
         hint_text = HINTS[self.state.gameboard.player_mode]
         if self.state.gameboard.player_mode == EXAMINE:
             if self.card_position in self.state.player.legal_moves():
                 hint_text += HINT_LEGAL_MOVE
 
-        hint = TextBoxWidget((0, 0), hint_text, padding=4,
-                             box_width=(INFO_SIZE[0] - INFO_LEFT_PADDING - 8))
+        hint = TextBoxWidget(
+            (0, 0), hint_text, padding=4,
+            box_width=box_width,
+            border=2, border_colour=PALETTE.GREY)
         hint.prepare()
-        y_offset = (
-            INFO_SIZE[1] - hint.surface.get_rect().height - BIT_SIZE[1]
-            - 2)
-        self.surface.blit(hint.surface, (INFO_LEFT_PADDING, y_offset))
-
-    def prepare_action(self, choice, action, y_offset):
+        y_offset = (INFO_SIZE[1] - hint.surface.get_rect().height
+                    - BIT_SIZE[1] - 2)
+        self.surface.blit(hint.surface, pos())
+
+        # Game mode (puzzle, easy, standard, hard, etc ...)
+        game_mode = TextBoxWidget(
+            (0, 0), "UNKNOWN", padding=4, centre=True,
+            colour=PALETTE.WHITE, border=2,
+            bg_colour=PALETTE.BLACK, border_colour=PALETTE.BLUE,
+            box_width=box_width)
+        game_mode.prepare()
+
+        y_offset = (INFO_SIZE[1] - BIT_SIZE[1] + 12)
+        self.surface.blit(game_mode.surface, pos())
+
+    def prepare_action(self, choice, action, y_offset, box_width):
         x_offset = INFO_LEFT_PADDING
         glyphs_x_offset = 0
         glyphs_y_offset = y_offset
@@ -94,8 +113,9 @@ class InfoAreaWidget(Widget):
 
         text = TextBoxWidget(
             (x_offset, y_offset), action.get_text(self.card),
-            box_width=(INFO_SIZE[0] - INFO_LEFT_PADDING - 8),
-            fontsize=28, colour=text_colour)
+            box_width=box_width,
+            fontsize=28, colour=text_colour,
+            border=2, border_colour=PALETTE.GREY)
         text.render(self.surface)
 
         border_colour = None