1 """ Roach management scene. """
3 from pgzero.constants import keys
4 from pgzero.actor import Actor
5 from ..actors.buttons import TextButton
6 from ..constants import WIDTH, HEIGHT
7 from .base import Scene, ChangeSceneEvent
10 TOOLBAR_LEFT_X = WIDTH * 3 // 4
12 TOOLBAR_MID_Y = HEIGHT * 1 // 2
13 BUTTON_INSET = (20, 20)
16 def inset_button(pos, dx, dy):
18 pos[0] + dx * BUTTON_INSET[0],
19 pos[1] + dy * BUTTON_INSET[1])
22 class RoachesScene(Scene):
23 """ Roach management scene. """
27 self._roach_actors = {}
28 self._roaches = self.actors.add_layer("roaches", level=10)
29 self._pads = self.actors.add_layer("pads", level=5)
30 self._buttons = self.actors.add_layer("buttons", level=6)
36 self.actors.default.add(Actor("vehicles/walking/background"))
39 self._roach_pad = self._pads.add(
40 Actor("roach_management/roach_pad", anchor=("left", "bottom")))
41 self._roach_pad.pos = (TOOLBAR_LEFT_X, TOOLBAR_MID_Y)
42 self._inventory_pad = self._pads.add(
43 Actor("roach_management/inventory_pad", anchor=("left", "top")))
44 self._inventory_pad.pos = (TOOLBAR_LEFT_X, TOOLBAR_MID_Y)
46 def _init_buttons(self):
47 self._roach_left = self._buttons.add(
48 Actor("roach_management/left_button", anchor=("left", "bottom")))
49 self._roach_left.pos = inset_button(
50 self._roach_pad.bottomleft, 1, -1)
52 self._roach_right = self._buttons.add(
53 Actor("roach_management/right_button", anchor=("right", "bottom")))
54 self._roach_right.pos = inset_button(
55 self._roach_pad.bottomright, -1, -1)
57 self._inventory_left = self._buttons.add(
58 Actor("roach_management/left_button", anchor=("left", "bottom")))
59 self._inventory_left.pos = inset_button(
60 self._inventory_pad.bottomleft, 1, -1)
62 self._inventory_right = self._buttons.add(
63 Actor("roach_management/right_button", anchor=("right", "bottom")))
64 self._inventory_right.pos = inset_button(
65 self._inventory_pad.bottomright, -1, -1)
67 self._road_eject = self._buttons.add(
68 Actor("roach_management/eject_button", anchor=("right", "top")))
69 self._road_eject.pos = inset_button(
70 (TOOLBAR_LEFT_X, TOOLBAR_TOP_Y), -1, 1)
72 def update(self, world, dt):
73 for i, roach in enumerate(world.roaches):
74 if roach.name in self._roach_actors:
75 actor = self._roach_actors[roach.name]
77 actor = TextButton("%s [%s]" % (
79 ", ".join("%s=%s" % kv for kv in sorted(
80 roach.attributes.items()),
82 self._roach_actors[roach.name] = actor
83 self._roaches.add(actor)
84 # TODO: remove missing roaches
85 actor.pos = (300, 100 + i * 100)
87 def on_key_down(self, key, mod, unicode):
88 if key == keys.ESCAPE:
89 from .menu import MenuScene
90 return [ChangeSceneEvent(MenuScene())]