//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()));
pPauseAction_->setCheckable(true);
connect(pPauseAction_,SIGNAL(toggled(bool)),this,SLOT(pause(bool)));
- connect(&deviceInfo_,SIGNAL(lockStatusChanged(bool)),this,SLOT(handleDeviceLocked(bool)));
+
+ deviceLockPollTimer_.setInterval(20*60);
+ connect(&deviceLockPollTimer_,SIGNAL(timeout()),this,SLOT(pollDeviceLocked()));
+ deviceLockPollTimer_.start();
autopauseTimer.setSingleShot(true);
createVictoryItems();
+ createLevelCompletedItem();
+
//empty the list of moving items
}
delete pPosition;
+ scoreCounter_.start();
+
}
pPausetextItem_->hide();
autopauseTimer.start(); //Start counting towards autopause
+ deviceLockPollTimer_.start(); //Start polling whether device is locked
}
else
// else qDebug() << "No pause text available";
autopauseTimer.stop(); //No need to count toward autopause when already paused
+ deviceLockPollTimer_.stop(); //No need to check for unlock as no unpause anyway
}
}
{
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);
+ }
- pPauseAction_->setChecked(true); //Pause the game while showing the victory dialog
+ //pause to show the highscore or victory screen
- pPausetextItem_->hide();
+ turnPauseOn();
+ 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;
+
}
pPauseAction_->setChecked(true);
}
}
+
+void SeaScene::pollDeviceLocked()
+{
+
+ bool locked = deviceInfo_.isDeviceLocked();
+
+ if (locked)
+ {
+ if (!alreadyLocked_)
+ {
+ pPauseAction_->setChecked(true);
+ alreadyLocked_ = true;
+ }
+
+ else
+ {
+ alreadyLocked_ = false;
+ }
+ }
+}
+
+void SeaScene::createLevelCompletedItem()
+{
+ pLevelCompletedItem_ = new QGraphicsTextItem;
+ addItem(pLevelCompletedItem_);
+ pLevelCompletedItem_->setPos(20,20);
+ pLevelCompletedItem_->setZValue(1000);
+ pLevelCompletedItem_->hide();
+ //The text is set at usetime
+
+}