//Setup the level list
+ QList<Level> levelList;
Level level1(5,10);
- levelList_.append(level1);
+ levelList.append(level1);
Level level2(5,10,2,50);
- levelList_.append(level2);
+ levelList.append(level2);
Level level3(5,15,2,50);
- levelList_.append(level3);
+ levelList.append(level3);
Level level4(5,15,4,50);
- levelList_.append(level4);
+ levelList.append(level4);
Level level5(5,15,5,100);
- levelList_.append(level5);
+ levelList.append(level5);
+
+ Levelset set ("Original",levelList);
+ levelset_ = set;
currentLevel_ = 0;
+ totalScore_ = 0;
+
connect(this,SIGNAL(allGhostsPicked()),this,SLOT(nextLevel()));
connect(pPauseAction_,SIGNAL(toggled(bool)),this,SLOT(pause(bool)));
- deviceLockPollTimer_.setInterval(20*60); // 2s
+ deviceLockPollTimer_.setInterval(20*60);
connect(&deviceLockPollTimer_,SIGNAL(timeout()),this,SLOT(pollDeviceLocked()));
deviceLockPollTimer_.start();
createVictoryItems();
+ createLevelCompletedItem();
+
//empty the list of moving items
}
delete pPosition;
+ scoreCounter_.start();
+
}
{
pAboutBoxItem_->hide();
pPausetextItem_->show();
+ return;
}
}
+ //If the game is paused, check if the level completed item is shown
+
+ if (pLevelCompletedItem_)
+ {
+ if (pLevelCompletedItem_->isVisible())
+ {
+ pLevelCompletedItem_->hide();
+ restartLevel(); //Current level has already been set to the next one before showing the level completed item
+ pPauseAction_->setChecked(false); //unpause
+ return;
+ }
+ }
//If the game is paused, check if the victory item is being shown
if(pVictoryCongratulationsItem_)
}
}
+
//If the game is paused and no victory, check if menu item was selected
QList<QGraphicsItem *> items = selectedItems();
void SeaScene::restartLevel()
{
- setupMap(levelList_.value(currentLevel_)); //value() returns default constructor Level if index is invalid, so no risk of crash
+ setupMap(levelset_.getLevel(currentLevel_)); //getLevel() returns default constructor Level if index is invalid, so no risk of crash
vibrationActivate(pVibrateAction_->isChecked()); //Vibration effects are lost without this
// qDebug() << pVibrateAction_->isChecked();
autopauseTimer.start(); //reset counting towards autopause
void SeaScene::nextLevel()
{
- currentLevel_++;
-
- if (levelList_.empty())
- setupMap(Level());
+ //get score for previous level
+ int score = scoreCounter_.elapsed()/1000;
+ totalScore_ += score;
+ int highscore = levelset_.getLevelHighScore(currentLevel_);
+ qDebug() << highscore;
+ QString scoretext;
- if ( currentLevel_ < levelList_.size() )
+ if (score >= highscore)
{
- restartLevel();
+ scoretext = tr("Your time: %1 min %2 s<br>Best time: %3 min %4 sec").arg(score/60).arg(score%60).arg(highscore/60).arg(highscore%60);
}
- else //Victory!
+ else //New high score!
+
{
+ scoretext = tr("Your time %1 min %2 s is the new best time!").arg(score/60).arg(score%60);
+ levelset_.setLevelHighScore(currentLevel_,score);
+ }
+
+ //pause to show the highscore or victory screen
- pPauseAction_->setChecked(true); //Pause the game while showing the victory dialog
+ turnPauseOn();
+ pPausetextItem_->hide();
- pPausetextItem_->hide();
- pVictoryCongratulationsItem_->show();
+ //Go to the next level if available
+ currentLevel_++;
+
+ if ( currentLevel_ < levelset_.numberOfLevels() )
+ {
+ pLevelCompletedItem_->setHtml(scoretext);
+ pLevelCompletedItem_->show();
+// restartLevel();
+ }
+ else //Victory!
+ {
+ pVictoryCongratulationsItem_->show();
}
}
void SeaScene::restartGame()
{
currentLevel_ = 0;
+ totalScore_ = 0;
restartLevel();
}
pAboutBoxItem_ = NULL;
pVictoryCongratulationsItem_ = NULL;
+ pLevelCompletedItem_ = NULL;
+
}
}
}
}
+
+void SeaScene::createLevelCompletedItem()
+{
+ pLevelCompletedItem_ = new QGraphicsTextItem;
+ addItem(pLevelCompletedItem_);
+ pLevelCompletedItem_->setPos(20,20);
+ pLevelCompletedItem_->setZValue(1000);
+ pLevelCompletedItem_->hide();
+ //The text is set at usetime
+
+}