[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