58aa3b6a27bdfe10932ea6f1283bbc2599999346
[tabakrolletjie.git] / tabakrolletjie / infobar.py
1 # -*- coding: utf-8 -*-
2
3 """ A bar. With info. """
4
5 import pygame.surface
6 import pygame.locals as pgl
7
8 from .constants import FONTS
9 from .loader import loader
10
11
12 class InfoBar(object):
13     """ Info.bar. """
14
15     def __init__(
16             self, time_of_day, battery, scene,
17             color=(255, 255, 255), pos=(50, 10)):
18         self.time_of_day = time_of_day
19         self.battery = battery
20         self.scene = scene
21         self.color = color
22         self.pos = pos
23         self.template = u" ยท ".join([
24             "{time_of_day} {gamestate.days}",
25             "{gamestate.harvested}/{gamestate.turnip_target} turnips",
26             "{gamestate.seeds} seeds",
27             "{scene.turnip_count} plants",
28             "battery {battery.current}/{battery.max}",
29             "power usage {scene.power_usage}"
30         ])
31         self._font = loader.load_font(FONTS['sans'], size=20)
32         self._text = None
33         self._infobar = None
34
35     def render(self, surface, gamestate):
36         self._update(gamestate)
37         surface.blit(self._infobar, self.pos, None)
38
39     def _update_infobar(self):
40         text_img = self._font.render(self._text, True, self.color)
41         width = text_img.get_width() + 10
42         height = text_img.get_height() + 10
43         self._infobar = pygame.surface.Surface(
44             (width, height), pgl.SWSURFACE).convert_alpha()
45         self._infobar.fill((0, 0, 0, 64))
46         self._infobar.blit(text_img, (5, 3), None)
47
48     def _update(self, gamestate):
49         options = {
50             "gamestate": gamestate, "battery": self.battery,
51             "scene": self.scene, "time_of_day": self.time_of_day,
52         }
53         text = self.template.format(**options)
54         if text != self._text:
55             self._text = text
56             self._update_infobar()