[pypy-svn] r62656 - pypy/trunk/pypy/lang/gameboy

tverwaes at codespeak.net tverwaes at codespeak.net
Fri Mar 6 17:56:58 CET 2009


Author: tverwaes
Date: Fri Mar  6 17:56:55 2009
New Revision: 62656

Modified:
   pypy/trunk/pypy/lang/gameboy/gameboy_implementation.py
   pypy/trunk/pypy/lang/gameboy/video.py
   pypy/trunk/pypy/lang/gameboy/video_meta.py
   pypy/trunk/pypy/lang/gameboy/video_sprite.py
Log:
further disentangling classes


Modified: pypy/trunk/pypy/lang/gameboy/gameboy_implementation.py
==============================================================================
--- pypy/trunk/pypy/lang/gameboy/gameboy_implementation.py	(original)
+++ pypy/trunk/pypy/lang/gameboy/gameboy_implementation.py	Fri Mar  6 17:56:55 2009
@@ -7,7 +7,8 @@
 from pypy.lang.gameboy.timer import Clock
 from pypy.lang.gameboy.video_meta import TileDataWindow, SpriteWindow,\
                                          WindowPreview, BackgroundPreview,\
-                                         MapAViewer, MapBViewer
+                                         MapAViewer, MapBViewer,\
+                                         SpritesWindow
 from pypy.lang.gameboy import constants
 import time
 
@@ -122,13 +123,15 @@
             self.screen = RSDL.SetVideoMode(self.width, self.height, 32, 0)
  
     def create_meta_windows(self, gameboy):
-        self.meta_windows = [TileDataWindow(gameboy),
-                             SpriteWindow(gameboy),
-                             WindowPreview(gameboy),
-                             BackgroundPreview(gameboy),
-                             MapAViewer(gameboy),
-                             MapBViewer(gameboy)]
+        upper_meta_windows = [TileDataWindow(gameboy),
+                              SpriteWindow(gameboy),
+                              WindowPreview(gameboy)]
+        lower_meta_windows = [BackgroundPreview(gameboy),
+                              MapAViewer(gameboy),
+                              MapBViewer(gameboy),
+                              SpritesWindow(gameboy)]
         
+        self.meta_windows = upper_meta_windows + lower_meta_windows
         for window in self.meta_windows:
             window.set_origin(self.width, 0)
             self.height = max(self.height, window.height)

Modified: pypy/trunk/pypy/lang/gameboy/video.py
==============================================================================
--- pypy/trunk/pypy/lang/gameboy/video.py	(original)
+++ pypy/trunk/pypy/lang/gameboy/video.py	Fri Mar  6 17:56:55 2009
@@ -20,13 +20,13 @@
         self.driver                 = video_driver
         self.v_blank_interrupt_flag = interrupt.v_blank
         self.lcd_interrupt_flag     = interrupt.lcd
-        self.window                 = Window(self)
-        self.background             = Background(self)
+        self.create_tile_maps()
+        self.window                 = Window(self.tile_maps)
+        self.background             = Background(self.tile_maps)
         self.status                 = StatusRegister(self)
         self.control                = ControlRegister(self, self.window, 
                                                       self.background)
         self.memory                 = memory
-        self.create_tile_maps()
         self.create_tiles()
         self.create_sprites()
         self.reset()
@@ -473,23 +473,23 @@
     def draw_line(self):
         self.draw_window(self.background, self.line_y, self.line)
         self.draw_window(self.window, self.line_y, self.line)
-        self.draw_sprites_line()
+        self.draw_sprites(self.line_y, self.line)
         self.send_pixels_line_to_driver()
     
-    def draw_sprites_line(self):
+    def draw_sprites(self, line_y, line):
         if not self.control.sprites_enabled: return
-        count = self.scan_sprites()
+        count = self.scan_sprites(line_y)
         lastx = SPRITE_SIZE + GAMEBOY_SCREEN_WIDTH + SPRITE_SIZE
         for index in range(count):
             sprite = self.shown_sprites[index]
-            sprite.draw(self.line, self.line_y, lastx)
+            sprite.draw(line, line_y, lastx)
             lastx = sprite.x
             
-    def scan_sprites(self):
+    def scan_sprites(self, line_y):
         # search active shown_sprites
         count = 0
         for sprite in self.sprites:
-            if sprite.is_shown_on_line(self.line_y):
+            if sprite.is_shown_on_line(line_y):
                 self.shown_sprites[count] = sprite
                 count += 1
                 if count >= SPRITES_PER_LINE:

Modified: pypy/trunk/pypy/lang/gameboy/video_meta.py
==============================================================================
--- pypy/trunk/pypy/lang/gameboy/video_meta.py	(original)
+++ pypy/trunk/pypy/lang/gameboy/video_meta.py	Fri Mar  6 17:56:55 2009
@@ -33,7 +33,8 @@
             for x in range(self.width):
                 self.gameboy.video_driver.draw_pixel(x + self.x,
                                                      y + self.y,
-                                                     self.gameboy.video.palette[self.screen[y][x]])
+                                                     self.gameboy.video.palette[
+                                                           self.screen[y][x]])
 
     def clear_screen(self):
         for line in self.screen:
@@ -56,13 +57,13 @@
                     line = self.screen[y_offset + y_id * SPRITE_SIZE]
                     tile.draw(line, x_id * SPRITE_SIZE, y_offset)
 
-class PreviewWindow(VideoMetaWindow):
+class LogicWindow(VideoMetaWindow):
     def __init__(self, gameboy):
         VideoMetaWindow.__init__(self, gameboy,
                                        SPRITE_SIZE + GAMEBOY_SCREEN_WIDTH + SPRITE_SIZE,
                                        GAMEBOY_SCREEN_HEIGHT)
 
-    def get_window(self):
+    def draw_line(self, y, line):
         raise Exception("Not Implemented")
 
     def update_screen(self):
@@ -70,11 +71,21 @@
             line = self.screen[y]
             for i in range(len(line)):
                 line[i] = 0x00
-            self.gameboy.video.draw_window(self.get_window(), y, line)
+            self.draw_line(y, line)
+
+class PreviewWindow(LogicWindow):
+    def get_window(self):
+        raise Exception("Not Implemented")
+
+    def draw_line(self, y, line):
+        self.gameboy.video.draw_window(self.get_window(), y, line)
+
+class SpritesWindow(LogicWindow):
+    def draw_line(self, y, line):
+        self.gameboy.video.draw_sprites(y, line)
 
 class WindowPreview(PreviewWindow):
     def get_window(self):
-        # XXX Broken for now
         return self.gameboy.video.window
 
 class BackgroundPreview(PreviewWindow):

Modified: pypy/trunk/pypy/lang/gameboy/video_sprite.py
==============================================================================
--- pypy/trunk/pypy/lang/gameboy/video_sprite.py	(original)
+++ pypy/trunk/pypy/lang/gameboy/video_sprite.py	Fri Mar  6 17:56:55 2009
@@ -248,17 +248,14 @@
 # -----------------------------------------------------------------------------
 
 class Drawable(object):
-    def __init__(self, video):
-        self.video                   = video
+    def __init__(self, tile_maps):
+        self.tile_maps               = tile_maps
         self.enabled                 = False
         self.upper_tile_map_selected = False
         self.reset()
 
     def get_tile_map_space(self):
-        if self.upper_tile_map_selected:
-            return self.video.tile_map_1
-        else:
-            return self.video.tile_map_0
+        return self.tile_maps[self.upper_tile_map_selected]
 
     def reset(self):
         raise Exception("Not implemented")
@@ -314,11 +311,11 @@
             line[x] = 0x00
     
     def draw_line(self, line_y, tile_data, tile_index_flip, line):
-        y = (self.scroll_y + line_y) & 0xFF
+        relative_y = (self.scroll_y + line_y) & 0xFF
         x = self.scroll_x
 
         tile_map = self.get_tile_map_space()
-        tile_group = tile_map[y >> 3]
+        tile_group = tile_map[relative_y >> 3]
         self.draw_tiles(8 - (x % 8), tile_group,
-                        y, tile_data,
+                        relative_y, tile_data,
                         tile_index_flip, line, x >> 3)



More information about the Pypy-commit mailing list