Merge branch 'base'
[ghostsoverboard] / seascene.cpp
index 5b81a57..7adf58a 100644 (file)
@@ -32,6 +32,7 @@
 #include <QPushButton>
 #include <QLabel>
 #include <QVBoxLayout>
+#include <QSettings>
 
 const QString ghostImageFilename_ = ":/pix/aave.png";
 const QString rockImageFilename_ =":/pix/kari.png";
@@ -75,6 +76,8 @@ SeaScene::SeaScene(QObject *parent) :
     pVibrateAction_ = new QAction(tr("Vibration effects"),this);
     pVibrateAction_->setCheckable(true);
     connect(pVibrateAction_,SIGNAL(toggled(bool)),this,SLOT(vibrationActivate(bool)));
+    QSettings settings;
+    pVibrateAction_->setChecked(settings.value("vibration",false).toBool());
 
 
     pPauseAction_ = new QAction(tr("Pause"),this);
@@ -82,6 +85,11 @@ SeaScene::SeaScene(QObject *parent) :
     connect(pPauseAction_,SIGNAL(toggled(bool)),this,SLOT(pause(bool)));
 
 
+    autopauseTimer.setSingleShot(true);
+    autopauseTimer.setInterval(15*60*1000);
+    connect(&autopauseTimer,SIGNAL(timeout()),this,SLOT(forcePause()));
+
+
 }
 
 void SeaScene::setupMap(int ghosts, int rocks, int octopuses, int octopusSpeed)
@@ -208,6 +216,8 @@ void SeaScene::setupMap(int ghosts, int rocks, int octopuses, int octopusSpeed)
         connect(pOctopus,SIGNAL(droppingGhosts()),pShip,SLOT(dropAllGhosts()));
     }
     delete pPosition;
+
+
 }
 
 void SeaScene::setupMap(Level level)
@@ -335,10 +345,13 @@ void SeaScene::pause(bool paused)
         if (paused == false)
         {
      //       qDebug() << "starting to move again";
+            emit fullscreenRequested();
             emit pauseOff();
             screenLitKeeper_.keepScreenLit(true);
             if (pPausetextItem_)
                 pPausetextItem_->hide();
+
+            autopauseTimer.start(); //Start counting towards autopause
         }
 
         else
@@ -353,6 +366,8 @@ void SeaScene::pause(bool paused)
                 qDebug() << "showing pause text";
             }
                 else qDebug() << "No pause text available";
+
+            autopauseTimer.stop(); //No need to count toward autopause when already paused
         }
 }
 
@@ -408,14 +423,17 @@ void SeaScene::handleScreenTapped()
 
     else if (pItem == pSettingsItem_)
     {
-    //Temporary code for settings, likely to be turned into a QML dialog
+        pVibrateAction_->toggle();
 
-          QMessageBox::StandardButton buttonpressed = QMessageBox::question(NULL,"Settings","Do you wish to have vibration effects enabled?", QMessageBox::Yes | QMessageBox::No);
+        QSettings settings;
+        settings.setValue("vibration",pVibrateAction_->isChecked());
 
-          if (buttonpressed == QMessageBox::Yes)
-              pVibrateAction_->setChecked(true);
-          if (buttonpressed == QMessageBox::No)
-              pVibrateAction_->setChecked(false);
+        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_)
@@ -423,15 +441,29 @@ void SeaScene::handleScreenTapped()
         about();
     }
 
+    else if(pItem == pMinimizeItem_)
+    {
+        emit minimizeRequested();
+    }
+
+    else if (pItem == pQuitItem_)
+    {
+        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
-
-    pPauseAction_->setChecked(false);
+    //The user propably went to paused state just to access menu, so unpause unless vibration set (so the user sees its changed)
+    //or unless status bar was requested
+    if (pItem != pMinimizeItem_ || pItem != pSettingsItem)
 
+    {
+        pPauseAction_->setChecked(false);
+    }
 }
 
 
@@ -439,25 +471,57 @@ void SeaScene::handleScreenTapped()
 void SeaScene::createMenuItems()
 {
 
-    pPausetextItem_ =  addSimpleText("Game paused. Tap to continue.");
+    QFont font;
+    font.setPixelSize(35);
+
+
+
+    pPausetextItem_ = new QGraphicsTextItem;
+    pPausetextItem_->setHtml("<font size = \"5\" color = darkorange> Game paused. Tap to continue.");
     pPausetextItem_->setZValue(1000);
-    pPausetextItem_->setPos(250,50);
+    pPausetextItem_->setPos(165,50);
+    addItem(pPausetextItem_);
     pPausetextItem_->hide();
 
     menuItemCount_ = 0;
 
-    pRestartGameItem_ = new QGraphicsSimpleTextItem("Restart game");
+    QString menufonthtml = "<font size = \"4\" color = darkorange>";
+
+    pRestartGameItem_ = new QGraphicsTextItem;
+    pRestartGameItem_->setHtml(tr("Restart <br> game").prepend(menufonthtml));
     prepareForMenu(pRestartGameItem_);
 
-    pRestartLevelItem_ = new QGraphicsSimpleTextItem("Restart level");
+    pRestartLevelItem_ = new QGraphicsTextItem;
+    pRestartLevelItem_->setHtml(tr("Restart <br> level").prepend(menufonthtml));
     prepareForMenu(pRestartLevelItem_);
 
-    pSettingsItem_ = new QGraphicsSimpleTextItem("Settings");
+    pSettingsItem_ = new QGraphicsTextItem;
+    QString vibraText(tr("Vibration <br> effects "));
+    QString statusText;
+    if (pVibrateAction_->isChecked())
+    {
+        statusText = "off";
+    }
+    else
+    {
+        statusText = "on";
+    }
+    vibraText.append(statusText);
+    pSettingsItem_->setHtml(vibraText.prepend(menufonthtml));
     prepareForMenu(pSettingsItem_);
 
-    pAboutItem_ = new QGraphicsSimpleTextItem("About");
+    pAboutItem_ = new QGraphicsTextItem;
+    pAboutItem_->setHtml(tr("About <br> game").prepend(menufonthtml));
     prepareForMenu(pAboutItem_);
 
+    pMinimizeItem_ = new QGraphicsTextItem;
+    pMinimizeItem_->setHtml(tr("Show <br> status bar").prepend(menufonthtml));
+    prepareForMenu(pMinimizeItem_);
+
+    pQuitItem_ = new QGraphicsTextItem;
+    pQuitItem_->setHtml(tr("Quit <br> game").prepend(menufonthtml));
+    prepareForMenu(pQuitItem_);
+
 }
 
 void SeaScene::prepareForMenu(QGraphicsItem * pItem)
@@ -467,11 +531,20 @@ void SeaScene::prepareForMenu(QGraphicsItem * pItem)
     //They are also shown and hidden with it, resulting in the menu being visble when the game is paused
     //Their coordinates are given relative to the parent.
 
+
+
+
+    int itemsPerRow = 3;
+
     pItem->setParentItem(pPausetextItem_);
     pItem->setZValue(1000);
     pItem->setFlag(QGraphicsItem::ItemIsSelectable);
-    pItem->setY(150);
-    pItem->setX(menuItemCount_++*150-250);
+
+    int row = menuItemCount_/(itemsPerRow);
+    pItem->setY(150+row*120);
+    pItem->setX(((menuItemCount_%(itemsPerRow))*180+5));
+
+    menuItemCount_++;
  }
 
 
@@ -495,6 +568,7 @@ void SeaScene::restartLevel()
     setupMap(levelList_.value(currentLevel_));  //value() 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
 }