Merge branch 'master' of ctpug.org.za:tabakrolletjie
authorSimon Cross <hodgestar@gmail.com>
Sat, 10 Sep 2016 14:19:40 +0000 (16:19 +0200)
committerSimon Cross <hodgestar@gmail.com>
Sat, 10 Sep 2016 14:19:40 +0000 (16:19 +0200)
1  2 
tabakrolletjie/scenes/day.py
tabakrolletjie/widgets.py

index 4ab14e713fc8b51f6f2ed2cbb4fb8ee09dece8e6,334e59f971b8189d0f20e644aaf046e0ad9feeb3..4cc42f893d8dc1203a330fb401a25fd01ad18e1a
@@@ -3,20 -3,21 +3,21 @@@
  import math
  
  import pygame.display
+ import pygame.surface
  import pygame.locals as pgl
  
  import pymunk
  import pymunk.pygame_util
  
  from .base import BaseScene
 -from ..lights import LightManager
 +from ..lights import LightManager, light_fitting_by_type
  from ..obstacles import ObstacleManager
  from ..events import SceneChangeEvent
- from ..utils import debug_timer
+ from ..utils import debug_timer, shadowed_text
  from ..loader import loader
 -from ..transforms import Overlay, Multiply, Alpha
 +from ..transforms import Overlay, Alpha, ColourWedges
  
 -from ..constants import SCREEN_SIZE, FONTS, COLOURS
 +from ..constants import SCREEN_SIZE, FONTS
  from ..widgets import ImageButton
  from ..turnip import Turnip, TurnipInvalidPosition
  
@@@ -35,7 -36,7 +36,7 @@@ class DayScene(BaseScene)
          self._harvested = gamestate.harvested
          self._paused = False
          self._tool = None
 -        self._light_color = None
 +        self._light_colors = None
          self._dragging = None
          # Turnip
          self.grow_turnips(gamestate)
          # Background
          self._soil = loader.load_image(
              "textures", "soil.png", transform=self.BRIGHTNESS)
+         # Check if we've lost
+         self._game_over_text = []
+         if self._seeds == 0 and len(self._turnips) == 0:
+             self._draw_game_over_text()
+     def _draw_game_over_text(self):
+         overlay = pygame.surface.Surface(
+             (SCREEN_SIZE[0], 240), pgl.SWSURFACE).convert_alpha()
+         overlay.fill((0, 0, 0, 128))
+         self._game_over_text.append((overlay, (0, 250)))
+         self._game_over_text.append(
+             (shadowed_text("You Lost", FONTS["bold"], 48), (400, 280)))
+         self._game_over_text.append(
+             (shadowed_text("You have no seeds and no turnips growing",
+                            FONTS["sans"], 24), (250, 350)))
+         self._game_over_text.append(
+             (shadowed_text("Press a key to return to the menu",
+                            FONTS["sans"], 24), (250, 400)))
  
      def grow_turnips(self, gamestate):
          for turnip_data in gamestate.turnips:
  
      def create_tools(self, gamestate):
          tools = []
-         x, y, step = 50, SCREEN_SIZE[1] - 40, 50
+         x, y, step = 0, SCREEN_SIZE[1] - 40, 50
+         tools.append(ImageButton(
+             '32', 'default_cursor.png', name='reset tool', pos=(x, y)))
+         x += step
          tools.append(ImageButton('32', 'seed.png', name='seed', pos=(x, y)))
          x += step
  
@@@ -73,7 -96,9 +96,9 @@@
              x += step
  
          tools.append(ImageButton(
-             '32', 'default_cursor.png', name='reset tool', pos=(x, y)))
+             '32', 'night.png', name='start night', pos=(SCREEN_SIZE[0] - 100, y)))
+         tools.append(ImageButton(
+             '32', 'exit.png', name='exit', pos=(SCREEN_SIZE[0] - 50, y)))
          return tools
  
      def exit(self, gamestate):
          for light_tool in self._light_toolbar:
              light_tool.render(surface)
          self._draw_cursor(surface)
+         if self._game_over_text:
+             for surf, pos in self._game_over_text:
+                 surface.blit(surf, pos)
  
      def _draw_light_toolbar(self, light_config, x):
 -        self._light_toolbar = []
          height = SCREEN_SIZE[1] - 80
 -        for color in sorted(COLOURS.keys()):
 -            light_tool = ImageButton('32', light_config["type"] + '.png',
 -                                     pos=(x, height), name=color,
 -                                     transform=Multiply(colour=COLOURS[color]))
 +        self._light_toolbar = []
 +        colour_combos = light_config["available_colours"]
 +        for combo in colour_combos:
 +            colours = combo.split("/")
 +            light_fitting = light_fitting_by_type(light_config["type"])
 +            light_tool = ImageButton(
 +                "32", light_fitting, transform=ColourWedges(colours=colours),
 +                pos=(x, height), name=combo)
 +            light_tool.colours = colours
              self._light_toolbar.append(light_tool)
              x += 40
  
      def _place_light(self, gamestate, cfg, colours, ev):
          cfg = cfg.copy()
          cost = cfg.pop("cost")
 +        cfg.pop("available_colours")
          if self._seeds > cost:
              pos = pymunk.pygame_util.from_pygame(
                  ev.pos, pygame.display.get_surface())
              self._lights.add_light(cfg)
  
      def event(self, ev, gamestate):
+         if self._game_over_text:
+             if ev.type in (pgl.KEYDOWN, pgl.MOUSEBUTTONDOWN):
+                 from .menu import MenuScene
+                 SceneChangeEvent.post(scene=MenuScene())
          if ev.type == pgl.KEYDOWN:
              if ev.key in (pgl.K_q, pgl.K_ESCAPE):
                  from .menu import MenuScene
                              self._unset_cursor()
                              self._tool = None
                              self._clear_light_toolbar()
+                         elif tool.name == 'start night':
+                             from .night import NightScene
+                             SceneChangeEvent.post(scene=NightScene())
+                         elif tool.name == 'exit':
+                             from .menu import MenuScene
+                             SceneChangeEvent.post(scene=MenuScene())
                          else:
                              self._tool = tool
                              if self._tool.name == 'seed':
                  # Check light toolbar
                  for light_tool in self._light_toolbar:
                      if light_tool.pressed(ev):
 +                        fitting_image = light_fitting_by_type(
 +                            self._tool.light_config["type"])
                          self._set_cursor(
 -                            self._tool.light_config["type"],
 -                            transform=Multiply(
 -                                colour=COLOURS[light_tool.name] + (172,)))
 -                        self._light_color = light_tool.name
 +                            fitting_image[:-4],  # strip .png
 +                            transform=ColourWedges(colours=light_tool.colours))
 +                        # colour=COLOURS[0] + (172,)))
 +                        self._light_colors = light_tool.colours
                          return
 -                if self._tool.name == "seed":
 -                    self._place_seed(gamestate, ev)
 -                elif self._tool.name == "light" and self._light_color:
 -                    self._place_light(
 -                        gamestate, self._tool.light_config,
 -                        [self._light_color], ev)
 +                if self._tool:
 +                    if self._tool.name == "seed":
 +                        self._place_seed(gamestate, ev)
 +                    elif self._tool.name == "light" and self._light_colors:
 +                        self._place_light(
 +                            gamestate, self._tool.light_config,
 +                            self._light_colors, ev)
                  else:
                      # Not tool, so check lights
                      self._lights.toggle_nearest(ev.pos, surfpos=True)
index 72d726f1d21cfc7ed3d1a53235002a8689561ea5,b1917e5abaf013f0bddef7c1391a99f15a40674a..c1d71c3b2fb18885b4429fe88a6f7f279cdb5d1c
@@@ -66,14 -66,16 +66,18 @@@ class ImageButton(Button)
  
      def __init__(self, *imgparts, **kwargs):
          transform = kwargs.pop("transform", NullTransform())
 -        self._img = loader.load_image(*imgparts, transform=transform)
 +        self._img = kwargs.pop("image", None)
 +        if self._img is None:
 +            self._img = loader.load_image(*imgparts, transform=transform)
          name = kwargs.get('name')
          pos = kwargs.get('pos')
          padding = kwargs.get('padding', 0)
          super(ImageButton, self).__init__(self._img.get_size(), name,
                                            pos, padding)
  
+     def update_image(self, *imgparts, **kwargs):
+         transform=kwargs.pop("transform", NullTransform())
+         self._img = loader.load_image(*imgparts, transform=transform)
+         
      def render(self, surface):
          surface.blit(self._img, self._pos, None)