view mamba/world.py @ 286:71bc946ce1f1

Check if paused to avoid displaing two MessageBoxes on the screen if we manage to stack up SnakeDied events
author Stefano Rivera <stefano@rivera.za.net>
date Thu, 15 Sep 2011 23:07:18 +0200
parents cacc03748580
children e89702425a73
line wrap: on
line source

"""World state (level, plus snake, plus other sprites)."""

import time

from mamba.snake import Snake


class World(object):
    def __init__(self, level):
        self.level = level
        self.restart()

    def get_size(self):
        return self.level.get_size()

    def draw(self, surface):
        self.level.draw(surface)
        self.snake.draw(surface)

    def get_sprite(self, sprite_id):
        return self.level.extra_sprites[sprite_id]

    def update(self):
        prev = self._prev
        self._prev = time.time()
        if self._paused:
            return
        if prev is None:
            return
        dt = self._prev - prev

        self.snake.update(dt, self)

    def interact(self, segment):
        tiles = segment.filter_collisions(self.level.sprites)
        for tile in tiles:
            tile.interact(self, segment)

    def pause(self):
        was_paused, self._paused = self._paused, True
        return was_paused == False

    def resume(self):
        was_paused, self._paused = self._paused, False
        return was_paused == True

    def restart(self):
        self.level.restart()
        tile_pos, orientation = self.level.get_entry()
        self.snake = Snake(tile_pos, orientation)
        self._prev = None
        self._paused = False