Make roach management buttons print things.
[koperkapel.git] / koperkapel / scenes / roaches.py
index 74f32a96f3344acacddb3406633e9cce62edbaab..34f02679c5ed5807f6af13ef6e1d9a8e3490d520 100644 (file)
@@ -1,16 +1,89 @@
 """ Roach management scene. """
 
-from pgzero.constants import keys
-from ..actors.buttons import TextButton
+from pgzero.constants import keys, mouse
+from pgzero.actor import Actor
+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._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._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):
@@ -23,7 +96,7 @@ class RoachesScene(Scene):
                         roach.attributes.items()),
                     )))
                 self._roach_actors[roach.name] = actor
-                self.actors.add(actor)
+                self._roaches.add(actor)
             # TODO: remove missing roaches
             actor.pos = (300, 100 + i * 100)
 
@@ -31,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