[atlantik-cvs] CVS: kdegames/atlantik/libatlantikui board.cpp,1.98,1.99 board.h,1.60,1.61 token.cpp,1.31,1.32 token.h,1.17,1.18

[email protected]
Newsgroups gmane.comp.kde.devel.atlantik
Message-ID <[email protected]>
Update of /home/kde/kdegames/atlantik/libatlantikui
In directory office:/tmp/cvs-serv27349/libatlantikui

Modified Files:
	board.cpp board.h token.cpp token.h 
Log Message:
cleanup in token geometry, animation works again

Index: board.cpp
===================================================================
RCS file: /home/kde/kdegames/atlantik/libatlantikui/board.cpp,v
retrieving revision 1.98
retrieving revision 1.99
diff -u -d -r1.98 -r1.99
--- board.cpp	2002/11/28 11:59:25	1.98
+++ board.cpp	2002/11/28 21:38:24	1.99
@@ -30,6 +30,7 @@
 #include "auction_widget.h"
 #include "estatedetails.h"
 #include "estateview.h"
+#include "token.h"
 
 #include "board.h"
 #include "board.moc"
@@ -44,7 +45,8 @@
 
 	int sideLen = maxEstates/4;
 
-	// Timer for token movement
+	// Animated token movement
+	m_movingToken = 0;
 	m_timer = new QTimer(this);
 	connect(m_timer, SIGNAL(timeout()), this, SLOT(slotMoveToken()));
 	m_resumeTimer = false;
@@ -69,48 +71,6 @@
 
 	m_displayQueue.setAutoDelete(true);
 	displayDefault();
-
-	QColor color;
-	QString icon;
-	bool canBeOwned;
-
-	for (int i=0;i<maxEstates;i++)
-	{
-		color = QColor();
-		icon = QString();
-		canBeOwned = false;
-
-		switch(i)
-		{
-			case 5: case 15: case 25: case 35:
-				icon = QString("train.png");
-				canBeOwned = true;
-				break;
-			case 12:
-				icon = QString("energy.png");
-				canBeOwned = true;
-				break;
-			case 28:
-				icon = QString("water.png");
-				canBeOwned = true;
-				break;
-			case 2: case 17: case 33:
-				icon = QString("box.png");
-				break;
-			case 7: case 36:
-				icon = QString("qmark-red.png");
-				break;
-			case 22:
-				icon = QString("qmark-blue.png");
-				break;
-			case 0:
-				icon = QString("arrow.png");
-				break;
-			case 38:
-				icon = QString("ring.png");
-				break;
-		}
-	}
 }
 
 void AtlantikBoard::setViewProperties(bool indicateUnowned, bool highliteUnowned, bool darkenMortgaged, bool quartzEffects, bool animateTokens)
@@ -129,14 +89,8 @@
 {
 	return width;
 }
-
-QPtrList<EstateView> AtlantikBoard::estateViews()
-{
-	return m_estateViews;
-}
-
 
-EstateView *AtlantikBoard::getEstateView(Estate *estate)
+EstateView *AtlantikBoard::findEstateView(Estate *estate)
 {
 	EstateView *estateView;
 	for (QPtrListIterator<EstateView> i(m_estateViews); *i; ++i)
@@ -209,147 +163,180 @@
 	connect(auction, SIGNAL(completed()), this, SLOT(displayDefault()));
 }
 
-void AtlantikBoard::addToken(Player *player, EstateView *estateView)
+void AtlantikBoard::addToken(Player *player)
 {
-	EstateView *evTmp = 0;
-	if (!estateView)
-	{
-		for (QPtrListIterator<EstateView> it(m_estateViews); (evTmp = *it) ; ++it)
-			if (evTmp->estate() == player->location())
-			{
-				estateView = evTmp;
-				break;
-			}
-	}
-
-	if (!estateView)
+	if (!player->location())
 	{
 		kdDebug() << "addToken - estateView null\n";
 		return;
 	}
 
-	Token *token = new Token(player, estateView, this, "token");
+	Token *token = new Token(player, this, "token");
 	tokenMap[player] = token;
 	connect(player, SIGNAL(changed(Player *)), token, SLOT(playerChanged()));
+	
+	jumpToken(token);
 
 	// Timer to reinit the gameboard _after_ event loop
 	QTimer::singleShot(100, this, SLOT(slotResizeAftermath()));
 }
 
-void AtlantikBoard::playerChanged()
+void AtlantikBoard::playerChanged(Player *player)
 {
-	kdDebug() << "Board::playerChanged()" << endl;
-	// TODO: implement decent AtlantikBoard::playerChanged to update tokens
-/*
-	kdDebug() << "new geometry for token: " << m_player->location() << endl;
-	this->show();
-//	setGeometry(100, 100, 125, 125);
-
-	EstateView *estateView = estateViewMap[estateId];
+	// Update token
 	Token *token = tokenMap[player];
-	
-	if (estateView && token)
+	if (token)
 	{
-		// Only take action when location has changed
-		if (token->location() != estateId)
+		if (player->hasTurn())
+			token->raise();
+
+		bool jump = false, move = false;
+
+		if (token->inJail() != player->inJail())
 		{
-			if (directMove)
-				token->setLocation(estateView, false);
-			else if (m_animateTokens==false)
-				token->setLocation(estateView);
+			token->setInJail(player->inJail());
+			jump = true;
+		}
+			
+		else if (token->location() != player->location())
+		{
+			token->setLocation(player->location());
+			jump = true;
+		}
+
+		if (player->destination() && token->destination() != player->destination())
+		{
+			if (m_animateTokens)
+			{
+				token->setDestination(player->destination());
+				move = true;
+			}
 			else
-				moveToken(token, estateId);
+			{
+				token->setLocation(player->destination());
+				jump = true;
+			}
 		}
+
+		if (jump)
+			jumpToken(token);
+		if (move)
+			moveToken(token);
 	}
-*/
+	else
+		addToken(player);
 }
 
-void AtlantikBoard::moveToken(Token *token, int estateId)
+void AtlantikBoard::jumpToken(Token *token)
 {
-	if ( token==0 )
-		return;
-	
-	kdDebug() << "moving piece from " << token->location() << " to " << estateId << endl;
+	kdDebug() << "jumpToken to " << token->location()->name() << endl;
 
-	// Set token destination
-	move_token = token;
-	// TODO: port
-	// move_token->setDestination(estateId);
+	QPoint tGeom = calculateTokenDestination(token);
+	token->setGeometry(tGeom.x(), tGeom.y(), token->width(), token->height());
+	emit tokenConfirmation(token->location());
+}
+
+void AtlantikBoard::moveToken(Token *token)
+{
+	kdDebug() << "moveToken to " << token->destination()->name() << endl;
+
+	m_movingToken = token;
 
 	// Start timer
 	m_timer->start(15);
 }
 
+QPoint AtlantikBoard::calculateTokenDestination(Token *token, Estate *eDest)
+{
+		if (!eDest)
+			eDest = token->player()->location();
+		EstateView *evDest = findEstateView(eDest);
+
+		int x = 0, y = 0;
+		if (token->player()->inJail())
+		{
+			x = evDest->geometry().right() - token->width() - 2;
+			y = evDest->geometry().top();
+		}
+		else
+		{
+			x = evDest->geometry().center().x() - (token->width()/2);
+			y = evDest->geometry().center().y() - (token->height()/2);
+
+/*
+			// Re-center because of EstateView headers
+			switch(evDest->orientation())
+			{
+				case North:
+					y += evDest->height()/8; break;
+				case East:
+					x -= evDest->width()/8; break;
+				case South:
+					y -= evDest->height()/8; break;
+				case West:
+					x += evDest->width()/8; break;
+			}
+*/
+		}
+	return QPoint(x, y);
+}
+
 void AtlantikBoard::slotMoveToken()
 {
 	// Do we actually have a token to move?
-	if (move_token==0)
+	if (!m_movingToken)
 	{
 		m_timer->stop();
 		return;
 	}
 
 	// Where are we?
-	int xCurrent = move_token->geometry().x();
-	int yCurrent = move_token->geometry().y();
+	int xCurrent = m_movingToken->geometry().x();
+	int yCurrent = m_movingToken->geometry().y();
 
 	// Where do we want to go today?
-	int dest = 0; // move_token->location() + 1;
-	if (dest==(m_gridLayout->numRows() - 1)*4)
-		dest = 0;
-	kdDebug() << "going from " << move_token->location() << " to " << dest << endl;
+	Estate *eDest = m_atlanticCore->estateAfter(m_movingToken->location());
+	QPoint tGeom = calculateTokenDestination(m_movingToken, eDest);
 
-	// TODO: port
-/*
-	if (EstateView *estateView = getEstateView(dest))
-	{
-		int xFinal = estateView->geometry().center().x() - (move_token->width()/2);
-		int yFinal = estateView->geometry().center().y() - (move_token->height()/2);
-		int xDest, yDest;
+	int xDest = tGeom.x();
+	int yDest = tGeom.y();
 
-		if (xFinal - xCurrent > 1)
-			xDest = xCurrent + 2;
-		else if (xCurrent - xFinal > 1)
-			xDest = xCurrent - 2;
-		else
-			xDest = xCurrent;
+	if (xDest - xCurrent > 1)
+		xDest = xCurrent + 2;
+	else if (xCurrent - xDest > 1)
+		xDest = xCurrent - 2;
+	else
+		xDest = xCurrent;
 
-		if (yFinal - yCurrent > 1)
-			yDest = yCurrent + 2;
-		else if (yCurrent - yFinal > 1)
-			yDest = yCurrent - 2;
-		else
-			yDest = yCurrent;
+	if (yDest - yCurrent > 1)
+		yDest = yCurrent + 2;
+	else if (yCurrent - yDest > 1)
+		yDest = yCurrent - 2;
+	else
+		yDest = yCurrent;
 
-		kdDebug() << "TOKEN: we are @ " << xCurrent << "," << yCurrent << endl;
-		kdDebug() << "TOKEN: final to " << xFinal << "," << yFinal << endl;
-		kdDebug() << "TOKEN: going to " << xDest << "," << yDest << endl;
+	kdDebug() << "TOKEN: at " << xCurrent << "," << yCurrent << " and going to " << xDest << "," << yDest << endl;
 
-		if (xCurrent == xDest && yCurrent == yDest)
-		{
-			// We have arrived at our destination!
-			move_token->setLocation(estateView);
+	if (xCurrent != xDest || yCurrent != yDest)
+	{
+		m_movingToken->setGeometry(xDest, yDest, m_movingToken->width(), m_movingToken->height());
+		return;
+	}
+	
+	// We have arrived at our destination!
+	m_movingToken->setLocation(eDest);
+	m_movingToken->player()->setLocation(eDest);
+	emit tokenConfirmation(eDest);
 
-			// We need to confirm passing Go and arriving at our final
-			// destination to the server.
-			if (move_token->destination() == move_token->location())
-			{
-				// We have arrived at our _final_ destination!
-				// TODO: port
-				// emit tokenConfirmation(move_token->location());
-				m_timer->stop();
-				move_token = 0;
-			}
-			// TODO: port
-			// else if (move_token->location() == 0)
-			// emit tokenConfirmation(move_token->location());
+	// We have arrived at our _final_ destination!
+	if (eDest == m_movingToken->destination())
+	{
+		m_movingToken->setDestination(0);
+		m_movingToken->player()->setDestination(0);
 
-			return;
-		}
-		
-		move_token->setGeometry(xDest, yDest, move_token->width(), move_token->height());
+		m_timer->stop();
+		m_movingToken = 0;
 	}
-*/
 }
 
 void AtlantikBoard::resizeEvent(QResizeEvent *e)
@@ -388,7 +375,7 @@
 
 	Token *token = 0;
 	for (QMap<Player *, Token *>::Iterator it=tokenMap.begin() ; it != tokenMap.end() && (token = *it) ; ++it)
-		token->updateGeometry();
+		jumpToken(token);
 
 	// Restart the timer that was stopped in resizeEvent
 	if (m_resumeTimer && m_timer!=0 && !m_timer->isActive())

Index: board.h
===================================================================
RCS file: /home/kde/kdegames/atlantik/libatlantikui/board.h,v
retrieving revision 1.60
retrieving revision 1.61
diff -u -d -r1.60 -r1.61
--- board.h	2002/11/27 21:08:56	1.60
+++ board.h	2002/11/28 21:38:24	1.61
@@ -22,12 +22,13 @@
 #include <qlayout.h>
 #include <qptrlist.h>
 
-#include "token.h"
+class QPoint;
 
 class AtlanticCore;
 class Auction;
 class Estate;
 class Player;
+class Token;
 
 class EstateView;
 
@@ -43,9 +44,9 @@
 	int heightForWidth(int);
 	void addEstateView(Estate *estate, bool indicateUnowned = false, bool highliteUnowned = false, bool darkenMortgaged = false, bool quartzEffects = false);
 	void addAuctionWidget(Auction *auction);
-	void addToken(Player *player, EstateView *location = 0);
+	void addToken(Player *player);
 	void indicateUnownedChanged();
-	QPtrList<EstateView> estateViews();
+	EstateView *findEstateView(Estate *estate);
 	QWidget *centerWidget();
 
 public slots:
@@ -53,7 +54,7 @@
 	void slotResizeAftermath();
 
 private slots:
-	void playerChanged();
+	void playerChanged(Player *player);
 	void displayDefault();
 	void displayButton(QString command, QString caption, bool enabled);
 	void prependEstateDetails(Estate *);
@@ -68,8 +69,10 @@
 	void resizeEvent(QResizeEvent *);
 
 private:
-	EstateView *getEstateView(Estate *estate);
-	void moveToken(Token *, int destination);
+	void jumpToken(Token *token);
+	void moveToken(Token *token);
+	QPoint calculateTokenDestination(Token *token, Estate *estate = 0);
+
 	void updateCenter();
 
 	AtlanticCore *m_atlanticCore;
@@ -77,7 +80,7 @@
 
 	QWidget *spacer, *m_lastServerDisplay;
 	QGridLayout *m_gridLayout;
-	Token *move_token;
+	Token *m_movingToken;
 	QTimer *m_timer;
 	bool m_resumeTimer;
 

Index: token.cpp
===================================================================
RCS file: /home/kde/kdegames/atlantik/libatlantikui/token.cpp,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -d -r1.31 -r1.32
--- token.cpp	2002/11/28 11:59:25	1.31
+++ token.cpp	2002/11/28 21:38:24	1.32
@@ -29,23 +29,19 @@
 #include "player.h"
 
 #include "token.moc"
-#include "estateview.h"
 
-Token::Token(Player *player, EstateView *location, AtlantikBoard *parent, const char *name) : QWidget(parent, name)
+Token::Token(Player *player, AtlantikBoard *parent, const char *name) : QWidget(parent, name)
 {
 	setBackgroundMode(NoBackground); // avoid flickering
 
 	m_parentBoard = parent;
-	connect(this, SIGNAL(tokenConfirmation(Estate *)), m_parentBoard, SIGNAL(tokenConfirmation(Estate *)));
 
 	m_player = player;
 	connect(m_player, SIGNAL(changed(Player *)), this, SLOT(playerChanged()));
-
-	m_location = 0;
-	setLocation(location, false);
 
+	m_inJail = m_player->inJail();
+	m_location = m_player->location();
 	m_destination = 0;
-	m_inJail = false;
 
 	qpixmap = 0;
 	b_recreate = true;
@@ -58,98 +54,22 @@
 	return m_player;
 }
 
-void Token::setLocation(EstateView *location, bool confirm)
+void Token::setLocation(Estate *location)
 {
 	if (m_location != location)
-	{
 		m_location = location;
-		updateGeometry();
-
-		if (confirm)
-			emit tokenConfirmation(m_player->location());
-	}
 }
 
-void Token::setDestination(EstateView *estateView)
+void Token::setDestination(Estate *estateView)
 {
 	if (m_destination != estateView)
-	{
 		m_destination = estateView;
-		updateGeometry();
-	}
-	emit tokenConfirmation(m_player->location());
 }
 
 void Token::playerChanged()
 {
-	if (m_player->hasTurn())
-		raise();
-
-	if (Estate *estate = m_player->location())
-	{
-		EstateView *estateView;
-		QPtrList<EstateView> estateViews = m_parentBoard->estateViews();
-		for (QPtrListIterator<EstateView> it(estateViews); *it; ++it)
-		{
-			if ((estateView = dynamic_cast<EstateView*>(*it)))
-			{
-				if (estateView->estate() == estate)
-				{
-					setLocation(estateView);
-					if (m_player->inJail() != m_inJail)
-					{
-						m_inJail = m_player->inJail();
-						updateGeometry();
-					}
-					break;
-				}
-			}
-		}
-	}
-	
 	b_recreate = true;
 	update();
-}
-
-void Token::updateGeometry()
-{
-	if (!m_location)
-	{
-		hide();
-		return;
-	}
-
-	int x, y;
-	if (m_inJail)
-	{
-		x = m_location->geometry().x() + m_location->width() - width() - 2;
-		y = m_location->geometry().y() + 2;
-	}
-	else
-	{
-		x = m_location->geometry().center().x() - (width()/2);
-		y = m_location->geometry().center().y() - (height()/2);
-
-		if (m_location->estate()->color().isValid())
-		{
-			switch(m_location->orientation())
-			{
-				case North:
-					y += m_location->height()/8; break;
-				case East:
-					x -= m_location->width()/8; break;
-				case South:
-					y -= m_location->height()/8; break;
-				case West:
-					x += m_location->width()/8; break;
-			}
-		}
-	}
-
-	kdDebug() << "Token::updateGeometry, x:" << x << " y:" << y << endl;
-	setGeometry(x, y, width(), height());
-	if (isHidden())
-		show();
 }
 
 void Token::paintEvent(QPaintEvent *)

Index: token.h
===================================================================
RCS file: /home/kde/kdegames/atlantik/libatlantikui/token.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- token.h	2002/07/07 18:05:10	1.17
+++ token.h	2002/11/28 21:38:24	1.18
@@ -22,7 +22,6 @@
 
 class Player;
 class Estate;
-class EstateView;
 class AtlantikBoard;
 
 class Token : public QWidget
@@ -30,13 +29,14 @@
 Q_OBJECT
 
 	public:
-		Token (Player *player, EstateView *location, AtlantikBoard *parent, const char *name = 0);
+		Token (Player *player, AtlantikBoard *parent, const char *name = 0);
 		Player *player();
-		void setLocation(EstateView *estateView, bool confirm = true);
-		EstateView *location() { return m_location; }
-		void setDestination(EstateView *estateView);
-		EstateView *destination() { return m_destination; }
-		void updateGeometry();
+		void setLocation(Estate *estate);
+		Estate *location() { return m_location; }
+		void setDestination(Estate *estate);
+		Estate *destination() { return m_destination; }
+		void setInJail (bool inJail) { m_inJail = inJail; }
+		bool inJail() { return m_inJail; }
 
 	private slots:
 		void playerChanged();
@@ -45,14 +45,12 @@
 		void paintEvent(QPaintEvent *);
 		void resizeEvent(QResizeEvent *);
 
-signals:
-	void tokenConfirmation(Estate *);
-
 private:
 		Player *m_player;
-		EstateView *m_location, *m_destination;
+		Estate *m_location, *m_destination;
+		bool m_inJail;
 		AtlantikBoard *m_parentBoard;
-		bool b_recreate, m_inJail;
+		bool b_recreate;
 		QPixmap *qpixmap;
 };
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.