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

List:       kde-commits
Subject:    playground/games/magazynier
From:       Tadeusz Andrzej Kadłubowski <yess () hell ! org ! pl>
Date:       2009-12-26 11:54:09
Message-ID: 1261828449.507620.4466.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1066203 by tkadlubo:

Items know (optionally) about orientation. LevelModel has a new method
updatePlayerOrientation, moveFromXToY methods are updated to use this method
for player items.

The only thing left to support viewing player from different angles is rendering appropriate pixmaps.


 M  +10 -2     item.cpp  
 M  +2 -0      item.h  
 M  +18 -6     levelModel.cpp  
 M  +7 -2      levelModel.h  


--- trunk/playground/games/magazynier/item.cpp #1066202:1066203
@@ -21,13 +21,15 @@
 
 #include "renderer.h"
 
-MagazynierItem::MagazynierItem(QGraphicsItem *parent) : QGraphicsPixmapItem(parent)
+MagazynierItem::MagazynierItem(QGraphicsItem *parent) :
+	QGraphicsPixmapItem(parent),
+	m_itemOrientation()
 {
 }
 
 void MagazynierItem::updatePixmap(void)
 {
-	setPixmap(Renderer::instance()->get(m_itemType));
+	setPixmap(Renderer::instance()->get(m_itemType, &m_itemOrientation));
 }
 
 int MagazynierItem::itemType(void) const
@@ -49,3 +51,9 @@
 	setPos(pos.x() * cellSize, pos.y() * cellSize);
 	return;
 }
+
+void MagazynierItem::setOrientation(QPoint orientation)
+{
+	m_itemOrientation = orientation;
+	updatePixmap();
+}
--- trunk/playground/games/magazynier/item.h #1066202:1066203
@@ -31,7 +31,9 @@
 		int itemType(void) const;
 		void updatePixmap(void);
 		void setLevelPos(QPoint pos);
+		void setOrientation(QPoint orientation);
 	private:
+		QPoint m_itemOrientation;
 		int m_itemType;
 };
 
--- trunk/playground/games/magazynier/levelModel.cpp #1066202:1066203
@@ -32,9 +32,9 @@
 LevelModel::LevelModel(QObject *parent) : //{{{
 	QGraphicsScene(parent),
 	m_goalsLeft(0),
-	m_moveCount(0),
 	m_shiftCount(0),
-	m_levelCompleted(false)
+	m_levelCompleted(false),
+	m_moveCount(0)
 
 {
 	//Fixme those should be statis. How can I make static QPoint in C++?
@@ -192,7 +192,7 @@
 
 	if (sourceItem->itemType() == Player) {
 		*m_playerPos += delta;
-		m_playerOrientation = &delta;
+		updatePlayerOrientation(delta);
 		kDebug() << "player position updated to" << *m_playerPos;
 	}
 
@@ -213,7 +213,7 @@
 
 	if (movingItemType == Player) {
 		*m_playerPos += delta;
-		m_playerOrientation = &delta;
+		updatePlayerOrientation(delta);
 		kDebug() << "player position updated to" << *m_playerPos;
 	} else if (movingItemType == Box) {
 		--m_goalsLeft;
@@ -237,7 +237,7 @@
 	
 	if (movingItemType == Player) {
 		*m_playerPos += delta;
-		m_playerOrientation = &delta;
+		updatePlayerOrientation(delta);
 		kDebug() << "player position updated to" << *m_playerPos;
 	} else if (movingItemType == Box) {
 		++m_goalsLeft;
@@ -258,13 +258,25 @@
 	
 	if (sourceItem->itemType() == (Player | Goal)) {
 		*m_playerPos += delta;
-		m_playerOrientation = &delta;
+		updatePlayerOrientation(delta);
 		kDebug() << "player position updated to" << *m_playerPos;
 	}	
 
 	return;
 } //}}}
 
+void LevelModel::updatePlayerOrientation(QPoint orientation)
+{
+	if (orientation == *m_playerOrientation) {
+		return;
+	}
+
+	m_playerOrientation = &orientation;
+
+	MagazynierItem *playerItem = getItem(*m_playerPos);
+	playerItem->setOrientation(orientation);
+}
+
 bool LevelModel::canMove(QPoint pos, QPoint delta) //{{{
 {
 	MagazynierItem *target = getItem(pos + delta);
--- trunk/playground/games/magazynier/levelModel.h #1066202:1066203
@@ -78,14 +78,19 @@
 private:
 	QVector<QVector<MagazynierItem *>*> *m_levelItems;
 	int m_goalsLeft;
+	int m_shiftCount;
+	bool m_levelCompleted;
 	int m_moveCount;
-	int m_shiftCount;
+
 	void setItem(QPoint pos, MagazynierItem *item);
+
 	QPoint *m_playerPos;
 	QPoint *m_playerOrientation;
+	void updatePlayerOrientation(QPoint orientation);
+
 	int m_columnCount, m_rowCount;
-	bool m_levelCompleted;
 
+
 	bool canMove(QPoint pos, QPoint delta);
 
 public slots:
[prev in list] [next in list] [prev in thread] [next in thread] 

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