X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=seascene.cpp;h=b29c068b555bc7655e2562baa7d23a0d05aa5247;hb=65329e998b27b5ccacd2d39c29a4d6b2fa8f2844;hp=1eec0002a0da00609cc426a3773d49fb925459bd;hpb=68a2d00015d6d6d8a557de4c04d5f18ae2c22dc9;p=ghostsoverboard diff --git a/seascene.cpp b/seascene.cpp index 1eec000..b29c068 100644 --- a/seascene.cpp +++ b/seascene.cpp @@ -33,6 +33,7 @@ #include #include #include +#include const QString ghostImageFilename_ = ":/pix/aave.png"; const QString rockImageFilename_ =":/pix/kari.png"; @@ -42,6 +43,9 @@ const QString octopusImageFilename_= ":/pix/tursas.png"; SeaScene::SeaScene(QObject *parent) : QGraphicsScene(parent) { + + setItemPointersNull(); + paused_ = false; screenLitKeeper_.keepScreenLit(true); @@ -70,6 +74,7 @@ SeaScene::SeaScene(QObject *parent) : currentLevel_ = 0; + connect(this,SIGNAL(allGhostsPicked()),this,SLOT(nextLevel())); @@ -84,10 +89,12 @@ SeaScene::SeaScene(QObject *parent) : pPauseAction_->setCheckable(true); connect(pPauseAction_,SIGNAL(toggled(bool)),this,SLOT(pause(bool))); + connect(&deviceInfo_,SIGNAL(lockStatusChanged(bool)),this,SLOT(handleDeviceLocked(bool))); + autopauseTimer.setSingleShot(true); autopauseTimer.setInterval(15*60*1000); - connect(&autopauseTimer,SIGNAL(timeout()),this,SLOT(forcePause())); + connect(&autopauseTimer,SIGNAL(timeout()),this,SLOT(turnPauseOn())); } @@ -98,8 +105,15 @@ void SeaScene::setupMap(int ghosts, int rocks, int octopuses, int octopusSpeed) clear(); + setItemPointersNull(); + createMenuItems(); + createAboutBoxItems(); + + createVictoryItems(); + + //empty the list of moving items movingItems_.clear(); @@ -356,16 +370,16 @@ void SeaScene::pause(bool paused) else { - qDebug("about to stop movement"); +// qDebug("about to stop movement"); emit pauseOn(); screenLitKeeper_.keepScreenLit(false); if (pPausetextItem_ != NULL) { - qDebug() << "about to show the pause text"; +// qDebug() << "about to show the pause text"; pPausetextItem_->show(); - qDebug() << "showing pause text"; +// qDebug() << "showing pause text"; } - else qDebug() << "No pause text available"; +// else qDebug() << "No pause text available"; autopauseTimer.stop(); //No need to count toward autopause when already paused } @@ -386,7 +400,31 @@ void SeaScene::handleScreenTapped() return; } - //If the game is paused, chacl if menu item was selected + //If the game is paused and about box is shown, close it and show the pause text and menu again + + if(pAboutBoxItem_) + { + if(pAboutBoxItem_->isVisible()) + { + pAboutBoxItem_->hide(); + pPausetextItem_->show(); + } + } + + + //If the game is paused, check if the victory item is being shown + if(pVictoryCongratulationsItem_) + { + if (pVictoryCongratulationsItem_->isVisibleTo(NULL)) //returns visibility to scene + { + pVictoryCongratulationsItem_->hide(); + restartGame(); + pPauseAction_->setChecked(false); // unpause + return; + } + } + + //If the game is paused and no victory, check if menu item was selected QList items = selectedItems(); @@ -407,37 +445,43 @@ void SeaScene::handleScreenTapped() QGraphicsItem* pItem = items.at(0); //Selecting an item brings here, thus only selecting one item should be possible //... so we can just take the first one + //Selection is just used to get notice of a menu item being clicked, removed after use + + clearSelection(); + + + //Act upon the selected item + if (pItem == pRestartGameItem_) { - qDebug() << "game restart requested"; +// qDebug() << "game restart requested"; restartGame(); + pPauseAction_->setChecked(false); //unpause game + } else if (pItem == pRestartLevelItem_) { - qDebug() << "Level restart requested"; +// qDebug() << "Level restart requested"; restartLevel(); + pPauseAction_->setChecked(false); //unpause game } else if (pItem == pSettingsItem_) { - //Temporary code for settings, likely to be turned into a QML dialog - QSettings settings; - - QMessageBox::StandardButton buttonpressed = QMessageBox::question(NULL,"Settings","Do you wish to have vibration effects enabled?", QMessageBox::Yes | QMessageBox::No); - - if (buttonpressed == QMessageBox::Yes) - { - pVibrateAction_->setChecked(true); - settings.setValue("vibration",true); - } - if (buttonpressed == QMessageBox::No) - { - pVibrateAction_->setChecked(false); - settings.setValue("vibration",false); - } + pVibrateAction_->toggle(); + + QSettings settings; + settings.setValue("vibration",pVibrateAction_->isChecked()); + + QString text = pSettingsItem_->toHtml(); + if (pVibrateAction_->isChecked()) + text.replace(" on"," off"); //don't remove spaces or you get vibratioff... + else + text.replace(" off"," on"); + pSettingsItem_->setHtml(text); } else if (pItem == pAboutItem_) @@ -454,19 +498,6 @@ void SeaScene::handleScreenTapped() { qApp->quit(); } - - - - //Selection is just used to get notice of a menu item being clicked, removed after use - - clearSelection(); - - //The user propably went to paused state just to access menu, so unpause - //unless status bar was requested - if (pItem != pMinimizeItem_) - { - pPauseAction_->setChecked(false); - } } @@ -499,7 +530,18 @@ void SeaScene::createMenuItems() prepareForMenu(pRestartLevelItem_); pSettingsItem_ = new QGraphicsTextItem; - pSettingsItem_->setHtml(tr("Vibration
effects").prepend(menufonthtml)); + QString vibraText(tr("Turn vibration
effects ")); + QString statusText; + if (pVibrateAction_->isChecked()) + { + statusText = "off"; + } + else + { + statusText = "on"; + } + vibraText.append(statusText); + pSettingsItem_->setHtml(vibraText.prepend(menufonthtml)); prepareForMenu(pSettingsItem_); pAboutItem_ = new QGraphicsTextItem; @@ -542,16 +584,8 @@ void SeaScene::prepareForMenu(QGraphicsItem * pItem) void SeaScene::about() { - QMessageBox::about(NULL, tr("About %1").arg(QApplication::applicationName()), - tr("Version %1" - "

Copyright 2011 Heli Hyvättinen" - "

License: General Public License v2" - "

Bug Reports: https://bugs.maemo.org/ " - "enter_bug.cgi?product=Ghosts%20Overboard" - ).arg(QApplication::applicationVersion())); - - - + pPausetextItem_->hide(); + pAboutBoxItem_->show(); } @@ -582,47 +616,12 @@ void SeaScene::nextLevel() else //Victory! { - QDialog* pVictoryDialog = new QDialog(); - pVictoryDialog->setWindowTitle(tr("You won!")); - - - QPushButton* pPlayAgainButton = new QPushButton(tr("Play again")); -// QPushButton* pQuitButton = new QPushButton(tr("Quit game")); - - QPixmap victoryIcon (":/pix/aavesaari.png"); - QLabel* pVictoryLabel = new QLabel(); - pVictoryLabel->setPixmap(victoryIcon); - - QLabel* pTextLabel = new QLabel(tr("Congratulations!

You have saved all the ghosts.")); - - - QVBoxLayout* pMainLayout = new QVBoxLayout; + pPauseAction_->setChecked(true); //Pause the game while showing the victory dialog - QHBoxLayout* pTopLayout = new QHBoxLayout; - pMainLayout->addLayout(pTopLayout); + pPausetextItem_->hide(); - pTopLayout->addWidget(pVictoryLabel); - pTopLayout->addWidget(pTextLabel); + pVictoryCongratulationsItem_->show(); - - - QHBoxLayout* pButtonLayout = new QHBoxLayout(); - pMainLayout->addLayout(pButtonLayout); - - // pButtonLayout->addWidget(pQuitButton); - pButtonLayout->addWidget(pPlayAgainButton); - - - - pVictoryDialog->setLayout(pMainLayout); - - connect(pPlayAgainButton, SIGNAL(clicked()),pVictoryDialog,SLOT(accept())); - - pVictoryDialog->exec(); - - //Never mind if the user cancels the dialog: restart the game anyway - - restartGame(); } } @@ -640,10 +639,87 @@ void SeaScene::forcePause() pause(true); } -void::SeaScene::softContinue() +void SeaScene::softContinue() { //Continue if not being paused by the user // Reverts forcePause() pause(pPauseAction_->isChecked()); } + + +void SeaScene::createVictoryItems() +{ + pVictoryCongratulationsItem_ = new QGraphicsTextItem; + pVictoryCongratulationsItem_->setHtml(" Victory!"); + pVictoryCongratulationsItem_->hide(); + pVictoryCongratulationsItem_->setPos(355,50); + pVictoryCongratulationsItem_->setZValue(1000); + addItem(pVictoryCongratulationsItem_); + + + //coordinates are relative to the parent + + QGraphicsTextItem * pTextItem = new QGraphicsTextItem(pVictoryCongratulationsItem_); + pTextItem->setHtml(" Congratulations!"); + pTextItem->setPos(-50,100); + pTextItem->setZValue(1000); + + QGraphicsTextItem * pMiddleTextItem = new QGraphicsTextItem(pVictoryCongratulationsItem_); + pMiddleTextItem->setHtml(" You have saved all the ghosts."); + pMiddleTextItem->setPos(-145,140); + pMiddleTextItem->setZValue(1000); + + QGraphicsTextItem * pLowestTextItem = new QGraphicsTextItem(pVictoryCongratulationsItem_); + pLowestTextItem->setHtml(" Tap to play again"); + pLowestTextItem->setPos(-50,220); + pLowestTextItem->setZValue(1000); +} + +void SeaScene::createAboutBoxItems() +{ + pAboutBoxItem_ = new QGraphicsTextItem; + addItem(pAboutBoxItem_); + pAboutBoxItem_->setPos(25,50); + pAboutBoxItem_->setZValue(1000); + pAboutBoxItem_->hide(); + + pAboutBoxItem_->setHtml(tr("" + "%1
Version %2" + "

Copyright 2011 Heli Hyvättinen" + "

License: General Public License v2" + "

Web: http://ghostsoverboard.garage.maemo.org/
" + "Bug Reports:
https://bugs.maemo.org/" + "enter_bug.cgi?product=Ghosts%20Overboard" + ).arg(QApplication::applicationName(),QApplication::applicationVersion())); + +} + +void SeaScene::setItemPointersNull() +{ + pPausetextItem_ = NULL; + pRestartLevelItem_ = NULL; + pRestartGameItem_ = NULL; + pSettingsItem_ = NULL; + pAboutItem_ = NULL; + pQuitItem_ = NULL ; + pMinimizeItem_ = NULL; + + pAboutBoxItem_ = NULL; + pVictoryCongratulationsItem_ = NULL; + +} + +void SeaScene::turnPauseOn() +{ + pPauseAction_->setChecked(true); +} + +void SeaScene::handleDeviceLocked(bool isLocked) +{ + //pauses if locked but does not unpause if unlocked + if(isLocked) + { + pPauseAction_->setChecked(true); + } +}