From 153fc3af78c2489acb6ba2e175c96a65b7a04ebf Mon Sep 17 00:00:00 2001 From: Jeremy Thurgood Date: Fri, 16 May 2014 16:30:13 +0200 Subject: [PATCH] Draw effect glyphs above action text. --- naja/constants.py | 22 ++++++++++++---------- naja/widgets/info_area.py | 37 ++++++++++++++++++++++++++++++------- naja/widgets/tile.py | 22 +++------------------- 3 files changed, 45 insertions(+), 36 deletions(-) diff --git a/naja/constants.py b/naja/constants.py index 4d7559a..440a2d5 100644 --- a/naja/constants.py +++ b/naja/constants.py @@ -68,6 +68,7 @@ BIT_SIZE = (5 * TILE_SIZE[0], (SCREEN[1] - 5 * TILE_SIZE[1]) // 2) INFO_SIZE = (SCREEN[0] - 5 * TILE_SIZE[0], SCREEN[1]) INFO_LEFT_PADDING = 18 PLAYER_SIZE = (64, 96) +ACTION_TEXT_OFFSET = 20 # Player States ACT = 1 @@ -105,15 +106,16 @@ PALETTE = AttrDict({ 'WHITE': (255, 255, 255), }) + ACTION_GLYPHS = AttrDict({ - 'CLEAR_BITS': 0, - 'TOGGLE_BITS': 1, - 'SET_BITS': 2, - 'CHANGE_BOARD': 3, - 'DAMAGE': 4, - 'HEAL': 5, - 'MOVEMENT': 6, - 'WINTOKEN': 7, - 'MSB': 8, - 'NOTHING': 9, + 'CLEAR_BITS': 'glyphs/bits_clear.png', + 'TOGGLE_BITS': 'glyphs/bits_toggle.png', + 'SET_BITS': 'glyphs/bits_set.png', + 'CHANGE_BOARD': 'glyphs/board.png', + 'DAMAGE': 'glyphs/damage.png', + 'HEAL': 'glyphs/health.png', + 'MOVEMENT': 'glyphs/move.png', + 'WINTOKEN': 'glyphs/win.png', + 'MSB': 'glyphs/msb.png', + 'NOTHING': 'glyphs/do_nothing.png', }) diff --git a/naja/widgets/info_area.py b/naja/widgets/info_area.py index 6f14ef7..0a3990e 100644 --- a/naja/widgets/info_area.py +++ b/naja/widgets/info_area.py @@ -4,11 +4,12 @@ Widget for the game board information area. import pygame import pygame.locals as pgl -from naja.constants import (INFO_SIZE, EIGHT_BIT_SCALE, ACT, KEYS, - EXAMINE, PALETTE, INFO_LEFT_PADDING) +from naja.constants import ( + INFO_SIZE, EIGHT_BIT_SCALE, ACT, KEYS, EXAMINE, PALETTE, + ACTION_TEXT_OFFSET, INFO_LEFT_PADDING) from naja.events import finish_event from naja.resources import resources -from naja.resources.mutators import EIGHT_BIT +from naja.resources.mutators import EIGHT_BIT, blender from naja.sound import sound from naja.utils import bit_glyphs @@ -48,8 +49,9 @@ class InfoAreaWidget(Widget): self.surface = pygame.surface.Surface(INFO_SIZE) self.surface.fill((0, 0, 0)) # Extract actions and such from the card - title = TextWidget((INFO_LEFT_PADDING, 0), TITLES[self.state.gameboard.player_mode], - colour=PALETTE.WHITE) + title = TextWidget( + (INFO_LEFT_PADDING, 0), TITLES[self.state.gameboard.player_mode], + colour=PALETTE.WHITE) title.render(self.surface) y_offset = title.surface.get_rect().height + 8 @@ -77,11 +79,16 @@ class InfoAreaWidget(Widget): hint = TextBoxWidget((4, 0), hint_text, padding=2, box_width=(INFO_SIZE[0] - 4) // EIGHT_BIT_SCALE) hint.prepare() - y_offset = INFO_SIZE[1] - hint.surface.get_rect().height - INFO_LEFT_PADDING -2 + y_offset = ( + INFO_SIZE[1] - hint.surface.get_rect().height - INFO_LEFT_PADDING + - 2) self.surface.blit(hint.surface, (INFO_LEFT_PADDING, y_offset)) def prepare_action(self, choice, action, y_offset): x_offset = INFO_LEFT_PADDING + glyphs_x_offset = 0 + glyphs_y_offset = y_offset + y_offset += ACTION_TEXT_OFFSET action_viable = action.check_available(self.state.player) text_colour = PALETTE.BLACK if action_viable else PALETTE.GREY @@ -100,12 +107,28 @@ class InfoAreaWidget(Widget): pygame.draw.lines(self.surface, border_colour, True, [(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( '.png', '_small.png') img = resources.get_image(img_name, transforms=(EIGHT_BIT,)) - self.surface.blit(img, (0, y_offset)) + self.surface.blit(img, (glyphs_x_offset, glyphs_y_offset)) + glyphs_x_offset += img.get_width() + 4 + else: + glyphs_x_offset = INFO_LEFT_PADDING + + for glyph in action.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: + img = resources.get_image( + action.MSB_GLYPH, + transforms=(EIGHT_BIT, blender(PALETTE.LIGHT_VIOLET))) + self.surface.blit(img, (glyphs_x_offset, glyphs_y_offset - 4)) + return y_offset + text.surface.get_rect().height + 16 def set_position(self, position): diff --git a/naja/widgets/tile.py b/naja/widgets/tile.py index b199418..89a4b4c 100644 --- a/naja/widgets/tile.py +++ b/naja/widgets/tile.py @@ -2,8 +2,7 @@ import pygame from naja.constants import ( - TILE_SIZE, BITS, LOCK_HEIGHT, SMALL_LOCK_HEIGHT, EXAMINE, ACTION_GLYPHS, - PALETTE) + TILE_SIZE, BITS, LOCK_HEIGHT, SMALL_LOCK_HEIGHT, EXAMINE, PALETTE) from naja.resources import resources from naja.resources.mutators import EIGHT_BIT, blender from naja.widgets.base import Widget @@ -21,20 +20,6 @@ BIT_MAP = { } -GLYPH_MAP = { - ACTION_GLYPHS.CLEAR_BITS: 'glyphs/bits_clear.png', - ACTION_GLYPHS.TOGGLE_BITS: 'glyphs/bits_toggle.png', - ACTION_GLYPHS.SET_BITS: 'glyphs/bits_set.png', - ACTION_GLYPHS.CHANGE_BOARD: 'glyphs/board.png', - ACTION_GLYPHS.DAMAGE: 'glyphs/damage.png', - ACTION_GLYPHS.HEAL: 'glyphs/health.png', - ACTION_GLYPHS.MOVEMENT: 'glyphs/move.png', - ACTION_GLYPHS.WINTOKEN: 'glyphs/win.png', - ACTION_GLYPHS.MSB: 'glyphs/msb.png', - ACTION_GLYPHS.NOTHING: 'glyphs/do_nothing.png', -} - - class TileWidget(Widget): """Widget which holds a tile on the game board.""" def __init__(self, pos, state=None, board_pos=None): @@ -99,13 +84,12 @@ class TileWidget(Widget): x_offset = self._prepare_lock(action, y_offset) if self.board_pos != self.state.player.position: for glyph in action.GLYPHS: - img = resources.get_image( - GLYPH_MAP[glyph], transforms=(EIGHT_BIT,)) + 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: img = resources.get_image( - GLYPH_MAP[action.MSB_GLYPH], + action.MSB_GLYPH, transforms=(EIGHT_BIT, blender(PALETTE.LIGHT_VIOLET))) self.surface.blit(img, (x_offset, y_offset + 4)) x_offset += img.get_width() -- 2.34.1