+/**************************************************************************
+ Ghosts Overboard - a game for Maemo 5
+
+ Copyright (C) 2011 Heli Hyvättinen
+
+ This file is part of Ghosts Overboard
+
+ Ghosts Overboard is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+**************************************************************************/
+
#include "mainwindow.h"
-#include "timercontrolledtursas.h"
#include <QPixmap>
#include <QTimer>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
- setWindowIcon(QIcon(":/pix/laiva_10aave.png"));
+ setWindowIcon(QIcon(":/pix/laiva_3aave.png"));
setWindowTitle("Ghosts Overboard");
pScene_ = new SeaScene ();
connect(pScene_,SIGNAL(allGhostsPicked()),this,SLOT(nextLevel()));
- pView_ = new QGraphicsView ();
+ pView_ = new SeaView ();
+
pView_->setScene(pScene_);
setCentralWidget(pView_);
pPauseAction_ = new QAction(tr("Pause"),this);
pPauseAction_->setCheckable(true);
addAction(pPauseAction_);
- connect(pPauseAction_,SIGNAL(triggered(bool)),pScene_,SLOT(pause(bool)));
+ connect(pPauseAction_,SIGNAL(toggled(bool)),pScene_,SLOT(pause(bool)));
menuBar()->addAction(pPauseAction_);
+ connect(pView_,SIGNAL(pauseChanged()),pPauseAction_,SLOT(toggle()));
QAction * pRestartLevelAction = new QAction(tr("Restart level"),this);
addAction(pRestartLevelAction);
connect(pRestartLevelAction,SIGNAL(triggered()),this,SLOT(restartLevel()));
menuBar()->addAction(pRestartLevelAction);
+ QAction * pRestartGameAction = new QAction(tr("Restart game"),this);
+ addAction(pRestartGameAction);
+ connect(pRestartGameAction,SIGNAL(triggered()),this,SLOT(restartGame()));
+ menuBar()->addAction(pRestartGameAction);
+
+ pVibrateAction_ = new QAction(tr("Vibration effects"),this);
+ pVibrateAction_->setCheckable(true);
+ addAction(pVibrateAction_);
+ connect(pVibrateAction_,SIGNAL(toggled(bool)),pScene_,SLOT(vibrationActivate(bool)));
+ menuBar()->addAction(pVibrateAction_);
+
QAction * pAboutAction = new QAction(tr("About"),this);
addAction(pAboutAction);
menuBar()->addAction(pAboutAction);
+
+ Level level1(5,10);
+ levelList_.append(level1);
+ Level level2(5,10,2,50);
+ levelList_.append(level2);
+ Level level3(5,15,2,50);
+ levelList_.append(level3);
+ Level level4(5,15,4,50);
+ levelList_.append(level4);
+ Level level5(5,15,5,100);
+ levelList_.append(level5);
+
+ currentLevel_ = 0;
+
+
//the boundaries of the scene are set to match the size of the view window, which is not
//available in the constructor --> timer needed
QTimer::singleShot(100,this,SLOT(initializeBoundaries()));
void MainWindow::restartLevel()
{
- pScene_->setupMap(5,10,0);
+ pScene_->setupMap(levelList_.value(currentLevel_)); //value() returns default constructor Level if index is invalid, so no risk of crash
+ pScene_->vibrationActivate(pVibrateAction_->isChecked()); //Vibration effects are lost without this
+ // qDebug() << pVibrateAction_->isChecked();
}
void MainWindow::about()
void MainWindow::nextLevel()
{
- //for now, just the handling of last level is implemented, and there is just one level
+ currentLevel_++;
+
+ if (levelList_.empty())
+ pScene_->setupMap(Level());
+
+ if ( currentLevel_ < levelList_.size() )
+ {
+ restartLevel();
+ }
+ else //Victory!
+ {
QDialog* pVictoryDialog = new QDialog(this);
pVictoryDialog->setWindowTitle(tr("You won!"));
//Never mind if the user cancels the dialog: restart the game anyway
- restartLevel();
-
+ restartGame();
+ }
}
bool MainWindow::event(QEvent *event)
return QMainWindow::event(event);
}
+
+void MainWindow::restartGame()
+{
+ currentLevel_ = 0;
+ restartLevel();
+}