view mamba/habitats/mainmenu.py @ 522:b250b4c6c9ba

Link up boxes in main menu.
author Simon Cross <hodgestar@gmail.com>
date Sun, 18 Sep 2011 00:45:37 +0200
parents 9393dc6f5707
children
line wrap: on
line source

"""Main menu."""

import pygame
from pygame.locals import (KEYDOWN, QUIT, K_LEFT, K_RIGHT, K_UP,
                           K_DOWN)
import pygame.event

from mamba.data import load_image
from mamba.constants import ESCAPE_KEYS
from mamba.engine import Habitat, NewHabitatEvent
from mamba.level import Level
from mamba.widgets.overlay import OverlayOnFocusButton


class MainMenu(Habitat):
    def __init__(self):
        super(MainMenu, self).__init__()

        self.bg_image = load_image('menus/splash.png')
        play = self.add_box((117, 135), (556, 85), 'play', self.start_event)
        user = self.add_box((117, 255), (260, 102), 'user',
                            self.userlevels_event)
        network = self.add_box((112, 384), (310, 102), 'network',
                               self.networklevels_event)
        editor = self.add_box((424, 258), (267, 96), 'editor', self.edit_event)
        quitb = self.add_box((435, 389), (210, 90), 'quit',
                            self.quit_keydown_event)
        credits = self.add_box((578, 480), (131, 31), 'credits',
                               self.credits_event)
        self.container.add_callback(KEYDOWN, self.keydown_event)

        self.link_boxes(play, K_UP, editor, None)
        self.link_boxes(user, K_LEFT, editor, K_RIGHT)
        self.link_boxes(network, K_LEFT, quitb, K_RIGHT)
        self.link_boxes(editor, K_UP, quitb, K_DOWN)
        self.link_boxes(quitb, K_UP, credits, K_DOWN)

    def draw_background(self):
        self.surface.blit(self.bg_image, self.surface.get_rect())

    def link_boxes(self, left_box, left_key, right_box, right_key):
        def go_right(ev, widget):
            if ev.key == right_key:
                right_box.grab_focus()
                return True

        def go_left(ev, widget):
            if ev.key == left_key:
                left_box.grab_focus()
                return True

        left_box.add_callback(KEYDOWN, go_right)
        right_box.add_callback(KEYDOWN, go_left)

    def add_box(self, pos, size, overlay_name, clicked, other=None):
        image = load_image('menus/highlight-%s.png' % overlay_name)
        box = OverlayOnFocusButton(pygame.Rect(pos, size), image)
        box.add_callback('clicked', clicked)
        self.container.add(box)
        return box

    def start_event(self, ev, widget):
        from mamba.habitats.levelmenu import OfficialLevelMenu
        NewHabitatEvent.post(OfficialLevelMenu())
        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('templates/blank',
                                                 'template')))
        return True

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

    def credits_event(self, ev, widget):
        from mamba.habitats.credits import CreditsHabitat
        NewHabitatEvent.post(CreditsHabitat())
        return True

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