X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=naja%2Fwidgets%2Frobot.py;h=292c6bb74e55f7de3990894c62ff106fc5f8ce9e;hb=2a46865fc69e2e90e28bc13255a762279e7a1b29;hp=cfdb75013f6c64f1f7375e005a408323185b2d0d;hpb=74d3560d2f0eea96a596c137c644e70bc095fd85;p=naja.git diff --git a/naja/widgets/robot.py b/naja/widgets/robot.py index cfdb750..292c6bb 100644 --- a/naja/widgets/robot.py +++ b/naja/widgets/robot.py @@ -1,9 +1,12 @@ """Widget to draw the player on the screen""" -import pygame + import pygame.locals as pgl -from naja.constants import PLAYER_SIZE, BIT_SIZE, TILE_SIZE, BITS +from naja.constants import (PLAYER_SIZE, BIT_SIZE, TILE_SIZE, BITS, ACT, KEYS, + EXAMINE, MOVE) +from naja.events import finish_event from naja.resources import resources +from naja.resources.mutators import EIGHT_BIT from naja.widgets.base import Widget IMG_MAP = { @@ -16,20 +19,50 @@ IMG_MAP = { class RobotWidget(Widget): """Widget which holds a tile on the game board.""" def __init__(self, state): - pos = (state.player.position[0] * TILE_SIZE[0] + 32, + pos = (state.player.position[0] * TILE_SIZE[0], state.player.position[1] * TILE_SIZE[1] + BIT_SIZE[1]) super(RobotWidget, self).__init__(pos, PLAYER_SIZE) self.state = state def prepare(self): # Look up the required bits on the board location - self.pos = (self.state.player.position[0] * TILE_SIZE[0] + 32, + self.pos = (self.state.player.position[0] * TILE_SIZE[0], self.state.player.position[1] * TILE_SIZE[1] + BIT_SIZE[1]) - self.surface = resources.get_image('board/robot.png') + self.surface = resources.get_image('board/robot.png', + transforms=(EIGHT_BIT,)).copy() for bit, img_name in IMG_MAP.iteritems(): if self.state.player.bits.check_bit(bit): - bit_img = resources.get_image(img_name) + bit_img = resources.get_image(img_name, + transforms=(EIGHT_BIT,)) self.surface.blit(bit_img, (0, 0)) def draw(self, surface): surface.blit(self.surface, self.rect) + + def handle_event(self, ev): + if self.state.gameboard.player_mode in (ACT, EXAMINE): + return super(RobotWidget, self).handle_event(ev) + if ev.type == pgl.KEYDOWN: + if ev.key in KEYS.UP: + if self.state.player.move(BITS.NORTH): + self.state.gameboard.change_mode(ACT) + return finish_event() + if ev.key in KEYS.DOWN: + if self.state.player.move(BITS.SOUTH): + self.state.gameboard.change_mode(ACT) + return finish_event() + if ev.key in KEYS.LEFT: + if self.state.player.move(BITS.WEST): + self.state.gameboard.change_mode(ACT) + return finish_event() + if ev.key in KEYS.RIGHT: + if self.state.player.move(BITS.EAST): + self.state.gameboard.change_mode(ACT) + return finish_event() + if ev.key in KEYS.NOMOVE: + self.state.gameboard.change_mode(ACT) + return finish_event() + if ev.key in KEYS.SWITCH: + self.state.gameboard.change_mode(EXAMINE) + return finish_event() + return super(RobotWidget, self).handle_event(ev)