view mamba/habitats/level.py @ 78:b1019923cb12

Direction control for snake.
author Simon Cross <hodgestar@gmail.com>
date Sun, 11 Sep 2011 18:29:49 +0200
parents 095914aee329
children f602a8c3d173
line wrap: on
line source

"""Where a level object hides."""

from pygame.locals import KEYDOWN, K_LEFT, K_RIGHT, K_UP, K_DOWN

from mamba.constants import ESCAPE_KEYS
from mamba.engine import Habitat, NewHabitatEvent
from mamba.world import World
from mamba.widgets.level import LevelWidget
from mambe.snake import Snake
from mamba.level import Level


class LevelHabitat(Habitat):
    def __init__(self, level_name):
        super(LevelHabitat, self).__init__()
        level = Level(level_name)
        level_widget = LevelWidget(level)
        self.container.add(level_widget)
        self.container.add_callback(KEYDOWN, self.keydown_event)
        self.world = World(level)
        self.actions = self.create_action_map()

    def create_action_map(self):
        actions = {}
        actions[K_LEFT] = (self.world.snake.set_orientation, (Snake.LEFT,))
        actions[K_RIGHT] = (self.world.snake.set_orientation, (Snake.RIGHT,))
        actions[K_DOWN] = (self.world.snake.set_orientation, (Snake.DOWN,))
        actions[K_UP] = (self.world.snake.set_orientation, (Snake.UP,))
        return actions

    def keydown_event(self, ev, widget):
        if ev.key in ESCAPE_KEYS:
            from mamba.habitats.mainmenu import MainMenu
            NewHabitatEvent.post(MainMenu())
            return True
        elif ev.key in self.actions:
            func, args = self.actions[ev.key]
            func(*args)
            return True