//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;
+
//This ensures that nextlevel will not be called until its safe to delete the Ship object.
//Leaving out Qt::QueuedConnection or calling nextlevel directly instead of emitting the signal will CRASH
connect(this,SIGNAL(allGhostsPicked()),this,SLOT(nextLevel()),Qt::QueuedConnection);
autopauseTimer.setSingleShot(true);
autopauseTimer.setInterval(15*60*1000);
- connect(&autopauseTimer,SIGNAL(timeout()),this,SLOT(forcePause()));
+ connect(&autopauseTimer,SIGNAL(timeout()),this,SLOT(turnPauseOn()));
}
createAboutBoxItems();
createVictoryItems();
+ createLevelCompletedItems();
+
//empty the list of moving items
connect(pOctopus,SIGNAL(droppingGhosts()),pShip,SLOT(dropAllGhosts()));
}
delete pPosition;
-
-
}
void SeaScene::setupMap(Level level)
if (pPausetextItem_)
pPausetextItem_->hide();
+ scoreCounter_.start();
+
autopauseTimer.start(); //Start counting towards autopause
}
}
// else qDebug() << "No pause text available";
+ levelScore_ += scoreCounter_.elapsed();
+
autopauseTimer.stop(); //No need to count toward autopause when already paused
}
}
{
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 or about box, check if menu item was selected
QList<QGraphicsItem *> items = selectedItems();
prepareForMenu(pRestartLevelItem_);
pSettingsItem_ = new QGraphicsTextItem;
- QString vibraText(tr("Vibration <br> effects "));
+ QString vibraText(tr("Turn vibration <br> effects "));
QString statusText;
if (pVibrateAction_->isChecked())
{
void SeaScene::restartLevel()
{
- setupMap(levelList_.value(currentLevel_)); //value() returns default constructor Level if index is invalid, so no risk of crash
+
+ levelScore_ = 0;
+
+ setupMap(levelset_.getLevel(currentLevel_)); //getLevel() returns default constructor Level if index is invalid, so no risk of crash
+
+ scoreCounter_.start();
+
vibrationActivate(pVibrateAction_->isChecked()); //Vibration effects are lost without this
// qDebug() << pVibrateAction_->isChecked();
autopauseTimer.start(); //reset counting towards autopause
+
+
}
void SeaScene::nextLevel()
{
- currentLevel_++;
+ //get score for previous level
+ levelScore_ += scoreCounter_.elapsed();
+ totalScore_ += levelScore_;
+ int highscore = levelset_.getLevelHighScore(currentLevel_);
- if (levelList_.empty())
- setupMap(Level());
+ qDebug() << highscore;
+ QString scoretext;
- if ( currentLevel_ < levelList_.size() )
+ if (levelScore_ >= highscore)
{
- restartLevel();
+ scoretext = tr("<font size=\"7\" color = darkorange>Your time: %1.%2 s<br>Best time: %3.%4 s").arg(levelScore_/1000).arg((levelScore_%1000)/100).arg(highscore/1000).arg((highscore%1000)/100);
}
- else //Victory!
+ else //New high score!
+
{
+ scoretext = tr("<font size=\"7\" color = darkorange>Your time %1.%2 s is<br>the new best time!").arg(levelScore_/1000).arg((levelScore_%1000)/100);
+ levelset_.setLevelHighScore(currentLevel_,levelScore_);
+ }
- 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!
+ {
+ int totalHighsore = levelset_.getTotalHighScore();
+ if (totalScore_ >= totalHighsore)
+ {
+ scoretext.append(tr("<br>Your total time: %1.%2 s<br>Best total time: %3.%4 s").arg(totalScore_/1000).arg((totalScore_%1000)/100).arg(totalHighsore/1000).arg((totalHighsore%1000)/100));
+ }
+ else //new total high score
+ {
+ scoretext.append(tr("<br>Your total time %1.%2 s is<br>the new best time").arg(totalScore_/1000).arg((totalScore_%1000)/100));
+ levelset_.setTotalHighScore(totalScore_);
+ }
+
+ pVictoryScoreItem_->setHtml(scoretext);
+ pVictoryCongratulationsItem_->show();
}
}
void SeaScene::restartGame()
{
currentLevel_ = 0;
+ totalScore_ = 0;
restartLevel();
}
pVictoryCongratulationsItem_ = new QGraphicsTextItem;
pVictoryCongratulationsItem_->setHtml("<font size=\"7\" color = darkorange> <b> Victory!");
pVictoryCongratulationsItem_->hide();
- pVictoryCongratulationsItem_->setPos(300,50);
+ pVictoryCongratulationsItem_->setPos(315,30);
pVictoryCongratulationsItem_->setZValue(1000);
addItem(pVictoryCongratulationsItem_);
QGraphicsTextItem * pTextItem = new QGraphicsTextItem(pVictoryCongratulationsItem_);
pTextItem->setHtml("<font size=\"7\" color = darkorange> Congratulations!");
- pTextItem->setPos(-50,100);
+ pTextItem->setPos(-50,80);
pTextItem->setZValue(1000);
QGraphicsTextItem * pMiddleTextItem = new QGraphicsTextItem(pVictoryCongratulationsItem_);
pMiddleTextItem->setHtml("<font size=\"7\" color = darkorange> You have saved all the ghosts.");
- pMiddleTextItem->setPos(-145,140);
+ pMiddleTextItem->setPos(-145,120);
+ pMiddleTextItem->setZValue(1000);
+
+
+ pVictoryScoreItem_ = new QGraphicsTextItem(pVictoryCongratulationsItem_);
+ pVictoryScoreItem_->setPos(-50,180);
pMiddleTextItem->setZValue(1000);
+ //Text is set at usetime!
QGraphicsTextItem * pLowestTextItem = new QGraphicsTextItem(pVictoryCongratulationsItem_);
pLowestTextItem->setHtml("<font size=\"7\" color = darkorange> Tap to play again");
- pLowestTextItem->setPos(-50,220);
+ pLowestTextItem->setPos(-50,360);
pLowestTextItem->setZValue(1000);
}
// pMinimizeItem_ = NULL; //Fremantle spesific
pAboutBoxItem_ = NULL;
+ pLevelCompletedItem_ = NULL;
+ pVictoryScoreItem_ = NULL;
+
+}
+
+void SeaScene::turnPauseOn()
+{
+ pPauseAction_->setChecked(true);
+}
+
+
+
+void SeaScene::createLevelCompletedItems()
+{
+ pLevelCompletedItem_ = new QGraphicsTextItem;
+ addItem(pLevelCompletedItem_);
+ pLevelCompletedItem_->setPos(240,100);
+ pLevelCompletedItem_->setZValue(1000);
+ pLevelCompletedItem_->hide();
+ //The text is set at usetime
+
+ QGraphicsTextItem * pTapForNextLevelItem = new QGraphicsTextItem(pLevelCompletedItem_);
+ pTapForNextLevelItem->setPos(-60,100);
+ pTapForNextLevelItem->setZValue(1000);
+ pTapForNextLevelItem->setHtml("<font size=\"7\" color = darkorange>Tap to start the next level");
}