Mercurial > mamba
changeset 248:de3b4048e54a
Hook up tile arrow rotation
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Thu, 15 Sep 2011 00:40:30 +0200 |
parents | 8e9fcdf98a6b |
children | cb68024bdd35 |
files | data/levels/dev.txt mamba/engine.py mamba/level.py mamba/sprites.py mamba/widgets/game.py |
diffstat | 5 files changed, 39 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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()
--- 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)
--- 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'
--- 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)