From: Jeremy Thurgood Date: Wed, 14 May 2014 07:53:30 +0000 (+0200) Subject: Better card action handling. X-Git-Tag: 0.1~315 X-Git-Url: https://git.ctpug.org.za/?a=commitdiff_plain;ds=sidebyside;h=4703c51496baf975ee4bff9465b4ed26950688d5;p=naja.git Better card action handling. --- diff --git a/naja/events.py b/naja/events.py index 1586726..1d7609f 100644 --- a/naja/events.py +++ b/naja/events.py @@ -6,9 +6,7 @@ import pygame.event as pge import pygame.locals as pgl -def finish_event(handled=True, events=(), skip_invalidate=False): - for event in events: - event.post() +def finish_event(handled=True, skip_invalidate=False): if not skip_invalidate: InvalidateTheWorld.post() return handled @@ -48,8 +46,3 @@ class InvalidateTheWorld(NajaEvent): class SelectEvent(NajaEvent): TYPE = "SELECT" - - -class PlayerMoved(NajaEvent): - # This is used to signal to widgets that care that the player has moved. - TYPE = "PLAYER_MOVED" diff --git a/naja/widgets/info_area.py b/naja/widgets/info_area.py index e092330..1ba34d0 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, EIGHT_BIT_SCALE, MOVE, ACT, KEYS -from naja.events import PlayerMoved, finish_event +from naja.events import finish_event from naja.resources import resources from naja.resources.mutators import EIGHT_BIT @@ -36,6 +36,7 @@ class InfoAreaWidget(Widget): 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 @@ -56,6 +57,7 @@ class InfoAreaWidget(Widget): 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 @@ -73,21 +75,21 @@ class InfoAreaWidget(Widget): 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.gameboard.player + player = self.state.player action = self.card.actions[self.chosen] if not action.check_available(player): print "BEEP!" @@ -95,8 +97,7 @@ class InfoAreaWidget(Widget): action.perform_action(self.state.gameboard, self.card) self.state.gameboard.replace_card(player.position) self.state.gameboard.change_mode() - # We haven't moved, but the card may have changed under us. - return finish_event(events=[PlayerMoved]) + return finish_event() if ev.key in KEYS.UP: if self.chosen > 0: self.chosen -= 1 diff --git a/naja/widgets/robot.py b/naja/widgets/robot.py index 75082d0..ddad580 100644 --- a/naja/widgets/robot.py +++ b/naja/widgets/robot.py @@ -3,7 +3,7 @@ import pygame.locals as pgl from naja.constants import PLAYER_SIZE, BIT_SIZE, TILE_SIZE, BITS, ACT, KEYS -from naja.events import PlayerMoved, finish_event +from naja.events import finish_event from naja.resources import resources from naja.resources.mutators import EIGHT_BIT from naja.widgets.base import Widget @@ -45,19 +45,19 @@ class RobotWidget(Widget): if ev.key in KEYS.UP: if self.state.player.move(BITS.NORTH): self.state.gameboard.change_mode() - return finish_event(events=[PlayerMoved]) + return finish_event() if ev.key in KEYS.DOWN: if self.state.player.move(BITS.SOUTH): self.state.gameboard.change_mode() - return finish_event(events=[PlayerMoved]) + return finish_event() if ev.key in KEYS.LEFT: if self.state.player.move(BITS.WEST): self.state.gameboard.change_mode() - return finish_event(events=[PlayerMoved]) + return finish_event() if ev.key in KEYS.RIGHT: if self.state.player.move(BITS.EAST): self.state.gameboard.change_mode() - return finish_event(events=[PlayerMoved]) + return finish_event() if ev.key in (pgl.K_SPACE,): self.state.gameboard.change_mode() return finish_event()