# HG changeset patch # User Jeremy Thurgood # Date 1316006847 -7200 # Node ID 061d711ba57085f728d911591a55d6d339a9d3af # Parent d9ee0e50a78f0590ba339255aeb8e896dfcb8188 Interact with the world. diff -r d9ee0e50a78f -r 061d711ba570 mamba/snake.py --- 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): diff -r d9ee0e50a78f -r 061d711ba570 mamba/sprites.py --- 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() diff -r d9ee0e50a78f -r 061d711ba570 mamba/world.py --- 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)