self.surface.fill((0, 0, 0))
# Extract actions and such from the card
title = TextWidget((0, 0), TITLES[self.state.gameboard.player_mode],
- colour=(255, 255, 255))
+ colour=PALETTE.WHITE)
title.render(self.surface)
y_offset = title.surface.get_rect().height + 8
# TODO: Make this better.
bits_text = ''.join('1' if bit in self.card.bitwise_operand else '0'
for bit in reversed(range(8)))
- card_bits = TextWidget((0, y_offset), bits_text, colour=(255, 255, 0))
+ card_bits = TextWidget((0, y_offset), bits_text,
+ colour=PALETTE.LIGHT_TURQUOISE)
card_bits.render(self.surface)
y_offset += card_bits.surface.get_rect().height + 8
self.surface.blit(hint.surface, (4, y_offset))
def prepare_action(self, choice, action, y_offset):
+ x_offset = 18
+ action_viable = action.check_available(self.state.player)
+ text_colour = PALETTE.BLACK if action_viable else PALETTE.GREY
+
text = TextBoxWidget(
- (18, y_offset), action.get_text(),
+ (x_offset, y_offset), action.get_text(),
box_width=(INFO_SIZE[0] - 16) // EIGHT_BIT_SCALE,
- fontsize=28)
+ fontsize=28, colour=text_colour)
text.render(self.surface)
+
border_colour = None
- if not action.check_available(self.state.player):
- border_colour = PALETTE.ORANGE + (255,)
- elif choice == self.chosen:
- border_colour = PALETTE.PINK + (128,)
- else:
- border_colour = PALETTE.GREEN + (128,)
+ if choice == self.chosen:
+ border_colour = PALETTE.GREEN if action_viable else PALETTE.ORANGE
if border_colour:
bottom = y_offset + text.surface.get_rect().height
- right = text.surface.get_rect().width + 18
+ right = text.surface.get_rect().width + x_offset
pygame.draw.lines(self.surface, border_colour, True,
- [(18, y_offset), (right, y_offset),
- (right, bottom), (18, bottom)], 4)
+ [(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')
def draw(self, surface):
surface.blit(self.surface, self.pos)
- def next_viable_action(self, step=1):
+ def next_action(self, viable_only=False, step=1):
num_actions = len(self.card.actions)
if num_actions == 0:
return
# loop through each action at most once.
chosen = (chosen + step) % num_actions
action = self.card.actions[chosen]
- if action.check_available(player):
- sound.play_sound('change_action.ogg', volume=0.05)
+ if not viable_only or action.check_available(player):
+ sound.play_sound('zoop.ogg', volume=0.05)
self.chosen = chosen
- def prev_viable_action(self):
- return self.next_viable_action(step=-1)
+ def prev_action(self, viable_only=False):
+ return self.next_action(viable_only=viable_only, step=-1)
def try_perform_action(self):
player = self.state.player
if not action.check_available(player):
sound.play_sound('error.ogg')
else:
+ sound.play_sound('chirp.ogg', volume=0.5)
action.perform_action(self.state.gameboard, self.card)
self.state.gameboard.replace_card(player.position)
self.state.gameboard.change_mode(EXAMINE)
self.try_perform_action()
return finish_event()
if ev.key in KEYS.UP:
- self.next_viable_action()
+ self.next_action()
return finish_event()
if ev.key in KEYS.DOWN:
- self.prev_viable_action()
+ self.prev_action()
return finish_event()
if ev.key in KEYS.SWITCH:
- self.next_viable_action()
+ self.next_action(viable_only=True)
return finish_event()
return super(InfoAreaWidget, self).handle_event(ev)