From: Simon Cross Date: Sat, 5 Mar 2016 19:52:27 +0000 (+0200) Subject: Merge branch 'master' of ctpug.org.za:koperkapel X-Git-Url: https://git.ctpug.org.za/?p=koperkapel.git;a=commitdiff_plain;h=ec18a4dde4d14bd4486fb936476266e8511b169b;hp=cbadf4e3132cb94acd2c17b13ca9a8f0da91cf9d Merge branch 'master' of ctpug.org.za:koperkapel --- diff --git a/koperkapel/actors/orientatedsurf.py b/koperkapel/actors/orientatedsurf.py index ae79c43..284ac71 100644 --- a/koperkapel/actors/orientatedsurf.py +++ b/koperkapel/actors/orientatedsurf.py @@ -39,3 +39,20 @@ class OrientatedSurfActor(SurfActor): self._base_surf = surf self._orig_surf = self._surf = rotate(surf, self._angle) self._update_pos() + + +class SelectableSurfActor(OrientatedSurfActor): + def __init__(self, seat, selected_seat): + self._selected = False + self._seat = seat + self._selected_seat = selected_seat + super().__init__(surf=self._seat, angle=0) + + @property + def selected(self): + return self._selected + + @selected.setter + def selected(self, value): + self._selected = value + self.surf = self._selected_seat if value else self._seat diff --git a/koperkapel/scenes/menu.py b/koperkapel/scenes/menu.py index 65128b9..b5d7815 100644 --- a/koperkapel/scenes/menu.py +++ b/koperkapel/scenes/menu.py @@ -1,8 +1,9 @@ """ Main menu scene. """ from pgzero.constants import keys -from ..actors.buttons import TextButton +from pgzero.loaders import images from ..actors.navigator import ActorNavigator +from ..actors.orientatedsurf import OrientatedSurfActor, SelectableSurfActor from .base import Scene, ChangeSceneEvent, WorldEvent, QuitEvent @@ -11,22 +12,37 @@ class MenuScene(Scene): def __init__(self): super().__init__() - self._title = self.actors.add(TextButton("Main Menu")) - self._title.pos = (300, 100) + self.actors.add_layer("buttons", level=10) + self._init_bg() + self._init_buttons() + + def _init_bg(self): + self.actors.default.clear() + self.actors.default.add(OrientatedSurfActor( + images.load("splash/background"))) + + def _init_buttons(self): self._nav = ActorNavigator() - self._menu = [ - TextButton("New Game", action=self.change_to_new_game), - TextButton("Resume", action=self.change_to_resume), - TextButton("Credits", action=self.change_to_credits), - TextButton("Quit", action=self.quit), + menu = [ + self._build_button("new_game", action=self.change_to_new_game), + self._build_button("resume_game", action=self.change_to_resume), + self._build_button("credits", action=self.change_to_credits), + self._build_button("quit", action=self.quit), ] - for i, item in enumerate(self._menu): + for i, item in enumerate(menu): item.pos = (300, 200 + (i * 100)) self.actors.add(item) self._nav.connect( - self._menu, [keys.DOWN, keys.RIGHT], [keys.UP, keys.LEFT], + menu, [keys.DOWN, keys.RIGHT], [keys.UP, keys.LEFT], wrap=True) - self._nav.current.select() + self._nav.current.selected = True + + def _build_button(self, name, action): + actor = SelectableSurfActor( + images.load("splash/%s" % (name,)), + images.load("splash/%s_selected" % (name,))) + actor.action = action + return actor def change_to_resume(self): from .level import GameLevelScene @@ -54,6 +70,6 @@ class MenuScene(Scene): else: prev, current = self._nav.follow(key) if prev is not None: - prev.deselect() + prev.selected = False if current is not None: - current.select() + current.selected = True diff --git a/koperkapel/vehicles/base.py b/koperkapel/vehicles/base.py index 3d7765c..2c1d9bf 100644 --- a/koperkapel/vehicles/base.py +++ b/koperkapel/vehicles/base.py @@ -5,7 +5,7 @@ import random from itertools import chain, islice, repeat from pygame.constants import BLEND_RGBA_MULT from pgzero.loaders import images -from ..actors.orientatedsurf import OrientatedSurfActor +from ..actors.orientatedsurf import SelectableSurfActor from ..actors.animsurf import AnimatedSurfActor from ..weapons import default_weapons from ..util import safepath @@ -130,24 +130,7 @@ class Seat: selected_seat = seat.copy() selected_seat.fill( self.vehicle.selected_seat_overlay_color, None, BLEND_RGBA_MULT) - return SeatActor(seat, selected_seat) - - -class SeatActor(OrientatedSurfActor): - def __init__(self, seat, selected_seat): - self._selected = False - self._seat = seat - self._selected_seat = selected_seat - super().__init__(surf=self._seat, angle=0) - - @property - def selected(self): - return self._selected - - @selected.setter - def selected(self, value): - self._selected = value - self.surf = self._selected_seat if value else self._seat + return SelectableSurfActor(seat, selected_seat) def circle_of_seats(n_seats, **kw):