[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    playground/games/magazynier
From:       Niels Slot <nielsslot () gmail ! com>
Date:       2010-10-31 12:33:12
Message-ID: 20101031123312.8EAA2AC8A4 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1191563 by nielsslot:

Port Magazynier to KGameRenderer.

 M  +47 -4     item.cpp  
 M  +4 -3      item.h  
 M  +2 -1      levelModel.cpp  
 M  +6 -115    renderer.cpp  
 M  +3 -12     renderer.h  


--- trunk/playground/games/magazynier/item.cpp #1191562:1191563
@@ -21,17 +21,60 @@
 
 #include "renderer.h"
 
-MagazynierItem::MagazynierItem(QGraphicsItem *parent) :
-	QGraphicsPixmapItem(parent),
-	m_itemOrientation()
+MagazynierItem::MagazynierItem(KGameRenderer* renderer, const QString& spriteKey,
+			       QGraphicsItem *parent) :
+	KGameRenderedItem(renderer, spriteKey, parent),
+	m_itemOrientation(*LevelModel::m_moveDirUp)
 {
+	setRenderSize(QSize(Renderer::instance()->getItemSize(), \
Renderer::instance()->getItemSize()));  }
 
 void MagazynierItem::updatePixmap(void)
 {
-	setPixmap(Renderer::instance()->get(m_itemType, m_itemOrientation));
+	QString name;
+	switch (m_itemType) {
+	case Empty:
+		name = "Empty";
+		break;
+	case Box:
+		name = "Box";
+		break;
+	case Goal:
+		name = "Goal";
+		break;
+	case Goal|Box:
+		name = "Goal_Box";
+		break;
+	case Goal|Player:
+		if (m_itemOrientation == *LevelModel::m_moveDirUp) {
+			name = "Goal_Player_Up";
+		} else if (m_itemOrientation == *LevelModel::m_moveDirRight) {
+			name = "Goal_Player_Right";
+		} else if (m_itemOrientation == *LevelModel::m_moveDirDown) {
+			name = "Goal_Player_Down";
+		} else if (m_itemOrientation == *LevelModel::m_moveDirLeft) {
+			name = "Goal_Player_Left";
 }
+		break;
+	case Player:
+		if (m_itemOrientation == *LevelModel::m_moveDirUp) {
+			name = "Player_Up";
+		} else if (m_itemOrientation == *LevelModel::m_moveDirRight) {
+			name = "Player_Right";
+		} else if (m_itemOrientation == *LevelModel::m_moveDirDown) {
+			name = "Player_Down";
+		} else if (m_itemOrientation == *LevelModel::m_moveDirLeft) {
+			name = "Player_Left";
+		}
 
+		break;
+	case Wall:
+		name = "Wall";
+		break;
+	}
+	setSpriteKey(name);
+}
+
 int MagazynierItem::itemType(void) const
 {
 	return m_itemType;
--- trunk/playground/games/magazynier/item.h #1191562:1191563
@@ -17,16 +17,17 @@
 #ifndef ITEM_H
 #define ITEM_H
 
-#include <QGraphicsPixmapItem>
 #include <QPoint>
+#include <KGameRenderedItem>
 
 #include "levelModel.h"
 
 
-class MagazynierItem : public QGraphicsPixmapItem
+class MagazynierItem : public KGameRenderedItem
 {
 	public:
-		MagazynierItem(QGraphicsItem *parent = 0);
+		MagazynierItem(KGameRenderer* renderer, const QString& spriteKey = "Empty",
+			       QGraphicsItem *parent = 0);
 		void setItemType(int itemType);
 		int itemType(void) const;
 		void updatePixmap(void);
--- trunk/playground/games/magazynier/levelModel.cpp #1191562:1191563
@@ -89,7 +89,7 @@
 	for (int col = 0; col < m_columnCount; ++col) {
 		m_levelItems->replace(col, new QVector<MagazynierItem *>(m_rowCount));
 		for (int row = 0; row < m_rowCount; ++row) {
-			MagazynierItem *newItem = new MagazynierItem();
+			MagazynierItem *newItem = new \
MagazynierItem(Renderer::instance()->gameRenderer());  newItem->setItemType(Empty);
 			m_levelItems->at(col)->replace(row, newItem);
 		}
@@ -174,6 +174,7 @@
 		for (row = 0; row < getRowCount(); ++row) {
 			MagazynierItem *item = getItem(QPoint(col,row));
 			kDebug() << "Item at" << col << row << ":" << item->itemType();
+			item->setRenderSize(QSize(itemSize, itemSize));
 			item->updatePixmap();
 			item->setLevelPos(QPoint(col, row));
 		}
--- trunk/playground/games/magazynier/renderer.cpp #1191562:1191563
@@ -20,22 +20,17 @@
 #include <math.h>
 
 #include <KDebug>
-#include <KGameTheme>
-#include <KPixmapCache>
-#include <KSvgRenderer>
-#include <QPainter>
+#include <KGameRenderer>
 #include <QPixmap>
 
 #include "levelModel.h"
 #include "settings.h"
 
-Renderer::Renderer(QObject *parent) //{{{
+Renderer::Renderer(QObject *parent) : QObject(parent) //{{{
 {
 	m_itemSize = 0;
 	m_levelHeight = m_levelWidth = m_viewWidth = m_viewHeight = 0;
-	m_theme = 0;
-	m_pixmapCache = 0;
-	m_svgRenderer = new KSvgRenderer(parent);
+	m_gameRenderer = new KGameRenderer(Settings::self()->theme());
 	loadTheme();
 } //}}}
 
@@ -50,16 +45,8 @@
 
 void Renderer::loadTheme(void) //{{{
 {
-	//Allow theme reloading, cleanup
-	delete m_theme;
-	delete m_pixmapCache;
-
-	m_theme = new KGameTheme;
-	QString themeFile = Settings::self()->theme();
-	kDebug() << "loading graphics theme from" << themeFile;
-	m_theme->load(themeFile);
-	m_svgRenderer->load(m_theme->graphics());
-	m_pixmapCache = new KPixmapCache("magazynier");
+	kDebug() << "loading graphics theme from" << Settings::self()->theme();
+	m_gameRenderer->setTheme(Settings::self()->theme());
 	return;
 } //}}}
 
@@ -75,110 +62,14 @@
 					floor(m_viewHeight/m_levelHeight) : 
 					floor(m_viewWidth/m_levelWidth);
 	kDebug() << "Renderer will render" << m_itemSize << "x" << m_itemSize << "pixmaps";
-	m_pixmapCache->discard();
 } //}}}
 
-QPixmap Renderer::get(int cellType, const QPoint& orientation) //{{{
-{
-	Q_ASSERT(m_itemSize > 0);
-	QString name;
-	QPixmap pixmap;
-	switch(cellType) {
-		case Empty:
-			name = "Empty";
-			break;
-		case Box:
-			name = "Box";
-			break;
-		case Goal:
-			name = "Goal";
-			break;
-		case Goal|Box:
-			name = "Goal_Box";
-			break;
-		case Goal|Player:
-			if (orientation == *LevelModel::m_moveDirUp) {
-				name = "Goal_Player_Up";
-			} else if (orientation == *LevelModel::m_moveDirRight) {
-				name = "Goal_Player_Right";
-			} else if (orientation == *LevelModel::m_moveDirDown) {
-				name = "Goal_Player_Down";
-			} else if (orientation == *LevelModel::m_moveDirLeft) {
-				name = "Goal_Player_Left";
-			} else {
-				name = "Goal_Player";
-			}
-			pixmap = findPixmap(name, name, m_itemSize, m_itemSize);
-			if (!pixmap) {
-				return findPixmap("Goal_Player", name, m_itemSize, m_itemSize);
-			} else {
-				return pixmap;
-			}
-			break;
-		case Player:
-			if (orientation == *LevelModel::m_moveDirUp) {
-				name = "Player_Up";
-			} else if (orientation == *LevelModel::m_moveDirRight) {
-				name = "Player_Right";
-			} else if (orientation == *LevelModel::m_moveDirDown) {
-				name = "Player_Down";
-			} else if (orientation == *LevelModel::m_moveDirLeft) {
-				name = "Player_Left";
-			} else {
-				name = "Player";
-			}
-			pixmap = findPixmap(name, name, m_itemSize, m_itemSize);
-			if (!pixmap) {
-				return findPixmap("Player", name, m_itemSize, m_itemSize);
-			} else {
-				return pixmap;
-			}
 
-			break;
-		case Wall:
-			name = "Wall";
-			break;
-		default:
-			kDebug() << "Requested unknown cell pixmap" << cellType;
-			break;
-	}
-
-	return findPixmap(name, name, m_itemSize, m_itemSize);
-} //}}}
-
 QPixmap Renderer::getBackground() //{{{
 {
-	return findPixmap("Background", "Background", m_viewWidth, m_viewHeight);
+	return m_gameRenderer->spritePixmap("Background", QSize(m_viewWidth, \
m_viewHeight));  } //}}}
 
-QPixmap Renderer::findPixmap(const QString elementName, const QString cacheName, int \
                width, int height)
-{
-	QPixmap ret;
-	if (m_pixmapCache->find(cacheName, ret)) {
-		return ret;
-	}
-	
-	return renderNewPixmap(elementName, cacheName, width, height);
-}
-
-QPixmap Renderer::renderNewPixmap(const QString elementName, const QString \
                cacheName, int width, int height) //{{{
-{
-	if (!m_svgRenderer->elementExists(elementName)) {
-		return 0;
-	}
-
-	QPixmap ret(width, height);
-	ret.fill(Qt::transparent);
-
-	QPainter painter(&ret);
-	m_svgRenderer->render(&painter, elementName);
-
-	kDebug() << "Rendered" << cacheName;
-	m_pixmapCache->insert(cacheName, ret);
-	
-	return ret;
-} //}}}
-
 void Renderer::setViewSize(int height, int width) //{{{
 {
 	m_viewHeight = height;
--- trunk/playground/games/magazynier/renderer.h #1191562:1191563
@@ -20,12 +20,8 @@
 
 #include <QObject>
 
-class KGameTheme;
-class KPixmapCache;
-class KSvgRenderer;
+class KGameRenderer;
 class QPixmap;
-class QPoint;
-class QString;
 
 class Renderer : public QObject
 {
@@ -34,11 +30,11 @@
 public:
 	static Renderer *instance();
 	void loadTheme();
-	QPixmap get(int cellType, const QPoint& orientation);
 	QPixmap getBackground();
 	int getItemSize(void);
 	void setLevelSize(int height, int width); //height x width items
 	void setViewSize(int height, int width); //height x width pixels
+	KGameRenderer* gameRenderer() const { return m_gameRenderer; }
 	
 protected:
 	Renderer(QObject *parent);
@@ -47,13 +43,8 @@
 	void setItemSize(void);
 	int m_itemSize;
 	int m_viewHeight, m_viewWidth, m_levelHeight, m_levelWidth;
-	KPixmapCache *m_pixmapCache;
-	KSvgRenderer *m_svgRenderer;
-	KGameTheme *m_theme;
+	KGameRenderer *m_gameRenderer;
 
-	QPixmap renderNewPixmap(const QString elementName, const QString cacheName, int \
                width, int height);
-	QPixmap findPixmap(const QString elementName, const QString cacheName, int width, \
                int height);
-
 public slots:
 	void sizeChanged();
 };


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic