[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: =?utf-8?q?=5Bknights=5D_src=3A_Use_KSpeech_to_speak_computer=27s?=
From: Miha Čančula <miha.cancula () gmail ! com>
Date: 2011-03-06 20:17:30
Message-ID: 20110306201730.38100A60C9 () git ! kde ! org
[Download RAW message or body]
Git commit 3b0cba195bdb3dd8c6320c7a625b68eaae5b7007 by Miha Čančula.
Committed on 06/03/2011 at 19:38.
Pushed by mihac into branch 'master'.
Use KSpeech to speak computer's moves.
M +1 -0 src/CMakeLists.txt
M +51 -2 src/gamemanager.cpp
M +6 -0 src/knights.kcfg
http://commits.kde.org/knights/3b0cba195bdb3dd8c6320c7a625b68eaae5b7007
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 2b89031..fff01fe 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -52,6 +52,7 @@ kde4_add_ui_files(knights_SRCS
popup.ui
)
kde4_add_kcfg_files(knights_SRCS settings.kcfgc )
+qt4_add_dbus_interfaces(knights_SRCS \
${KDE4_DBUS_INTERFACES_DIR}/org.kde.KSpeech.xml) kde4_add_executable(knights \
${knights_SRCS})
target_link_libraries(knights ${KDE4_KDEUI_LIBS} ${KDE4_KPARTS_LIBS} \
${KDE4_PLASMA_LIBS} ${KDEGAMES_LIBRARY} ${QT_QTNETWORK_LIBRARY})
diff --git a/src/gamemanager.cpp b/src/gamemanager.cpp
index 3460760..4195f23 100644
--- a/src/gamemanager.cpp
+++ b/src/gamemanager.cpp
@@ -32,6 +32,9 @@
#include <QTimer>
#include <settings.h>
+#include <KSpeech>
+#include "kspeechinterface.h"
+
using namespace Knights;
const int TimerInterval = 100;
@@ -63,8 +66,9 @@ public:
QStack<Move> moveUndoStack;
Rules* rules;
-
QMap<int, Offer> offers;
+
+ org::kde::KSpeech* speech;
};
GameManagerPrivate::GameManagerPrivate()
@@ -72,7 +76,8 @@ GameManagerPrivate::GameManagerPrivate()
running(false),
gameStarted(false),
timer(0),
- rules(0)
+ rules(0),
+ speech(0)
{
}
@@ -88,11 +93,20 @@ Manager::Manager(QObject* parent) : QObject(parent),
d_ptr(new GameManagerPrivate)
{
kDebug() << "creating a GameManager";
+ Q_D(GameManager);
+ d->speech = new org::kde::KSpeech(
+ QLatin1String("org.kde.kttsd"),
+ QLatin1String("/KSpeech"),
+ QDBusConnection::sessionBus()
+ );
+ d->speech->setApplicationName(qAppName());
}
Manager::~Manager()
{
kDebug() << " !!! ----- Destroying a Game Manager ----- !!!";
+ Q_D(GameManager);
+ delete d->speech;
delete d_ptr;
}
@@ -588,6 +602,41 @@ void Manager::sendPendingMove()
Protocol::byColor ( oppositeColor ( d->activePlayer ) )->move ( pendingMove );
emit pieceMoved ( pendingMove );
rules()->moveMade ( pendingMove );
+ if ( Settings::speakOpponentsMoves()
+ && !Protocol::byColor(d->activePlayer)->isLocal()
+ && Protocol::byColor(oppositeColor(d->activePlayer))->isLocal() )
+ {
+ QString toSpeak;
+ QString name = Protocol::byColor(d->activePlayer)->playerName();
+ if ( pendingMove.flag(Move::Castle) )
+ {
+ if ( pendingMove.to().first == 3 )
+ {
+ toSpeak = i18nc("string to be spoken when the opponent castles \
queenside", + "%1 castles queenside", name);
+ }
+ else
+ {
+ toSpeak = i18nc("string to be spoken when the opponent castles \
queenside", + "%1 castles kingside", name);
+ }
+ }
+ else
+ {
+ toSpeak = i18nc("string to be spoken when the opponent makes a normal \
move", + "%1 to %2",
+ pieceTypeName ( pendingMove.pieceData().second ),
+ pendingMove.to().string()
+ );
+ }
+ kDebug() << toSpeak;
+ d->speech->say(toSpeak, KSpeech::soPlainText);
+ if ( pendingMove.flag(Move::Check) )
+ {
+ d->speech->say ( i18nc( "Your king is under attack", "Check" ), \
KSpeech::soPlainText ); + }
+ }
+
pendingMove = Move();
Color winner = rules()->winner();
diff --git a/src/knights.kcfg b/src/knights.kcfg
index 7e76d94..d435b37 100644
--- a/src/knights.kcfg
+++ b/src/knights.kcfg
@@ -141,4 +141,10 @@
<default>500</default>
</entry>
</group>
+ <group name="Voice">
+ <entry name="speakOpponentsMoves" type="Bool">
+ <label>whether opponents' moves are spoken by Jovie</label>
+ <default>true</default>
+ </entry>
+ </group>
</kcfg>
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic