[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdegames/kmines
From: Dmitry Suzdalev <dimsuz () gmail ! com>
Date: 2008-04-16 22:06:32
Message-ID: 1208383592.424483.6536.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 797871 by dimsuz:
Add the ability to pause a running game.
Thanks for the patch, GnuShi!
M +24 -0 mainwindow.cpp
M +3 -0 mainwindow.h
M +15 -0 scene.cpp
M +5 -0 scene.h
--- trunk/KDE/kdegames/kmines/mainwindow.cpp #797870:797871
@@ -23,6 +23,7 @@
#include <KGameClock>
#include <KStandardGameAction>
#include <KActionCollection>
+#include <KToggleAction>
#include <KStatusBar>
#include <KScoreDialog>
#include <KConfigDialog>
@@ -87,6 +88,7 @@
KStandardGameAction::quit(this, SLOT(close()), actionCollection());
KStandardAction::preferences( this, SLOT( configureSettings() ), actionCollection() );
+ m_actionPause = KStandardGameAction::pause( this, SLOT(pauseGame(bool)), actionCollection() );
KGameDifficulty::init(this, this, SLOT(levelChanged(KGameDifficulty::standardLevel)),
SLOT(customLevelChanged(int)));
@@ -118,6 +120,15 @@
{
m_gameClock->restart();
m_gameClock->pause(); // start only with the 1st click
+
+ // some things to manage pause
+ if( m_actionPause->isChecked() )
+ {
+ m_scene->setGamePaused(false);
+ m_actionPause->setChecked(false);
+ }
+ m_actionPause->setEnabled(false);
+
KGameDifficulty::setRunning(false);
switch(KGameDifficulty::level())
{
@@ -144,6 +155,7 @@
void KMinesMainWindow::onGameOver(bool won)
{
m_gameClock->pause();
+ m_actionPause->setEnabled(false);
KGameDifficulty::setRunning(false);
if(won)
{
@@ -171,6 +183,9 @@
void KMinesMainWindow::onFirstClick()
{
+ // enable pause action
+ m_actionPause->setEnabled(true);
+ // start clock
m_gameClock->resume();
KGameDifficulty::setRunning(true);
}
@@ -193,6 +208,15 @@
dialog->show();
}
+void KMinesMainWindow::pauseGame(bool paused)
+{
+ m_scene->setGamePaused( paused );
+ if( paused )
+ m_gameClock->pause();
+ else
+ m_gameClock->resume();
+}
+
void KMinesMainWindow::loadSettings()
{
if ( !KMinesRenderer::self()->loadTheme(Settings::theme()) )
--- trunk/KDE/kdegames/kmines/mainwindow.h #797870:797871
@@ -25,6 +25,7 @@
class KMinesView;
class KGameClock;
class KScoreDialog;
+class KToggleAction;
class KMinesMainWindow : public KXmlGuiWindow
{
@@ -41,6 +42,7 @@
void onFirstClick();
void showHighscores();
void configureSettings();
+ void pauseGame(bool paused);
void loadSettings();
private:
void setupActions();
@@ -48,5 +50,6 @@
KMinesView* m_view;
KGameClock* m_gameClock;
KScoreDialog* m_scoreDialog;
+ KToggleAction* m_actionPause;
};
#endif
--- trunk/KDE/kdegames/kmines/scene.cpp #797870:797871
@@ -54,6 +54,12 @@
m_messageItem->setMessageOpacity(0.9);
m_messageItem->setMessageTimeout(4000);
addItem(m_messageItem);
+
+ m_gamePausedMessageItem = new KGamePopupItem;
+ m_gamePausedMessageItem->setMessageOpacity(0.9);
+ m_gamePausedMessageItem->setMessageTimeout(0);
+ m_gamePausedMessageItem->setHideOnMouseClick(false);
+ addItem(m_gamePausedMessageItem);
}
void KMinesScene::resizeScene(int width, int height)
@@ -81,6 +87,15 @@
return m_fieldItem->minesCount();
}
+void KMinesScene::setGamePaused(bool paused)
+{
+ m_fieldItem->setVisible(!paused);
+ if(paused)
+ m_gamePausedMessageItem->showMessage(i18n("Game is paused."), KGamePopupItem::Center);
+ else
+ m_gamePausedMessageItem->forceHide();
+}
+
void KMinesScene::onGameOver(bool won)
{
if(won)
--- trunk/KDE/kdegames/kmines/scene.h #797870:797871
@@ -47,6 +47,10 @@
* Starts new game
*/
void startNewGame(int rows, int cols, int numMines);
+ /**
+ * Toggles paused state for all cells in the field item
+ */
+ void setGamePaused(bool paused);
signals:
void minesCountChanged(int);
void gameOver(bool);
@@ -64,6 +68,7 @@
*/
MineFieldItem* m_fieldItem;
KGamePopupItem* m_messageItem;
+ KGamePopupItem* m_gamePausedMessageItem;
};
class QResizeEvent;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic