Mercurial > mamba
changeset 293:e6a3b00f997b
Ticks on the levelmenu
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Fri, 16 Sep 2011 00:07:11 +0200 |
parents | feca52afc109 |
children | f2ba659e03be |
files | data/menus/tick.png mamba/habitats/levelmenu.py mamba/widgets/imagebutton.py mamba/widgets/levelbutton.py source/svg/menus/tick.svg |
diffstat | 5 files changed, 163 insertions(+), 61 deletions(-) [+] |
line wrap: on
line diff
--- a/mamba/habitats/levelmenu.py Thu Sep 15 23:55:48 2011 +0200 +++ b/mamba/habitats/levelmenu.py Fri Sep 16 00:07:11 2011 +0200 @@ -5,36 +5,34 @@ from mamba.gamestate import levels, unlocked_levels, done_levels from mamba.constants import ESCAPE_KEYS from mamba.engine import Habitat, NewHabitatEvent -from mamba.widgets.imagebutton import LockableTextButton +from mamba.widgets.levelbutton import LevelButton class LevelMenu(Habitat): def __init__(self): super(LevelMenu, self).__init__() - self.level_buttons = [] + self.level_buttons = {} for level, name in enumerate(levels): - button = LockableTextButton((50 + 75 * level, 100), str(level + 1), - color='white') + button = LevelButton((50 + 75 * level, 100), str(level + 1), + locked=level not in unlocked_levels, + done=level in done_levels) button.add_callback('clicked', self.level_selected, name) - button.locked = level not in unlocked_levels self.container.add(button) - self.level_buttons.append(button) + self.level_buttons[name] = button self.container.add_callback(KEYDOWN, self.keydown_event) - self.update_button_colors() + self.update_buttons() - def update_button_colors(self): - for level, button in enumerate(self.level_buttons): - if not button.locked and level not in done_levels: - button.color = 'green' - else: - button.color = 'white' + def update_buttons(self): + for name, button in self.level_buttons.iteritems(): + button.locked = name not in unlocked_levels + button.done = name in done_levels def level_selected(self, ev, widget, name): # Demo: if widget.locked: - widget.locked = False - self.update_button_colors() + unlocked_levels.add(name) + self.update_buttons() return True if not widget.locked:
--- a/mamba/widgets/imagebutton.py Thu Sep 15 23:55:48 2011 +0200 +++ b/mamba/widgets/imagebutton.py Fri Sep 16 00:07:11 2011 +0200 @@ -2,7 +2,6 @@ from pygame.locals import SRCALPHA from mamba.constants import COLOR, FONT_SIZE, FOCUS_COLOR -from mamba.data import load_image from mamba.widgets.base import Button from mamba.widgets.text import TextWidget @@ -41,48 +40,3 @@ if self._focussed != self.focussed: self.prepare() super(ImageButtonWidget, self).draw(surface) - - -class LockableTextButton(Button): - - def __init__(self, rect, text, locked=False, fontsize=FONT_SIZE, - color=COLOR): - super(LockableTextButton, self).__init__(rect) - self.text = text - self.locked = locked - self.fontsize = fontsize - self.color = color - self.focus_color = pygame.Color(FOCUS_COLOR) - self.background = 0 - self.focussable = True - self.border = 3 - self.rect.width = 50 - self.rect.height = 50 - self.prepare() - - def prepare(self): - self.surface = pygame.Surface(self.rect.size, SRCALPHA) - self.surface.fill(0) - - if not isinstance(self.color, pygame.Color): - self.color = pygame.Color(self.color) - - self._text = TextWidget((0, 0), self.text, self.fontsize, self.color) - self._text.prepare() - - color = self.focus_color if self.focussed else self.color - pygame.draw.rect(self.surface, color, self.surface.get_rect(), - self.border) - text_rect = pygame.Rect((0, 0), self.rect.size).inflate( - self._text.rect.width - self.rect.width, - self._text.rect.height - self.rect.height) - self.surface.blit(self._text.surface, text_rect) - if self.locked: - lock = load_image('menus/lock.png') - self.surface.blit(lock, lock.get_rect()) - self._state = (self.locked, self.focussed) - - def draw(self, surface): - if self._state != (self.locked, self.focussed): - self.prepare() - surface.blit(self.surface, self.rect)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mamba/widgets/levelbutton.py Fri Sep 16 00:07:11 2011 +0200 @@ -0,0 +1,50 @@ +import pygame +from pygame.locals import SRCALPHA + +from mamba.constants import COLOR, FOCUS_COLOR +from mamba.data import load_image +from mamba.widgets.base import Button +from mamba.widgets.text import TextWidget + + +class LevelButton(Button): + + def __init__(self, rect, text, locked=True, done=False): + super(LevelButton, self).__init__(rect) + self.text = text + self.locked = locked + self.done = done + self.focussable = True + self.border = 3 + self.rect.width = 50 + self.rect.height = 50 + self.prepare() + + def prepare(self): + self.surface = pygame.Surface(self.rect.size, SRCALPHA) + self.surface.fill(0) + + image = None + if self.locked: + image = load_image('menus/lock.png') + elif self.done: + image = load_image('menus/tick.png') + if image: + self.surface.blit(image, image.get_rect()) + + self._text = TextWidget((0, 0), self.text, fontsize=24) + self._text.prepare() + + color = pygame.Color(FOCUS_COLOR if self.focussed else COLOR) + pygame.draw.rect(self.surface, color, self.surface.get_rect(), + self.border) + text_rect = pygame.Rect((0, 0), self.rect.size).inflate( + self._text.rect.width - self.rect.width, + self._text.rect.height - self.rect.height) + self.surface.blit(self._text.surface, text_rect) + self._state = (self.locked, self.done, self.focussed) + + def draw(self, surface): + if self._state != (self.locked, self.done, self.focussed): + self.prepare() + surface.blit(self.surface, self.rect)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/source/svg/menus/tick.svg Fri Sep 16 00:07:11 2011 +0200 @@ -0,0 +1,100 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="50" + height="50" + id="svg2" + version="1.1" + inkscape:version="0.48.1 r9760" + sodipodi:docname="tick.svg"> + <defs + id="defs4"> + <marker + inkscape:stockid="Arrow1Lstart" + orient="auto" + refY="0.0" + refX="0.0" + id="Arrow1Lstart" + style="overflow:visible"> + <path + id="path3776" + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " + style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" + transform="scale(0.8) translate(12.5,0)" /> + </marker> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="5.6" + inkscape:cx="-21.683944" + inkscape:cy="46.325811" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + showguides="true" + inkscape:guide-bbox="true" + inkscape:window-width="1893" + inkscape:window-height="1078" + inkscape:window-x="25" + inkscape:window-y="0" + inkscape:window-maximized="0"> + <sodipodi:guide + orientation="1,0" + position="5,0" + id="guide3761" /> + <sodipodi:guide + orientation="1,0" + position="45,0" + id="guide3763" /> + <sodipodi:guide + orientation="1,0" + position="25,0" + id="guide3765" /> + <sodipodi:guide + orientation="0,1" + position="0,5" + id="guide3781" /> + <sodipodi:guide + orientation="0,1" + position="0,45" + id="guide3801" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-1002.3622)"> + <path + style="fill:#00ff00;stroke:#008600;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none" + d="M 5,31.817254 13.637059,45 17.803938,45 C 25,28.888747 33.914341,18.585871 45,5 32.904188,14.865058 22.323606,24.477578 15.909902,39.14086 L 8.2074894,28.407989 z" + id="path3003" + inkscape:connector-curvature="0" + transform="translate(0,1002.3622)" + sodipodi:nodetypes="ccccccc" /> + </g> +</svg>