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)