From a493894e2df2717c113687acf8f259cf6ee6e436 Mon Sep 17 00:00:00 2001 From: Simon Cross Date: Sun, 8 Jun 2014 23:17:07 +0200 Subject: [PATCH] I only want to hear vun select. --- naja/widgets/board.py | 17 +-------- naja/widgets/info_area.py | 78 ++++++++++++++++----------------------- naja/widgets/tile.py | 7 ++-- 3 files changed, 37 insertions(+), 65 deletions(-) diff --git a/naja/widgets/board.py b/naja/widgets/board.py index f7f8384..ac0ec88 100644 --- a/naja/widgets/board.py +++ b/naja/widgets/board.py @@ -3,7 +3,7 @@ Widget that holds the game tiles. """ import pygame.locals as pgl -from naja.constants import BOARD_SIZE, TILE_SIZE, KEYS, ACT, FPS +from naja.constants import BOARD_SIZE, TILE_SIZE, KEYS, FPS from naja.events import InvalidateTheWorld, finish_event from naja.sound import sound @@ -35,8 +35,6 @@ class BoardWidget(Widget): tile.set_highlight(self.card_pos, self.flash_light.on) tile.prepare() self.size = BOARD_SIZE - if self.state.gameboard.player_mode == ACT: - self.card_pos = self.state.player.position def draw(self, surface): if self.flash_light.tick(): @@ -46,8 +44,8 @@ class BoardWidget(Widget): def update_card_pos(self, card_pos): self.card_pos = card_pos - self.info.set_position(self.card_pos) self.legal = self.card_pos in self.state.player.legal_moves() + self.info.set_position(self.card_pos, legal=self.legal) sound.play_sound('zoop.ogg', volume=0.05) def change_pos(self, offset): @@ -73,8 +71,6 @@ class BoardWidget(Widget): def handle_event(self, ev): if InvalidateTheWorld.matches(ev): self.flash_light.reset() - if self.state.gameboard.player_mode == ACT: - return super(BoardWidget, self).handle_event(ev) if ev.type == pgl.KEYDOWN: if ev.key in KEYS.UP: if self.change_pos((0, -1)): @@ -88,13 +84,4 @@ class BoardWidget(Widget): elif ev.key in KEYS.RIGHT: if self.change_pos((+1, 0)): return finish_event() - elif ev.key in KEYS.SWITCH: - self.next_viable_pos() - return finish_event() - elif ev.key in KEYS.SELECT: - if self.state.player.set_position(self.card_pos): - self.state.gameboard.change_mode(ACT) - self.info.set_position(self.card_pos) - sound.play_sound('chirp.ogg', volume=0.5) - return finish_event() return super(BoardWidget, self).handle_event(ev) diff --git a/naja/widgets/info_area.py b/naja/widgets/info_area.py index 4a545c0..915c6da 100644 --- a/naja/widgets/info_area.py +++ b/naja/widgets/info_area.py @@ -5,7 +5,7 @@ import pygame import pygame.locals as pgl from naja.constants import ( - INFO_SIZE, ACT, KEYS, EXAMINE, PALETTE, + INFO_SIZE, KEYS, PALETTE, ACTION_TEXT_OFFSET, INFO_LEFT_PADDING, INFO_RIGHT_PADDING, BIT_SIZE, BITS) from naja.events import InvalidateTheWorld, finish_event @@ -20,18 +20,12 @@ from naja.widgets.text import TextBoxWidget from naja import constants -HINTS = { - ACT: "Choose an action using {NORTH,SOUTH}." - " Press {RETURN} to execute it.", - EXAMINE: "Browse the tiles with {NORTH,SOUTH,EAST,WEST} keys.", -} +HINTS = [ + "Browse the tiles with {NORTH,SOUTH,EAST,WEST} keys.", + "Switch actions using TAB.", +] -HINT_LEGAL_MOVE = "\nPress {RETURN} to move." - -TITLES = { - ACT: "Choose an Action", - EXAMINE: "Select a Tile", -} +HINT_LEGAL_MOVE = "\nPress {RETURN} to move and execute the action." class InfoAreaWidget(Widget): @@ -41,14 +35,10 @@ class InfoAreaWidget(Widget): def __init__(self, pos, state): super(InfoAreaWidget, self).__init__(pos, INFO_SIZE) self.state = state - self.chosen = None - self.card_position = state.player.position - self.set_position(state.player.position) + self.set_position(state.player.position, legal=True) self.flash_light = Flashlight(constants.FPS // 2) def prepare(self): - if self.state.gameboard.player_mode == ACT: - self.set_position(self.state.player.position) self.surface = pygame.surface.Surface(INFO_SIZE) self.surface.fill((0, 0, 0)) @@ -77,10 +67,9 @@ class InfoAreaWidget(Widget): 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_text = " ".join(HINTS) + if self.card_position in self.state.player.legal_moves(): + hint_text += HINT_LEGAL_MOVE hint = TextBoxWidget( (0, 0), hint_text, padding=4, @@ -118,7 +107,8 @@ class InfoAreaWidget(Widget): glyphs_x_offset = 2 glyphs_y_offset = y_offset y_offset += ACTION_TEXT_OFFSET - action_viable = action.check_available(self.state.player) + action_viable = ( + action.check_available(self.state.player) and self.legal) text_colour = PALETTE.BLACK if action_viable else PALETTE.GREY text = TextBoxWidget( @@ -177,14 +167,12 @@ class InfoAreaWidget(Widget): return y_offset + text.surface.get_rect().height + 16 - def set_position(self, position): + def set_position(self, position, legal): + self.legal = legal self.card_position = position self.card = self.state.board_locations[self.card_position] - if self.state.gameboard.player_mode == ACT: - if self.chosen is None: - self.chosen = 0 - else: - self.chosen = None + self.chosen = None + self.next_action(viable_only=True) def draw(self, surface): if self.flash_light.tick(): @@ -196,46 +184,44 @@ class InfoAreaWidget(Widget): if num_actions == 0: return player = self.state.player - chosen = self.chosen - for i in range(num_actions - 1): + chosen = self.chosen if self.chosen is not None else -step + for i in range(num_actions): # loop through each action at most once. chosen = (chosen + step) % num_actions action = self.card.actions[chosen] if not viable_only or action.check_available(player): sound.play_sound('zoop.ogg', volume=0.05) self.chosen = chosen + break 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 - action = self.card.actions[self.chosen] - if not action.check_available(player): + if self.chosen is None or not self.legal: + action = None + else: + action = self.card.actions[self.chosen] + if action is None or not action.check_available(player): sound.play_sound('error.ogg') + return False else: sound.play_sound('chirp.ogg', volume=0.5) + player.set_position(self.card_position) action.perform_action(self.state.gameboard, self.card) - self.state.gameboard.card_used(player.position) - self.state.gameboard.change_mode(EXAMINE) - self.set_position(player.position) + self.state.gameboard.card_used(self.card_position) + self.set_position(self.card_position, legal=True) + return True def handle_event(self, ev): if InvalidateTheWorld.matches(ev): self.flash_light.reset() - if self.state.gameboard.player_mode == EXAMINE: - return super(InfoAreaWidget, self).handle_event(ev) if ev.type == pgl.KEYDOWN: - if ev.key in KEYS.SELECT: - self.try_perform_action() - return finish_event() - if ev.key in KEYS.UP: - self.next_action() - return finish_event() - if ev.key in KEYS.DOWN: - self.prev_action() - return finish_event() if ev.key in KEYS.SWITCH: self.next_action(viable_only=True) return finish_event() + elif ev.key in KEYS.SELECT: + self.try_perform_action() + return finish_event() return super(InfoAreaWidget, self).handle_event(ev) diff --git a/naja/widgets/tile.py b/naja/widgets/tile.py index 9278e84..6062b1e 100644 --- a/naja/widgets/tile.py +++ b/naja/widgets/tile.py @@ -2,7 +2,7 @@ import pygame from naja.constants import ( - TILE_SIZE, BITS, LOCK_HEIGHT, SMALL_LOCK_HEIGHT, EXAMINE, PALETTE) + TILE_SIZE, BITS, LOCK_HEIGHT, SMALL_LOCK_HEIGHT, PALETTE) from naja.resources import resources from naja.resources.mutators import EIGHT_BIT, blender from naja.widgets.base import Widget @@ -53,7 +53,7 @@ class TileWidget(Widget): legal_move = (self.board_pos in self.state.player.legal_moves()) - if self.state.gameboard.player_mode == EXAMINE and legal_move: + if legal_move: overlays.append(resources.get_image( tile_available_name, transforms=(EIGHT_BIT,))) if self.highlighted: @@ -147,8 +147,7 @@ class TileWidget(Widget): def set_highlight(self, pos, bright=False): self.highlighted = False self.bright = bright - if (self.state.gameboard.player_mode == EXAMINE and - self.board_pos == pos): + if self.board_pos == pos: self.highlighted = True def draw(self, surface): -- 2.34.1