# HG changeset patch # User Neil Muller # Date 1378070327 -7200 # Node ID 75d8ad4bf9b5cd456e0a40244704ac83d54a98be # Parent a5c839994d41a27433f7377c69570223710c9208 Hack in viewport diff -r a5c839994d41 -r 75d8ad4bf9b5 nagslang/screens/area.py --- a/nagslang/screens/area.py Sun Sep 01 23:00:45 2013 +0200 +++ b/nagslang/screens/area.py Sun Sep 01 23:18:47 2013 +0200 @@ -66,13 +66,35 @@ self.protagonist.toggle_form() self.keys.handle_event(ev) + def _calc_viewport(self, level_surface, display_surface): + level_size = level_surface.get_size() + display_size = display_surface.get_size() + protagnist_pos = self.protagonist.physicser.render_position( + level_surface) + x_wide = display_size[0] // 2 + y_wide = display_size[1] // 2 + if protagnist_pos[0] < x_wide: + x = 0 + elif protagnist_pos[0] > level_size[0] - x_wide: + x = level_size[0] - display_size[0] + else: + x = protagnist_pos[0] - x_wide + if protagnist_pos[1] < y_wide: + y = 0 + elif protagnist_pos[1] > level_size[1] - y_wide: + y = level_size[1] - display_size[1] + else: + y = protagnist_pos[1] - y_wide + return pygame.rect.Rect(x, y, display_size[0], display_size[1]) + def render(self, surface): #surface.fill(pygame.color.Color(0, 0, 0)) background = self._level.get_background() mysurface = background.copy() self.toy_switch.render(mysurface) self.protagonist.render(mysurface) - surface.blit(mysurface, (0, 0)) + render_rect = self._calc_viewport(mysurface, surface) + surface.blit(mysurface, (0, 0), render_rect) def tick_protagonist(self): dx, dy = 0, 0