# HG changeset patch # User Stefano Rivera # Date 1316040030 -7200 # Node ID de3b4048e54a65e5022ca6c662fac8bff1fad83a # Parent 8e9fcdf98a6b0d21ab368506279158ed550468c1 Hook up tile arrow rotation diff -r 8e9fcdf98a6b -r de3b4048e54a data/levels/dev.txt --- a/data/levels/dev.txt Thu Sep 15 00:23:29 2011 +0200 +++ b/data/levels/dev.txt Thu Sep 15 00:40:30 2011 +0200 @@ -25,8 +25,8 @@ X..........~......~....................X X...A......~~~~~~~~....................X X......................................X -X.A....................................X -X......................................X +X.A...@................................X +X.........v..>.........................X X......................................X X......................................X XeXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX diff -r 8e9fcdf98a6b -r de3b4048e54a mamba/engine.py --- a/mamba/engine.py Thu Sep 15 00:23:29 2011 +0200 +++ b/mamba/engine.py Thu Sep 15 00:40:30 2011 +0200 @@ -108,3 +108,12 @@ @classmethod def post(cls): super(LevelCompletedEvent, cls).post() + + +class FlipArrowsEvent(UserEvent): + + TYPE = "FLIP_ARROWS" + + @classmethod + def post(cls): + super(FlipArrowsEvent, cls).post() diff -r 8e9fcdf98a6b -r de3b4048e54a mamba/level.py --- a/mamba/level.py Thu Sep 15 00:23:29 2011 +0200 +++ b/mamba/level.py Thu Sep 15 00:40:30 2011 +0200 @@ -37,6 +37,7 @@ 'v': mktile(sprites.ArrowSprite, direction=DOWN), '<': mktile(sprites.ArrowSprite, direction=LEFT), '>': mktile(sprites.ArrowSprite, direction=RIGHT), + '@': mktile(sprites.FlipArrows), } THING_MAP = { @@ -253,6 +254,12 @@ orientation = self.get_tile_orientation(tile) tile.use_variant(*orientation) + def flip_arrows(self): + for row in self.tiles: + for tile in row: + if isinstance(tile, sprites.ArrowSprite): + tile.rotate() + def restart(self): """Reset the level state""" self.setup_level(self.tiles_ascii, self.sprites_ascii) diff -r 8e9fcdf98a6b -r de3b4048e54a mamba/sprites.py --- a/mamba/sprites.py Thu Sep 15 00:23:29 2011 +0200 +++ b/mamba/sprites.py Thu Sep 15 00:40:30 2011 +0200 @@ -3,6 +3,7 @@ from mamba.data import load_tile_image from mamba.constants import TILE_SIZE, UP, DOWN, LEFT, RIGHT +from mamba.engine import FlipArrowsEvent from mamba import mutators @@ -190,6 +191,20 @@ image_name = 'arrow-r' name = 'arrow' + def rotate(self): + self.set_direction({LEFT: UP, + UP: RIGHT, + RIGHT: DOWN, + DOWN: LEFT}[self.direction]) + + +class FlipArrows(SingleImageTileSprite): + image_name = 'flip-arrows' + name = 'flip' + + def interact(self, snake, segment): + FlipArrowsEvent.post() + class EntrySprite(DirectionalTile): image_name = 'arrow-r' diff -r 8e9fcdf98a6b -r de3b4048e54a mamba/widgets/game.py --- a/mamba/widgets/game.py Thu Sep 15 00:23:29 2011 +0200 +++ b/mamba/widgets/game.py Thu Sep 15 00:40:30 2011 +0200 @@ -6,7 +6,8 @@ from mamba.constants import UP, DOWN, LEFT, RIGHT from mamba.widgets.base import Widget from mamba.widgets.messagebox import MessageBox -from mamba.engine import SnakeDiedEvent, LevelCompletedEvent, NewHabitatEvent +from mamba.engine import (SnakeDiedEvent, LevelCompletedEvent, NewHabitatEvent, + FlipArrowsEvent) from mamba.habitats.mainmenu import MainMenu from mamba.gamestate import level_done @@ -21,6 +22,7 @@ self.add_callback(KEYDOWN, self.action_callback) self.add_callback(SnakeDiedEvent, self.snake_died) self.add_callback(LevelCompletedEvent, self.level_completed) + self.add_callback(FlipArrowsEvent, self.flip_arrows) def create_action_map(self): actions = {} @@ -36,6 +38,9 @@ func(*args) return True + def flip_arrows(self, ev, widget): + self.world.level.flip_arrows() + def draw(self, surface): self.world.update() self.world.draw(surface)