X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=koperkapel%2Fscenes%2Froaches.py;h=34f02679c5ed5807f6af13ef6e1d9a8e3490d520;hb=c6a89e98809c5a954126411bf18b205d0b90a29c;hp=7198ee2363ffee41c85530a158ad82037ed45b83;hpb=bd8aab701fb1ccd81a3c50661600242024847cad;p=koperkapel.git diff --git a/koperkapel/scenes/roaches.py b/koperkapel/scenes/roaches.py index 7198ee2..34f0267 100644 --- a/koperkapel/scenes/roaches.py +++ b/koperkapel/scenes/roaches.py @@ -1,29 +1,89 @@ """ Roach management scene. """ -from pgzero.constants import keys +from pgzero.constants import keys, mouse from pgzero.actor import Actor -from ..actors.buttons import TextButton +from ..actors.buttons import TextButton, ImageButton from ..constants import WIDTH, HEIGHT from .base import Scene, ChangeSceneEvent +TOOLBAR_LEFT_X = WIDTH * 3 // 4 +TOOLBAR_TOP_Y = 0 +TOOLBAR_MID_Y = HEIGHT * 1 // 2 +BUTTON_INSET = (20, 20) + + +def inset_button(pos, d): + return ( + pos[0] + d[0] * BUTTON_INSET[0], + pos[1] + d[1] * BUTTON_INSET[1]) + + class RoachesScene(Scene): """ Roach management scene. """ def __init__(self): super().__init__() - self.actors.add_layer("pads", level=5) - self.actors.add_layer("roaches", level=10) self._roach_actors = {} + self._roaches = self.actors.add_layer("roaches", level=10) + self._pads = self.actors.add_layer("pads", level=5) + self._buttons = self.actors.add_layer("buttons", level=6) + self._init_bg() self._init_pads() + self._init_buttons() + + def _init_bg(self): + self.actors.default.add(Actor("vehicles/walking/background")) def _init_pads(self): - self._roach_pad = self.actors.add( - Actor("roach_management/roach_pad"), layer="pads") - self._roach_pad.pos = (WIDTH * (7/8), HEIGHT * (1/4)) - self._inventory_pad = self.actors.add( - Actor("roach_management/inventory_pad"), layer="pads") - self._inventory_pad.pos = (WIDTH * (7/8), HEIGHT * (3/4)) + self._roach_pad = self._pads.add( + Actor("roach_management/roach_pad", anchor=("left", "bottom"))) + self._roach_pad.pos = (TOOLBAR_LEFT_X, TOOLBAR_MID_Y) + self._inventory_pad = self._pads.add( + Actor("roach_management/inventory_pad", anchor=("left", "top"))) + self._inventory_pad.pos = (TOOLBAR_LEFT_X, TOOLBAR_MID_Y) + + def _add_button(self, name, anchor, inset, pos, action): + button = self._buttons.add( + ImageButton(name, anchor=anchor, action=action)) + button.pos = inset_button(pos, inset) + return button + + def _init_buttons(self): + self._add_button( + "roach_management/left_button", ("left", "bottom"), (1, -1), + self._roach_pad.bottomleft, self._roach_left) + + self._add_button( + "roach_management/right_button", ("right", "bottom"), (-1, -1), + self._roach_pad.bottomright, self._roach_right) + + self._add_button( + "roach_management/left_button", ("left", "bottom"), (1, -1), + self._inventory_pad.bottomleft, self._inventory_left) + + self._add_button( + "roach_management/right_button", ("right", "bottom"), (-1, -1), + self._inventory_pad.bottomright, self._inventory_right) + + self._add_button( + "roach_management/eject_button", ("right", "top"), (-1, 1), + (TOOLBAR_LEFT_X, TOOLBAR_TOP_Y), self._eject_roach) + + def _roach_left(self): + print("Cycle outside roaches left.") + + def _roach_right(self): + print("Cycle outside roaches right.") + + def _inventory_left(self): + print("Cycle inventory left.") + + def _inventory_right(self): + print("Cycle inventory right.") + + def _eject_roach(self): + print("Eject roach.") def update(self, world, dt): for i, roach in enumerate(world.roaches): @@ -36,7 +96,7 @@ class RoachesScene(Scene): roach.attributes.items()), ))) self._roach_actors[roach.name] = actor - self.actors.add(actor, layer="roaches") + self._roaches.add(actor) # TODO: remove missing roaches actor.pos = (300, 100 + i * 100) @@ -44,3 +104,10 @@ class RoachesScene(Scene): if key == keys.ESCAPE: from .menu import MenuScene return [ChangeSceneEvent(MenuScene())] + + def on_mouse_down(self, pos, button): + if button == mouse.LEFT: + for actor in self.actors.buttons: + if actor.collidepoint(pos): + actor.action() + break