changeset 181:061d711ba570

Interact with the world.
author Jeremy Thurgood <firxen@gmail.com>
date Wed, 14 Sep 2011 15:27:27 +0200
parents d9ee0e50a78f
children 0a955d2536f0
files mamba/snake.py mamba/sprites.py mamba/world.py
diffstat 3 files changed, 35 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/mamba/snake.py	Wed Sep 14 14:08:37 2011 +0200
+++ b/mamba/snake.py	Wed Sep 14 15:27:27 2011 +0200
@@ -19,6 +19,7 @@
         self.set_orientation(orientation)
         self.speed = 120.0  # pixel / s
         self.frac_ds = 0.0
+        self.mutation = None
 
     head = property(fget=lambda self: self.segments[0])
     tail = property(fget=lambda self: self.segments[-1])
@@ -34,7 +35,7 @@
     def draw(self, surface):
         self.segment_group.draw(surface)
 
-    def update(self, dt):
+    def update(self, dt, world):
         ds = dt * self.speed + self.frac_ds
         ds, self.frac_ds = divmod(ds, 1)
         ds = int(ds)
@@ -43,6 +44,7 @@
             shifted, ds = self.head.shift_head(ds)
             if not shifted:
                 break
+            world.interact(self.head.tile_pos)
             self.head.set_orientation(self.orientation)
             for segment in self.segments[1:]:
                 old_tile_state = segment.get_tile_state()
@@ -55,6 +57,15 @@
     def set_orientation(self, orientation):
         self.orientation = orientation
 
+    def crash(self):
+        print "I'm doomed!"
+
+    def mutate(self, mutation):
+        self.mutation = mutation
+
+    def can_swim(self):
+        return self.mutation == 'amphibious'
+
 
 class Segment(BaseSprite):
 
--- a/mamba/sprites.py	Wed Sep 14 14:08:37 2011 +0200
+++ b/mamba/sprites.py	Wed Sep 14 15:27:27 2011 +0200
@@ -82,6 +82,7 @@
     variants_class = InvariantSpriteImageVariants
     variants = None
     name = None
+    alive = True
 
     def __init__(self, tileset=None, image_name=None, name=None,
                  mutators=()):
@@ -117,9 +118,13 @@
         self.tile_char = tile_char
         self.solid = solid
 
-    def get_solid(self, snake_mutations):
+    def get_solid(self, snake):
         return self.solid
 
+    def interact(self, snake):
+        if self.get_solid(snake):
+            snake.crash()
+
 
 class SingleImageTileSprite(TileSprite):
     image_name = None  # subclasses will override this
@@ -166,11 +171,18 @@
         super(PuddleSprite, self).__init__(**kw)
         self.image = self.load_image(*self.get_variant(*variant))
 
+    def get_solid(self, snake):
+        if snake.can_swim():
+            print "Splishy!"
+            return False
+        print "Drownded. :-("
+        return True
+
 
 class EdibleTile(SingleImageTileSprite):
     def eat(self):
-        self.image = None
-        self.solid = False
+        self.alive = False
+        self.kill()
 
 
 class BigMouse(EdibleTile):
@@ -194,4 +206,5 @@
 
     def interact(self, snake):
         print "Swimmery!"
+        snake.mutate('amphibious')
         self.eat()
--- a/mamba/world.py	Wed Sep 14 14:08:37 2011 +0200
+++ b/mamba/world.py	Wed Sep 14 15:27:27 2011 +0200
@@ -26,4 +26,10 @@
             return
         dt = self._prev - prev
 
-        self.snake.update(dt)
+        self.snake.update(dt, self)
+
+    def interact(self, tile_pos):
+        tile = self.level.get_tile(tile_pos)
+        if tile is not None and tile.alive:
+            print "Interact:", tile_pos, tile
+            tile.interact(self.snake)