#include <QSettings>
#include <QPixmap>
+
const QString ghostImageFilename_ = ":/pix/aave.png";
const QString rockImageFilename_ =":/pix/kari.png";
const QString octopusImageFilename_= ":/pix/tursas.png";
qsrand(QTime::currentTime().msec()+2); //+2 to avoid setting it to 1
+
+
//Setup the level list
QList<Level> levelList;
Levelset set ("Original",levelList);
levelset_ = set;
+ availableLevelsets_.append(set);
currentLevel_ = 0;
totalScore_ = 0;
+ //Create another set of levels and place it in the available levelsets list
+ levelList.clear();
+ Level set2level1(8,15,4,50);
+ levelList.append(set2level1);
+ Level set2level2(8,20,4,50);
+ levelList.append(set2level2);
+ Level set2level3(8,20,5,100);
+ levelList.append(set2level3);
+ Level set2level4(8,20,6,150);
+ levelList.append(set2level4);
+ Level set2level5(8,25,8,200);
+ levelList.append(set2level5);
+
+ Levelset set2("Difficult",levelList);
+ availableLevelsets_.append(set2);
+
+
//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);
+
+
pVibrateAction_ = new QAction(tr("Vibration effects"),this);
pVibrateAction_->setCheckable(true);
connect(pVibrateAction_,SIGNAL(toggled(bool)),this,SLOT(vibrationActivate(bool)));
autopauseTimer.setInterval(15*60*1000);
connect(&autopauseTimer,SIGNAL(timeout()),this,SLOT(turnPauseOn()));
+ vibrationAllowed_ = false;
+ pResourceSet_ = new ResourcePolicy::ResourceSet("game",this);
+ ResourcePolicy::VibraResource * pVibraResource = new ResourcePolicy::VibraResource();
+ pVibraResource->setOptional(false); //The only resource of the set, so no sense for it to be optional
+ pResourceSet_->addResourceObject(pVibraResource);
+
+ connect(pResourceSet_,SIGNAL(resourcesGranted(const QList< ResourcePolicy::ResourceType >)),this,SLOT(resourcesAvailable()));
+ connect(pResourceSet_,SIGNAL(lostResources()),this,SLOT(resourcesLost()));
+
+ //To test whether resources were succesfully asked but not given
+ connect(pResourceSet_,SIGNAL(resourcesDenied()),this,SLOT(resourcesLost()));
+ pResourceSet_->setAlwaysReply();
+
+ pResourceSet_->acquire();
}
createMenuItems();
createAboutBoxItems();
+
+ createSelectLevelsetFromListItems();
+
createVictoryItems();
createLevelCompletedItems();
connect(pShip,SIGNAL(pickingGhost(QGraphicsItem*)),this, SLOT(removeGhost(QGraphicsItem*)) );
connect(pShip,SIGNAL(droppingGhosts(int)),this,SLOT(ghostsDropped(int)));
connect(this,SIGNAL(vibrationActivated(bool)),pShip,SLOT(setVibrationActivate(bool)));
+ if (vibrationAllowed_)
+ pShip->allowVibration(); //Vibration is disallowed by default so only allowing needs to be done explicitly
+ connect(pResourceSet_,SIGNAL(resourcesGranted(const QList< ResourcePolicy::ResourceType >)),pShip,SLOT(allowVibration()));
+ connect(pResourceSet_,SIGNAL(lostResources()),pShip,SLOT(disallowVibration()));
pShip->startMoving();
movingItems_.append(pShip);
connect(this,SIGNAL(pauseOn()),pShip,SLOT(stopMoving()));
if (items.isEmpty())
{
+ pSelectLevelsetFromListItem_->hide();
pPauseAction_->setChecked(false);
+
return;
}
qApp->quit();
}
+ else if (pItem == pChooseLevelsetItem_)
+ {
+ pPausetextItem_->hide();
+ pSelectLevelsetFromListItem_->show();
+ }
+
+ else
+ {
+ foreach (QGraphicsItem* pLevelItem, levelsetItems_)
+ {
+ if (pItem == pLevelItem)
+ {
+ QVariant variant = pLevelItem->data(0);
+
+ if (variant.canConvert<Levelset>())
+ {
+ levelset_ = variant.value<Levelset>();
+ restartGame();
+ pPauseAction_->setChecked(false); //unpause game
+ }
+ }
+ }
+ }
+
}
pRestartLevelItem_->setHtml(tr("Restart <br> level").prepend(menufonthtml));
prepareForMenu(pRestartLevelItem_);
+ pChooseLevelsetItem_ = new QGraphicsTextItem;
+ pChooseLevelsetItem_->setHtml(tr("Choose <br> levelset").prepend(menufonthtml));
+ prepareForMenu(pChooseLevelsetItem_);
+
pSettingsItem_ = new QGraphicsTextItem;
QString vibraText(tr("Turn vibration <br> effects "));
QString statusText;
//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_++*160-150);
+
+ if (menuItemCount_< itemsPerRow)
+ {
+ pItem->setY(120);
+ }
+ else pItem->setY(240);
+
+
+ pItem->setX((menuItemCount_++%itemsPerRow)*180-10);
}
vibrationActivate(pVibrateAction_->isChecked()); //Vibration effects are lost without this
// qDebug() << pVibrateAction_->isChecked();
+
autopauseTimer.start(); //reset counting towards autopause
pAboutItem_ = NULL;
pQuitItem_ = NULL ;
// pMinimizeItem_ = NULL; //Fremantle spesific
+ pChooseLevelsetItem_ = NULL;
pAboutBoxItem_ = NULL;
pLevelCompletedItem_ = NULL;
+ pVictoryCongratulationsItem_ = NULL;
pVictoryScoreItem_ = NULL;
}
pTapForNextLevelItem->setHtml("<font size=\"7\" color = darkorange>Tap to start the next level");
}
-void SeaScene::resourcesAvailable()
+void SeaScene::createSelectLevelsetFromListItems()
{
- qDebug() << "Resources available";
- vibrationAllowed_ = true;
-}
+
-void SeaScene::resourcesLost()
-{
- qDebug() << "Resources lost";
- vibrationAllowed_ = false;
-}
+ if (availableLevelsets_.isEmpty()) //Something is badly wrong in code if this is true...
+ return;
+
+
+ pSelectLevelsetFromListItem_ = new QGraphicsTextItem;
+ addItem(pSelectLevelsetFromListItem_);
+ pSelectLevelsetFromListItem_->setPos(295,60);
+ pSelectLevelsetFromListItem_->setZValue(1000);
+ pSelectLevelsetFromListItem_->hide();
+
++
+ QString fontstring ("<font color = darkorange size = \"7\">");
+
+ pSelectLevelsetFromListItem_->setHtml(tr("Choose a levelset").prepend(fontstring));
+
+ int yPos = 100;
+
+ levelsetItems_.clear();
+
+ foreach (Levelset set, availableLevelsets_)
+ {
+ QGraphicsTextItem * pItem = new QGraphicsTextItem(pSelectLevelsetFromListItem_);
+ QString text (fontstring);
+ if (levelset_.getName() == set.getName())
+ text.append("<b>");
+ text.append(set.getName());
+ pItem->setHtml(text);
+ pItem->setPos(65,yPos);
+ yPos+=80;
+ pItem->setZValue(1000);
+ pItem->setFlag(QGraphicsItem::ItemIsSelectable);
+ pItem->setData(0,QVariant::fromValue(set));
+ levelsetItems_.append(pItem);
+
+ }
+
+ }
++
++
++ void SeaScene::resourcesAvailable()
++ {
++ qDebug() << "Resources available";
++ vibrationAllowed_ = true;
++ }
++
++
++ void SeaScene::resourcesLost()
++ {
++ qDebug() << "Resources lost";
++ vibrationAllowed_ = false;
++ }