changeset 18:9ecb1d222ee0

Screens.
author Simon Cross <hodgestar@gmail.com>
date Sun, 01 Sep 2013 14:48:21 +0200
parents b0644173d0aa
children 113f31bd9d49
files nagslang/area.py nagslang/engine.py nagslang/events.py nagslang/screens/__init__.py nagslang/screens/area.py nagslang/screens/base.py nagslang/screens/menu.py
diffstat 6 files changed, 83 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/nagslang/area.py	Sun Sep 01 14:36:18 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-"""A screen or area in which action happens."""
-
-import pymunk
-
-
-class Area(object):
-
-    def __init__(self):
-        self.space = pymunk.Space()
-
-    def render(self, surface):
-        pass
-
-    def tick(self, step):
-        """Step the given amount of time."""
-        self.space.step(step)
--- a/nagslang/engine.py	Sun Sep 01 14:36:18 2013 +0200
+++ b/nagslang/engine.py	Sun Sep 01 14:48:21 2013 +0200
@@ -1,25 +1,26 @@
 """Top-level event dispatching and area transition."""
 
-from pygame import event
-from pygame import time
-import pygame.locals as pyl
+import pygame
 
 from nagslang import constants
+from nagslang.screens.menu import MenuScreen
 
 
 class Engine(object):
-    def __init__(self, screen):
-        self._screen = screen
-        self._clock = time.Clock()
+    def __init__(self, surface):
+        self._surface = surface
+        self._clock = pygame.time.Clock()
         self._fps = constants.FPS
+        self._current_area = MenuScreen()
 
     def run(self):
         running = True
         while running:
-            for ev in event.get():
-                # TODO: dispatch these to an area
-                if ev.type == pyl.QUIT:
+            for ev in pygame.event.get():
+                if ev.type == pygame.locals.QUIT:
                     running = False
-                elif ev.type == pyl.KEYDOWN and ev.key == pyl.K_ESCAPE:
-                    running = False
+                else:
+                    self._current_area.handle_event(ev)
+            self._current_area.render(self._surface)
+            pygame.display.flip()
             self._clock.tick(self._fps)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nagslang/events.py	Sun Sep 01 14:48:21 2013 +0200
@@ -0,0 +1,17 @@
+"""Events to post."""
+
+from pygame import event
+import pygame.locals as pyl
+
+
+class Event(object):
+    TYPE = None
+
+    @classmethod
+    def post(cls, **data):
+        ev = event.Event(cls.TYPE, **data)
+        event.post(ev)
+
+
+class QuitEvent(Event):
+    TYPE = pyl.QUIT
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nagslang/screens/area.py	Sun Sep 01 14:48:21 2013 +0200
@@ -0,0 +1,11 @@
+"""Display a game area."""
+
+from nagslang.screens.base import Screen
+
+
+class AreaScreen(Screen):
+    def handle_event(self, ev):
+        pass
+
+    def render(self, surface):
+        pass
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nagslang/screens/base.py	Sun Sep 01 14:48:21 2013 +0200
@@ -0,0 +1,23 @@
+"""A screen or area in which action happens."""
+
+from pygame import event
+import pymunk
+
+
+class Screen(object):
+
+    def __init__(self):
+        self.space = pymunk.Space()
+
+    def post_event(self, ev):
+        event.post(ev)
+
+    def handle_event(self, ev):
+        pass
+
+    def render(self, surface):
+        pass
+
+    def tick(self, step):
+        """Step the given amount of time."""
+        self.space.step(step)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nagslang/screens/menu.py	Sun Sep 01 14:48:21 2013 +0200
@@ -0,0 +1,20 @@
+"""Display a menu screen."""
+
+from pygame.rect import Rect
+from pygame.color import Color
+import pygame.locals as pyl
+
+from nagslang.screens.base import Screen
+from nagslang.events import QuitEvent
+
+
+class MenuScreen(Screen):
+
+    def handle_event(self, ev):
+        if ev.type == pyl.KEYDOWN and ev.key == pyl.K_ESCAPE:
+            QuitEvent.post()
+
+    def render(self, surface):
+        color = Color(255, 0, 0)
+        rect = Rect(10, 10, 200, 200)
+        surface.fill(color, rect)