diff nagslang/screens/area.py @ 87:75d8ad4bf9b5

Hack in viewport
author Neil Muller <drnlmuller@gmail.com>
date Sun, 01 Sep 2013 23:18:47 +0200
parents a5c839994d41
children 4c7e85906453
line wrap: on
line diff
--- 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