diff options
-rw-r--r-- | src/editorui.py | 58 | ||||
-rw-r--r-- | src/mapdata.py | 10 | ||||
-rw-r--r-- | src/ui.py | 3 |
3 files changed, 70 insertions, 1 deletions
diff --git a/src/editorui.py b/src/editorui.py index 5055f69..7f2a7f7 100644 --- a/src/editorui.py +++ b/src/editorui.py @@ -1,5 +1,63 @@ from common import * +class KPMapScene(QtGui.QGraphicsScene): + def drawBackground(self, painter, rect): + painter.fillRect(rect, Qt.white) + + areaLeft, areaTop = rect.x(), rect.y() + areaWidth, areaHeight = rect.width(), rect.height() + areaRight, areaBottom = areaLeft+areaWidth, areaTop+areaHeight + + areaLeftT = areaLeft / 24 + areaTopT = areaTop / 24 + areaRightT = areaRight / 24 + areaBottomT = areaBottom / 24 + + for layer in KP.map.layers: + left, top = layer.cacheBasePos + width, height = layer.cacheSize + right, bottom = left+width, top+height + + if width == 0 and height == 0: continue + + if right < areaLeftT: continue + if left > areaRightT: continue + + if bottom < areaTopT: continue + if top > areaBottomT: continue + + # decide how much of the layer we'll actually draw + drawLeft = max(areaLeftT, left) + drawRight = min(areaRightT, right) + + drawTop = max(areaTopT, top) + drawBottom = max(areaBottomT, bottom) + + srcY = drawTop - top + destY = drawTop * 24 + + baseSrcX = drawLeft - left + baseDestX = drawLeft * 24 + + rows = layer.cache + tileset = KP.map.tilesets[layer.tileset] + tileList = tileset.tiles + + for y in xrange(drawTop, drawBottom): + srcX = baseSrcX + destX = baseDestX + row = rows[srcY] + + for x in xrange(drawLeft, drawRight): + tile = row[srcX] + if tile != -1: + painter.drawPixmap(destX, destY, tileList[tile]) + + srcX += 1 + destX += 24 + + srcY += 1 + destY += 24 class KPEditorWidget(QtGui.QGraphicsView): pass diff --git a/src/mapdata.py b/src/mapdata.py index ad0bef2..550d710 100644 --- a/src/mapdata.py +++ b/src/mapdata.py @@ -25,9 +25,17 @@ class KPLayer(object): self.tileset = '' self.objects = [] self.visible = True - self.cache = [] + self.cache = ['DUMMY_FLAG'] + self.updateCache() def updateCache(self): + if len(self.objects) == 0: + if len(self.cache) != 0: + self.cache = [] + self.cacheBasePos = (0,0) + self.cacheSize = (0,0) + return + x1, x2 = MAP_SIZE_IN_TILES[0] - 1, 0 y1, y2 = MAP_SIZE_IN_TILES[1] - 1, 0 @@ -141,6 +141,9 @@ class KPMainWindow(QtGui.QMainWindow): self.editor = KPEditorWidget() self.setCentralWidget(self.editor) + self.scene = KPMapScene() + self.editor.setScene(self.scene) + self.setupMenuBar() self.setupDocks() |