view mamba/habitats/mainmenu.py @ 400:03db0d517ac3

Little bit of refactoring.
author Jeremy Thurgood <firxen@gmail.com>
date Sat, 17 Sep 2011 11:34:11 +0200
parents 12d67f69e6b2
children 001c3797a63b
line wrap: on
line source

"""Main menu."""

from pygame.locals import KEYDOWN, QUIT
import pygame.event

from mamba.constants import ESCAPE_KEYS
from mamba.engine import Habitat, NewHabitatEvent
from mamba.level import Level
from mamba.widgets.base import Container
from mamba.widgets.text import TextButton


class MainMenu(Habitat):
    def __init__(self):
        super(MainMenu, self).__init__()
        self.add_button((100, 100), "Play game", self.start_event)
        self.add_button((100, 200), "Edit level", self.edit_event)
        self.add_button((100, 300), "Quit", self.quit_keydown_event)
        self.add_button((100, 400), "User Levels", self.userlevels_event)
        self.add_button((100, 500), "Network Levels", self.networklevels_event)
        self.container.add_callback(KEYDOWN, self.keydown_event)

        # Just for debugging cascading containers...
        c = Container((400, 100))
        c.add(TextButton((400, 100), "3"))
        self.container.add(c)
        c = Container((400, 200))
        c.add(TextButton((400, 200), "4"))
        self.container.add(c)

    def add_button(self, pos, text, clicked):
        button = TextButton(pos, text)
        if clicked is not None:
            button.add_callback('clicked', clicked)
        self.container.add(button)
        return button

    def start_event(self, ev, widget):
        from mamba.habitats.levelmenu import LevelMenu
        NewHabitatEvent.post(LevelMenu())
        return True

    def userlevels_event(self, ev, widget):
        from mamba.habitats.userlevelmenu import UserLevelMenu
        NewHabitatEvent.post(UserLevelMenu())
        return True

    def networklevels_event(self, ev, widget):
        from mamba.habitats.userlevelmenu import NetworkLevelMenu
        NewHabitatEvent.post(NetworkLevelMenu())
        return True

    def edit_event(self, ev, widget):
        from mamba.habitats.editor import EditorHabitat
        NewHabitatEvent.post(EditorHabitat(Level('dev', 'official')))
        return True

    def quit_keydown_event(self, ev, widget):
        pygame.event.post(pygame.event.Event(QUIT))
        return True

    def keydown_event(self, ev, widget):
        if ev.key in ESCAPE_KEYS:
            pygame.event.post(pygame.event.Event(QUIT))
            return True