fileName += (QString("_flow_") + (flow1? "1" : "0") + (flow2? "1" : "0"));
}
-
- qDebug() << "need: " << fileName;
+ //qDebug() << "need: " << fileName;
return fileName + ".png";
}
QLabel* label = (QLabel*)fieldUi->indexWidget(index);
label->setPixmap(QPixmap(iconId));
+ if (fixed) {
+ label->setStyleSheet("background-color: #263d49");
+ }
+
return true;
}
return false;
if (row < 0 || col < 0 || row >= rows || col >= cols) {
return;
}
- if (dir == DirDone || dir == DirFailed || dir == DirPassed) {
+ if (dir == DirFailed || dir == DirPassed) {
// No need to indicate these pseudo-directions
return;
}
for (int i = 0; i < 2; ++i)
pieceUi->setColumnWidth(i, 120);
- for (int i = 0; i < 4; ++i)
+ for (int i = 0; i < 5; ++i)
pieceUi->setRowHeight(i, 70);
for (int i = 0; ppieces[i].type != PiecesEnd; ++i) {
QWidget* startWidget, QLabel* startTitle,
QLabel* startLabel, QPushButton* startButton,
QLabel* levelLabel, QLabel* scoreLabel,
- QStringList levelCollections)
+ QStringList collections)
: gameController(gameController),
levelWidget(levelWidget), levelList(levelList), levelStartButton(levelStartButton),
startWidget(startWidget), startTitle(startTitle), startLabel(startLabel), startButton(startButton),
levelLabel(levelLabel), scoreLabel(scoreLabel),
- levelCollections(levelCollections), curColl(0), level(0), totalScore(0)
+ curColl(""), level(0), totalScore(0)
{
connect(levelStartButton, SIGNAL(clicked()), this, SLOT(onLevelCollectionChosen()));
connect(gameController, SIGNAL(levelPassed(int)), this, SLOT(onLevelPassed(int)));
connect(gameController, SIGNAL(levelFailed()), this, SLOT(onLevelFailed()));
readSavedGames();
+ readLevelCollections(collections);
chooseLevelCollection();
}
{
levelList->clear();
bool first = true;
- foreach (const QString& collection, levelCollections) {
+ foreach (const QString& collection, levelCollections.keys()) {
QListWidgetItem *newItem = new QListWidgetItem();
// Check how many levels the user has already passed
if (savedGames.contains(collection)) {
passed = savedGames[collection];
}
+ int total = 0;
+ if (levelCollections.contains(collection)) {
+ total = levelCollections[collection].size();
+ }
- newItem->setText(collection + " " + QString::number(passed) + " / " /*+ y*/);
+ newItem->setText(collection + " \tPassed: " +
+ QString::number(passed) + " / " + QString::number(total));
levelList->addItem(newItem); // transfers ownership
- if (first) { // TODO: and passed < total
+ if (first && passed < total) {
levelList->setCurrentItem(newItem);
first = false;
}
{
levelWidget->hide();
curColl = levelList->currentItem()->text().split(" ").first();
- QFile file(QString(LEVDIR) + "/" + curColl + ".dat");
- qDebug() << "Trying to read" << file.fileName();
- if (!file.exists())
- qFatal("Error reading game file: doesn't exist");
- file.open(QIODevice::ReadOnly);
- QTextStream levelData(&file);
- levels.clear();
-
- while (!levelData.atEnd())
- levels << levelData.readLine();
+
+ if (levelCollections.contains(curColl)) {
+ levels = levelCollections[curColl];
+ }
+ else
+ qFatal("Error choosing a level collection: unrecognized");
level = 0;
// Go to the level the user has not yet passed
if (savedGames.contains(curColl)) {
+ qDebug() << "going to saved level" << savedGames[curColl];
level = savedGames[curColl];
- if (level >= levels.size() - 1) {
+ if (level >= levels.size()) {
level = 0;
}
}
totalScore = 0;
startTitle->setText("Starting a new game.");
scoreLabel->setText("0");
- file.close();
initiateLevel();
}
startButton->disconnect();
connect(startButton, SIGNAL(clicked()), this, SLOT(chooseLevelCollection()));
// Record that all levels have been passed
- savedGames.insert(curColl, levels.size() - 1);
+ savedGames.insert(curColl, levels.size());
writeSavedGames();
level = 0;
saveData >> collection;
saveData >> level;
qDebug() << "Got saved game: " << collection << level;
- savedGames.insert(collection, level);
+ if (collection != "")
+ savedGames.insert(collection, level);
}
file.close();
}
+void LevelSwitcher::readLevelCollections(QStringList collections)
+{
+ foreach (const QString& coll, collections) {
+ QFile file(QString(LEVDIR) + "/" + coll + ".dat");
+ qDebug() << "Trying to read" << file.fileName();
+ if (!file.exists())
+ qFatal("Error reading level collection: doesn't exist");
+ file.open(QIODevice::ReadOnly);
+ QTextStream levelData(&file);
+ QStringList readLevels;
+ while (!levelData.atEnd())
+ readLevels << levelData.readLine();
+
+ levelCollections.insert(coll, readLevels);
+ file.close();
+ }
+}
+
void LevelSwitcher::writeSavedGames()
{
QFile file(QDir::homePath() + "/.evilplumber");
file.open(QIODevice::Truncate | QIODevice::WriteOnly);
QTextStream saveData(&file);
foreach (const QString& collection, savedGames.keys()) {
+ qDebug() << "writing" << collection << savedGames[collection];
saveData << collection << " " << savedGames[collection] << endl;
}
file.close();
}
-// Todo next:
-// better graphics
-// save & load
-// level collections: introduction + basic
-// more levels
+// TODO:
+// --- 0.1 ---
+// more levels to the basic collection
// make fixed pipes look different than non-fixed ones
+// get rid of debug prints
+// --- 0.2 ---
+// ability to install level sets as different packages
+// better graphics
// color theme
-// --------------
// re-placing pieces
// graphical hints on what to do next
// graphical help, showing the ui elements: demo