[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-12 20:04:53
Message-ID: 1260648293.344243.27525.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 1061720 by tkadlubo:
- move() and similar methods have a first parameter, the position from which the move \
starts.
- mouse navigation is reworked, so that it doesn't cause moves, but constructs an \
aggregate MagazynierCommand, which is emited via addNewUndoCommand.
M +46 -41 levelModel.cpp
M +3 -2 levelModel.h
--- trunk/playground/games/magazynier/levelModel.cpp #1061719:1061720
@@ -265,92 +265,92 @@
return;
} //}}}
-bool LevelModel::canMove(QPoint delta) //{{{
+bool LevelModel::canMove(QPoint pos, QPoint delta) //{{{
{
- MagazynierItem *target = getItem(*m_playerPos + delta);
+ MagazynierItem *target = getItem(pos + delta);
if (target->itemType() == Empty || target->itemType() == Goal) {
return true;
}
if (target->itemType() == Box || target->itemType() == (Goal | Box)) {
- MagazynierItem *boxTarget = getItem(*m_playerPos + delta + delta);
+ MagazynierItem *boxTarget = getItem(pos + delta + delta);
if (boxTarget->itemType() == Empty || boxTarget->itemType() == Goal) {
return true;
}
}
- kDebug() << "Can't move from" << *m_playerPos << target->itemType() << "in the \
way"; + kDebug() << "Can't move from" << pos << target->itemType() << "in the way";
return false;
} //}}}
-MagazynierCommand *LevelModel::move(QPoint delta) //{{{
+MagazynierCommand *LevelModel::move(QPoint pos, QPoint delta, QUndoCommand \
*parentCommand) //{{{ {
- if (!canMove(delta)) {
+ if (!canMove(pos, delta)) {
return NULL;
}
kDebug() << "Move by" << delta;
- MagazynierCommand *aggregateCommand = new MagazynierCommand(this);
+ MagazynierCommand *aggregateCommand = new MagazynierCommand(this, parentCommand);
- MagazynierItem *here = getItem(*m_playerPos);
- MagazynierItem *target = getItem(*m_playerPos + delta);
+ MagazynierItem *here = getItem(pos);
+ MagazynierItem *target = getItem(pos + delta);
if (here->itemType() == Player) {
kDebug() << "player moves to" << target->itemType();
if (target->itemType() == Empty) {
- new MoveFromEmptyToEmptyCommand(this, *m_playerPos, delta, aggregateCommand);
+ new MoveFromEmptyToEmptyCommand(this, pos, delta, aggregateCommand);
} else if (target->itemType() == Goal) {
- new MoveFromEmptyToGoalCommand(this, *m_playerPos, delta, aggregateCommand);
+ new MoveFromEmptyToGoalCommand(this, pos, delta, aggregateCommand);
} else if (target->itemType() == Box) {
- MagazynierItem *boxTarget = getItem(*m_playerPos + delta + delta);
+ MagazynierItem *boxTarget = getItem(pos + delta + delta);
if (boxTarget->itemType() == Empty) {
aggregateCommand->setShift(true);
- new MoveFromEmptyToEmptyCommand(this, *m_playerPos + delta, delta, \
aggregateCommand);
- new MoveFromEmptyToEmptyCommand(this, *m_playerPos, delta, aggregateCommand);
+ new MoveFromEmptyToEmptyCommand(this, pos + delta, delta, aggregateCommand);
+ new MoveFromEmptyToEmptyCommand(this, pos, delta, aggregateCommand);
} else if (boxTarget->itemType() == Goal) {
aggregateCommand->setShift(true);
- new MoveFromEmptyToGoalCommand(this, *m_playerPos + delta, delta, \
aggregateCommand);
- new MoveFromEmptyToEmptyCommand(this, *m_playerPos, delta, aggregateCommand);
+ new MoveFromEmptyToGoalCommand(this, pos + delta, delta, aggregateCommand);
+ new MoveFromEmptyToEmptyCommand(this, pos, delta, aggregateCommand);
}
} else if (target->itemType() == (Box | Goal)) {
- MagazynierItem *boxTarget = getItem(*m_playerPos + delta + delta);
+ MagazynierItem *boxTarget = getItem(pos + delta + delta);
if (boxTarget->itemType() == Empty) {
aggregateCommand->setShift(true);
- new MoveFromGoalToEmptyCommand(this, *m_playerPos + delta, delta, \
aggregateCommand);
- new MoveFromEmptyToGoalCommand(this, *m_playerPos, delta, aggregateCommand);
+ new MoveFromGoalToEmptyCommand(this, pos + delta, delta, aggregateCommand);
+ new MoveFromEmptyToGoalCommand(this, pos, delta, aggregateCommand);
} else if (boxTarget->itemType() == Goal) {
aggregateCommand->setShift(true);
- new MoveFromGoalToGoalCommand(this, *m_playerPos + delta, delta, \
aggregateCommand);
- new MoveFromEmptyToGoalCommand(this, *m_playerPos, delta, aggregateCommand);
+ new MoveFromGoalToGoalCommand(this, pos + delta, delta, aggregateCommand);
+ new MoveFromEmptyToGoalCommand(this, pos, delta, aggregateCommand);
}
}
} else if (here->itemType() == (Player | Goal)) {
if (target->itemType() == Empty) {
- new MoveFromGoalToEmptyCommand(this, *m_playerPos, delta, aggregateCommand);
+ new MoveFromGoalToEmptyCommand(this, pos, delta, aggregateCommand);
} else if (target->itemType() == Goal) {
- new MoveFromGoalToGoalCommand(this, *m_playerPos, delta, aggregateCommand);
+ new MoveFromGoalToGoalCommand(this, pos, delta, aggregateCommand);
} else if (target->itemType() == Box) {
- MagazynierItem *boxTarget = getItem(*m_playerPos + delta + delta);
+ MagazynierItem *boxTarget = getItem(pos + delta + delta);
if (boxTarget->itemType() == Empty) {
aggregateCommand->setShift(true);
- new MoveFromEmptyToEmptyCommand(this, *m_playerPos + delta, delta, \
aggregateCommand);
- new MoveFromGoalToEmptyCommand(this, *m_playerPos, delta, aggregateCommand);
+ new MoveFromEmptyToEmptyCommand(this, pos + delta, delta, aggregateCommand);
+ new MoveFromGoalToEmptyCommand(this, pos, delta, aggregateCommand);
} else if (boxTarget->itemType() == Goal) {
aggregateCommand->setShift(true);
- new MoveFromEmptyToGoalCommand(this, *m_playerPos + delta, delta, \
aggregateCommand);
- new MoveFromGoalToEmptyCommand(this, *m_playerPos, delta, aggregateCommand);
+ new MoveFromEmptyToGoalCommand(this, pos + delta, delta, aggregateCommand);
+ new MoveFromGoalToEmptyCommand(this, pos, delta, aggregateCommand);
}
} else if (target->itemType() == (Box | Goal)) {
- MagazynierItem *boxTarget = getItem(*m_playerPos + delta + delta);
+ MagazynierItem *boxTarget = getItem(pos + delta + delta);
if (boxTarget->itemType() == Empty) {
aggregateCommand->setShift(true);
- new MoveFromGoalToEmptyCommand(this, *m_playerPos + delta, delta, \
aggregateCommand);
- new MoveFromGoalToGoalCommand(this, *m_playerPos, delta, aggregateCommand);
+ new MoveFromGoalToEmptyCommand(this, pos + delta, delta, aggregateCommand);
+ new MoveFromGoalToGoalCommand(this, pos, delta, aggregateCommand);
} else if (boxTarget->itemType() == Goal) {
aggregateCommand->setShift(true);
- new MoveFromGoalToGoalCommand(this, *m_playerPos + delta, delta, \
aggregateCommand);
- new MoveFromGoalToGoalCommand(this, *m_playerPos, delta, aggregateCommand);
+ new MoveFromGoalToGoalCommand(this, pos + delta, delta, aggregateCommand);
+ new MoveFromGoalToGoalCommand(this, pos, delta, aggregateCommand);
}
}
}
@@ -359,7 +359,7 @@
void LevelModel::moveUp(void)
{
- MagazynierCommand *command = move(*m_moveDirUp);
+ MagazynierCommand *command = move(*m_playerPos, *m_moveDirUp);
if (command != NULL) {
emit addNewUndoCommand(command);
}
@@ -367,7 +367,7 @@
void LevelModel::moveLeft(void)
{
- MagazynierCommand *command = move(*m_moveDirLeft);
+ MagazynierCommand *command = move(*m_playerPos, *m_moveDirLeft);
if (command != NULL) {
emit addNewUndoCommand(command);
}
@@ -375,7 +375,7 @@
void LevelModel::moveRight(void)
{
- MagazynierCommand *command = move(*m_moveDirRight);
+ MagazynierCommand *command = move(*m_playerPos, *m_moveDirRight);
if (command != NULL) {
emit addNewUndoCommand(command);
}
@@ -383,7 +383,7 @@
void LevelModel::moveDown(void)
{
- MagazynierCommand *command = move(*m_moveDirDown);
+ MagazynierCommand *command = move(*m_playerPos, *m_moveDirDown);
if (command != NULL) {
emit addNewUndoCommand(command);
}
@@ -443,23 +443,28 @@
if(x<0 || y<0 || x>=getColumnCount() || y>=getRowCount())
return;
+ MagazynierCommand *command = NULL;
if(getItem(pos)->itemType()==Empty || getItem(pos)->itemType()==Goal) {
kDebug() << x << y << "Cell empty!";
QList<QPoint> *path = AStar::findPath(this, *m_playerPos, pos);
if(path!=NULL) {
+ command = new MagazynierCommand(this);
QPoint prevPos = *m_playerPos;
foreach(QPoint pos, *path) {
- kDebug() << pos;
- kDebug() << prevPos-pos;
- move(pos-prevPos);
+ kDebug() << "Moving from" << prevPos << "by" << pos-prevPos;
+ move(prevPos, pos-prevPos, command);
prevPos = pos;
}
}
delete path;
}else if((pos-(*m_playerPos)).manhattanLength()==1 && getItem(pos)->itemType() & \
Box) { // Only move a box when the player is standing next to it \
(manhattanLength==1)
- move(pos-(*m_playerPos));
+ command = move(*m_playerPos, pos-(*m_playerPos));
}
+
+ if (command != NULL) {
+ emit addNewUndoCommand(command);
+ }
} //}}}
// vim: foldmethod=marker
--- trunk/playground/games/magazynier/levelModel.h #1061719:1061720
@@ -63,6 +63,8 @@
int getMoveCount(void);
int getShiftCount(void);
+ MagazynierCommand *move(QPoint pos, QPoint delta, QUndoCommand *parentCommand = 0);
+
void moveFromEmptyToEmpty(QPoint pos, QPoint delta);
void moveFromEmptyToGoal(QPoint pos, QPoint delta);
void moveFromGoalToEmpty(QPoint pos, QPoint delta);
@@ -84,8 +86,7 @@
int m_columnCount, m_rowCount;
bool m_levelCompleted;
- bool canMove(QPoint delta);
- MagazynierCommand *move(QPoint delta);
+ bool canMove(QPoint pos, QPoint delta);
public slots:
void moveUp(void);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic