changeset 639:fdc63049b08c pyntnclick

Add game_description to the widgets,, since it looks a useful thing to do
author Neil Muller <neil@dip.sun.ac.za>
date Sun, 12 Feb 2012 01:31:14 +0200
parents d1ec9e739e23
children e8daeb766939
files gamelib/endscreen.py gamelib/menu.py pyntnclick/engine.py pyntnclick/gamescreen.py pyntnclick/widgets/base.py pyntnclick/widgets/imagebutton.py pyntnclick/widgets/listbox.py pyntnclick/widgets/messagebox.py pyntnclick/widgets/overlay.py pyntnclick/widgets/text.py pyntnclick/widgets/toollist.py
diffstat 11 files changed, 40 insertions(+), 37 deletions(-) [+]
line wrap: on
line diff
--- a/gamelib/endscreen.py	Sun Feb 12 01:27:53 2012 +0200
+++ b/gamelib/endscreen.py	Sun Feb 12 01:31:14 2012 +0200
@@ -16,7 +16,7 @@
 
     def add_image_button(self, rect, image_name, callback):
         image = self.resource.get_image(image_name)
-        widget = ImageButtonWidget(rect, image)
+        widget = ImageButtonWidget(rect, self.gd, image)
         widget.add_callback('clicked', callback)
         self.container.add(widget)
 
--- a/gamelib/menu.py	Sun Feb 12 01:27:53 2012 +0200
+++ b/gamelib/menu.py	Sun Feb 12 01:31:14 2012 +0200
@@ -19,7 +19,7 @@
 
     def add_image_button(self, rect, image_name, callback):
         image = self.resource.get_image(image_name)
-        widget = ImageButtonWidget(rect, image)
+        widget = ImageButtonWidget(rect, self.gd, image)
         widget.add_callback('clicked', callback)
         self.container.add(widget)
 
--- a/pyntnclick/engine.py	Sun Feb 12 01:27:53 2012 +0200
+++ b/pyntnclick/engine.py	Sun Feb 12 01:31:14 2012 +0200
@@ -13,9 +13,9 @@
 
 
 class Engine(object):
-    def __init__(self, game_description):
+    def __init__(self, gd):
         self._screen = None
-        self._game_description = game_description
+        self._gd = gd
         self.screens = {}
 
     def set_screen(self, screen_name):
@@ -40,7 +40,7 @@
                 if ev.type == QUIT:
                     return
                 elif ev.type == MUSIC_ENDED:
-                    self._game_description.sound.music_ended()
+                    self._gd.sound.music_ended()
                 elif ScreenChangeEvent.matches(ev):
                     self.set_screen(ev.screen_name)
                 elif ScreenEvent.matches(ev):
@@ -52,22 +52,23 @@
             self._screen.draw(surface)
             flip()
             self._fps = 1000.0 / clock.tick(
-                    self._game_description.constants.frame_rate)
+                    self._gd.constants.frame_rate)
 
 
 class Screen(object):
     """A top level object for the screen being displayed"""
 
-    def __init__(self, game_description):
+    def __init__(self, gd):
         # Avoid import loop
         from pyntnclick.widgets.base import Container
 
-        self.game_description = game_description
-        self.resource = game_description.resource
+        self.gd = gd
+        self.resource = gd.resource
 
-        self.surface_size = game_description.constants.screen
+        self.surface_size = gd.constants.screen
         self.surface = None
-        self.container = Container(pygame.Rect((0, 0), self.surface_size))
+        self.container = Container(pygame.Rect((0, 0),  self.surface_size),
+                self.gd)
         self.setup()
 
     def on_enter(self):
--- a/pyntnclick/gamescreen.py	Sun Feb 12 01:27:53 2012 +0200
+++ b/pyntnclick/gamescreen.py	Sun Feb 12 01:31:14 2012 +0200
@@ -26,8 +26,8 @@
     sel_color = Color("yellow")
     sel_width = 2
 
-    def __init__(self, screen):
-        Widget.__init__(self, Rect((0, 0) + screen.surface_size))
+    def __init__(self, gd, screen):
+        Widget.__init__(self, Rect((0, 0) + screen.surface_size), gd)
         self.screen = screen
         self.game = screen.game
         self.state_widget = screen.state_widget
@@ -64,11 +64,11 @@
 
 class StateWidget(Widget):
 
-    def __init__(self, rect, screen):
-        Widget.__init__(self, rect)
+    def __init__(self, rect, gd, screen):
+        Widget.__init__(self, rect, gd)
         self.screen = screen
         self.game = screen.game
-        self.detail = DetailWindow(rect, screen)
+        self.detail = DetailWindow(rect, gd, screen)
         self.add_callback(MOUSEBUTTONDOWN, self.mouse_down)
         self.add_callback(MOUSEMOTION, self.mouse_move)
 
@@ -135,8 +135,8 @@
 
 
 class DetailWindow(Container):
-    def __init__(self, rect, screen):
-        Container.__init__(self, rect)
+    def __init__(self, rect, gd, screen):
+        Container.__init__(self, rect, gd)
         self.image_rect = None
         self.screen = screen
         self.game = screen.game
@@ -205,7 +205,7 @@
 
     def setup(self):
         self.running = False
-        self.create_initial_state = self.game_description.initial_state
+        self.create_initial_state = self.gd.initial_state
 
     def _clear_all(self):
         for widget in self.container.children[:]:
@@ -217,11 +217,11 @@
 
     def start_game(self):
         self._clear_all()
-        toolbar_height = self.game_description.constants.button_size
+        toolbar_height = self.gd.constants.button_size
         rect = Rect(0, 0, self.surface_size[0],
                     self.surface_size[1] - toolbar_height)
         self.game = self.create_initial_state()
-        self.state_widget = StateWidget(rect, self)
+        self.state_widget = StateWidget(rect, self.gd, self)
         self.container.add(self.state_widget)
 
         # XXX: self.popup_menu = PopupMenu(self)
@@ -230,7 +230,7 @@
 
         # XXX: self.handbutton = HandButton(action=self.hand_pressed)
 
-        self.inventory = InventoryView(self)
+        self.inventory = InventoryView(self.gd, self)
 
         # XXX: self.toolbar = ToolBar([
         #        self.menubutton,
--- a/pyntnclick/widgets/base.py	Sun Feb 12 01:27:53 2012 +0200
+++ b/pyntnclick/widgets/base.py	Sun Feb 12 01:31:14 2012 +0200
@@ -9,10 +9,12 @@
 
 class Widget(object):
 
-    def __init__(self, rect):
+    def __init__(self, rect, gd):
         if not isinstance(rect, pygame.Rect):
             rect = pygame.Rect(rect, (0, 0))
         self.rect = rect
+        self.gd = gd
+        self.resource = gd.resource
         self.modal = False
         self.parent = None
         self.disabled = False
@@ -77,10 +79,10 @@
 
 class Container(Widget):
 
-    def __init__(self, rect=None):
+    def __init__(self, rect, gd):
         if rect is None:
             rect = pygame.Rect(0, 0, 0, 0)
-        super(Container, self).__init__(rect)
+        super(Container, self).__init__(rect, gd)
         self.children = []
 
     def event(self, ev):
--- a/pyntnclick/widgets/imagebutton.py	Sun Feb 12 01:27:53 2012 +0200
+++ b/pyntnclick/widgets/imagebutton.py	Sun Feb 12 01:31:14 2012 +0200
@@ -6,10 +6,10 @@
 class ImageButtonWidget(Button):
     """An image that is also a button. Whatever next?"""
 
-    def __init__(self, rect, image):
+    def __init__(self, rect, gd, image):
         if not isinstance(rect, pygame.Rect):
             rect = pygame.Rect(rect, image.get_size())
-        super(ImageButtonWidget, self).__init__(rect)
+        super(ImageButtonWidget, self).__init__(rect, gd)
         self.image = image
 
     def draw(self, surface):
--- a/pyntnclick/widgets/listbox.py	Sun Feb 12 01:27:53 2012 +0200
+++ b/pyntnclick/widgets/listbox.py	Sun Feb 12 01:31:14 2012 +0200
@@ -5,8 +5,8 @@
 
 class ListBox(Box):
 
-    def __init__(self, rect, text, widget_list, page_length=8):
-        super(ListBox, self).__init__(rect)
+    def __init__(self, rect, gd, text, widget_list, page_length=8):
+        super(ListBox, self).__init__(rect, gd)
         self.message = TextWidget(rect, text)
         self.toolbar = ToolListWidget(rect, widget_list, page_length)
         self.prepare()
--- a/pyntnclick/widgets/messagebox.py	Sun Feb 12 01:27:53 2012 +0200
+++ b/pyntnclick/widgets/messagebox.py	Sun Feb 12 01:31:14 2012 +0200
@@ -5,9 +5,9 @@
 
 class MessageBox(Box):
 
-    def __init__(self, rect, text, post_callback=None, color='red',
+    def __init__(self, rect, gd, text, post_callback=None, color='red',
             fontsize=FONT_SIZE):
-        super(MessageBox, self).__init__(rect)
+        super(MessageBox, self).__init__(rect, gd)
         self.text = text
         self.font_size = fontsize
         self.post_callback = post_callback
--- a/pyntnclick/widgets/overlay.py	Sun Feb 12 01:27:53 2012 +0200
+++ b/pyntnclick/widgets/overlay.py	Sun Feb 12 01:31:14 2012 +0200
@@ -5,9 +5,9 @@
     """A non-visiable clickable area, that causes an overlay to be
     displayed. Doesn't really understand this focus thing."""
 
-    def __init__(self, rect, image):
+    def __init__(self, rect, gd, image):
         self.image = image
-        super(OverlayButton, self).__init__(rect)
+        super(OverlayButton, self).__init__(rect, gd)
 
     def draw(self, surface):
         if not self.disabled:
--- a/pyntnclick/widgets/text.py	Sun Feb 12 01:27:53 2012 +0200
+++ b/pyntnclick/widgets/text.py	Sun Feb 12 01:31:14 2012 +0200
@@ -11,8 +11,8 @@
 class TextWidget(Widget):
     fontcache = {}
 
-    def __init__(self, rect, text, fontname=None, fontsize=None, color=None):
-        super(TextWidget, self).__init__(rect)
+    def __init__(self, rect, gd, text, fontname=None, fontsize=None, color=None):
+        super(TextWidget, self).__init__(rect, gd)
         self.text = text
         if fontname is None:
             self.fontname = 'Vera.ttf'  # FIXME: Hardcoded...
--- a/pyntnclick/widgets/toollist.py	Sun Feb 12 01:27:53 2012 +0200
+++ b/pyntnclick/widgets/toollist.py	Sun Feb 12 01:31:14 2012 +0200
@@ -5,14 +5,14 @@
 class ToolListWidget(Container):
     """List of other widgets, with some paging trickery"""
 
-    def __init__(self, rect, widget_list, page_length,
+    def __init__(self, rect, gd, widget_list, page_length,
                  padding=2):
         widget_list.sort(key=lambda w: w.text)
         self.widget_list = widget_list
         self.page_length = page_length
         self.padding = padding
         self.page = 0
-        super(ToolListWidget, self).__init__(rect)
+        super(ToolListWidget, self).__init__(rect, gd)
         self.prev_but = None
         self.next_but = None
         self.fill_page()