import pygame.locals as pgl
from naja.constants import INFO_SIZE, EIGHT_BIT_SCALE, MOVE, ACT, KEYS
-from naja.events import InvalidateTheWorld, PlayerMoved
+from naja.events import finish_event
from naja.resources import resources
from naja.resources.mutators import EIGHT_BIT
self.set_position(state.player.position)
def prepare(self):
+ 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
y_offset = title.surface.get_rect().height + 8
for choice, action in enumerate(self.card.actions):
if action.required_bits:
- img_name = BIT_MAP[action.required_bits].replace('.png', '_small.png')
+ 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))
y_offset += 8
- text = TextBoxWidget((12, y_offset), action.TEXT,
- box_width=(INFO_SIZE[0] - 12) // EIGHT_BIT_SCALE,
- fontsize=28)
+ text = TextBoxWidget(
+ (12, y_offset), action.TEXT,
+ box_width=(INFO_SIZE[0] - 12) // EIGHT_BIT_SCALE,
+ fontsize=28)
text.render(self.surface)
+ # self.chosen may be None, in which case we don't draw the border.
if choice == self.chosen:
colour = (255, 255, 0, 128)
bottom = y_offset + text.surface.get_rect().height
y_offset += text.surface.get_rect().height + 16
# We cheat horribly for layout reasons
hint = TextBoxWidget((0, 0), HINTS[self.state.gameboard.player_mode],
- box_width = INFO_SIZE[0] // EIGHT_BIT_SCALE)
+ box_width=INFO_SIZE[0] // EIGHT_BIT_SCALE)
hint.prepare()
y_offset = INFO_SIZE[1] - hint.surface.get_rect().height
self.surface.blit(hint.surface, (0, y_offset))
def set_position(self, position):
self.card = self.state.board_locations[position]
- self.chosen = 0
+ if self.state.gameboard.player_mode == ACT:
+ if self.chosen is None:
+ self.chosen = 0
+ else:
+ self.chosen = None
def draw(self, surface):
surface.blit(self.surface, self.pos)
def handle_event(self, ev):
- if PlayerMoved.matches(ev):
- self.set_position(self.state.player.position)
- return False
-
if self.state.gameboard.player_mode == MOVE:
return super(InfoAreaWidget, self).handle_event(ev)
if ev.type == pgl.KEYDOWN:
if ev.key in KEYS.SELECT:
+ player = self.state.player
action = self.card.actions[self.chosen]
- if not action.check_available(self.state.gameboard.player):
+ if not action.check_available(player):
print "BEEP!"
- return True
- action.perform_action(self.state.gameboard, self.card)
- self.state.gameboard.change_mode()
- InvalidateTheWorld.post()
- return True
+ else:
+ action.perform_action(self.state.gameboard, self.card)
+ self.state.gameboard.replace_card(player.position)
+ self.state.gameboard.change_mode()
+ return finish_event()
if ev.key in KEYS.UP:
if self.chosen > 0:
self.chosen -= 1
- InvalidateTheWorld.post()
- return True
+ return finish_event()
if ev.key in KEYS.DOWN:
if self.chosen + 1 < len(self.card.actions):
self.chosen += 1
- InvalidateTheWorld.post()
- return True
+ return finish_event()
return super(InfoAreaWidget, self).handle_event(ev)