changeset 614:974cc69d3762 pyntnclick

Special cases aren't special enough to be named special.
author Simon Cross <hodgestar+bzr@gmail.com>
date Sat, 11 Feb 2012 21:22:24 +0200
parents 44d4e3020874
children cb01c3a09ee1
files gamelib/main.py gamelib/menu.py pyntnclick/gamescreen.py pyntnclick/main.py
diffstat 4 files changed, 14 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/gamelib/main.py	Sat Feb 11 21:18:41 2012 +0200
+++ b/gamelib/main.py	Sat Feb 11 21:22:24 2012 +0200
@@ -10,7 +10,7 @@
 
     INITIAL_SCENE = scenes.INITIAL_SCENE
     SCENE_LIST = scenes.SCENE_LIST
-    SPECIAL_SCREENS = {
+    SCREENS = {
             'menu': MenuScreen,
             'end': EndScreen,
             }
--- a/gamelib/menu.py	Sat Feb 11 21:18:41 2012 +0200
+++ b/gamelib/menu.py	Sat Feb 11 21:22:24 2012 +0200
@@ -27,7 +27,7 @@
         self.surface.blit(self._background, self.surface.get_rect())
 
     def start(self, ev, widget):
-        self.change_screen(self.game_description.INITIAL_SCENE)
+        self.change_screen('game')
 
     def check_running(self):
         # TODO: Implement this magic.
--- a/pyntnclick/gamescreen.py	Sat Feb 11 21:18:41 2012 +0200
+++ b/pyntnclick/gamescreen.py	Sat Feb 11 21:22:24 2012 +0200
@@ -204,9 +204,8 @@
 
 
 class GameScreen(Screen, CursorWidget):
-    def __init__(self, shell, game_description):
+    def __init__(self, game_description):
         CursorWidget.__init__(self, self)
-        Screen.__init__(self, shell)
         self.running = False
         self.create_initial_state = game_description.initial_state
 
--- a/pyntnclick/main.py	Sat Feb 11 21:18:41 2012 +0200
+++ b/pyntnclick/main.py	Sat Feb 11 21:22:24 2012 +0200
@@ -16,7 +16,7 @@
 from pygame.locals import SWSURFACE
 
 from pyntnclick.engine import Engine
-from pyntnclick.gamescreen import DefMenuScreen, DefEndScreen
+from pyntnclick.gamescreen import DefMenuScreen, DefEndScreen, GameScreen
 from pyntnclick.constants import GameConstants, DEBUG_ENVVAR
 from pyntnclick.resources import Resources
 from pyntnclick.sound import Sound
@@ -39,10 +39,10 @@
     SCENE_LIST = None
 
     # starting menu
-    SPECIAL_SCREENS = {
-            'menu': DefMenuScreen,
-            'end': DefEndScreen,
-            }
+    SCREENS = {
+        'menu': DefMenuScreen,
+        'end': DefEndScreen,
+        }
 
     START_SCREEN = 'menu'
 
@@ -55,10 +55,15 @@
         if not self.SCENE_LIST:
             raise GameDescriptionError("A game must have a non-empty list"
                                        " of scenes.")
+        if 'game' in self.SCREENS:
+            raise GameDescriptionError("The 'game' screen is reserved for the"
+                                       " game itself.")
         self._initial_scene = self.INITIAL_SCENE
         self._scene_list = self.SCENE_LIST
         self._resource_module = self.RESOURCE_MODULE
         self._debug_rects = False
+        self._screens = self.SCREENS.copy()
+        self._screens['game'] = GameScreen
         self.resource = Resources(self._resource_module)
         self.sound = Sound(self.resource)
         self.constants = self.game_constants()
@@ -152,7 +157,7 @@
 
             self.engine = Engine(self)
             # Initialize the special screens in the engine
-            for name, cls in self.SPECIAL_SCREENS.iteritems():
+            for name, cls in self._screens.iteritems():
                 screen = cls(self)
                 self.engine.add_screen(name, screen)
             # Should we allow the menu not to be the opening screen?