[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: =?utf-8?q?=5Bknights=5D_src=3A_Add_D-Bus_adaptor_to_enable_exter?=
From: Miha Čančula <miha.cancula () gmail ! com>
Date: 2011-03-24 14:11:15
Message-ID: 20110324141115.6C93EA60B9 () git ! kde ! org
[Download RAW message or body]
Git commit b1ab725527f05c0584a24537c5ddded985f8eb45 by Miha Čančula.
Committed on 24/03/2011 at 14:24.
Pushed by mihac into branch 'master'.
Add D-Bus adaptor to enable external control.
M +12 -5 src/CMakeLists.txt
M +2 -1 src/core/piece.h
M +28 -1 src/gamemanager.cpp
M +2 -0 src/gamemanager.h
M +6 -0 src/rules/chessrules.cpp
http://commits.kde.org/knights/b1ab725527f05c0584a24537c5ddded985f8eb45
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index fff01fe..365e36d 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,4 +1,4 @@
-set(knights_SRCS offerwidget.cpp gamemanager.cpp proto/textprotocol.cpp
+set(knights_SRCS
core/pos.cpp
core/move.cpp
core/renderer.cpp
@@ -7,19 +7,25 @@ set(knights_SRCS offerwidget.cpp gamemanager.cpp \
proto/textprotocol.cpp
proto/protocol.cpp
proto/localprotocol.cpp
+ proto/textprotocol.cpp
proto/xboardproto.cpp
proto/ficsprotocol.cpp
- proto/ficsdialog.cpp
+
proto/seekgraph.cpp
proto/chatwidget.cpp
-
-
+ proto/ficsdialog.cpp
+
rules/chessrules.cpp
gamedialog.cpp
- board.cpp
+ offerwidget.cpp
clock.cpp
clockwidget.cpp
+
+ externalcontrol.cpp
+ gamemanager.cpp
+
+ board.cpp
knightsview.cpp
knights.cpp
main.cpp
@@ -53,6 +59,7 @@ kde4_add_ui_files(knights_SRCS
)
kde4_add_kcfg_files(knights_SRCS settings.kcfgc )
qt4_add_dbus_interfaces(knights_SRCS \
${KDE4_DBUS_INTERFACES_DIR}/org.kde.KSpeech.xml) +qt4_add_dbus_adaptor(knights_SRCS \
org.kde.Knights.xml externalcontrol.h Knights::ExternalControl) \
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/core/piece.h b/src/core/piece.h
index 10ffee3..3be1f30 100644
--- a/src/core/piece.h
+++ b/src/core/piece.h
@@ -35,7 +35,8 @@ namespace Knights
Bishop,
Knight,
Rook,
- Pawn
+ Pawn,
+ PieceTypeCount
};
enum Color
{
diff --git a/src/gamemanager.cpp b/src/gamemanager.cpp
index aa2b41b..20da286 100644
--- a/src/gamemanager.cpp
+++ b/src/gamemanager.cpp
@@ -34,6 +34,7 @@
#include <KSpeech>
#include "kspeechinterface.h"
+#include "externalcontrol.h"
using namespace Knights;
@@ -69,6 +70,7 @@ public:
QMap<int, Offer> offers;
org::kde::KSpeech* speech;
+ ExternalControl* extControl;
};
GameManagerPrivate::GameManagerPrivate()
@@ -77,7 +79,8 @@ GameManagerPrivate::GameManagerPrivate()
gameStarted(false),
timer(0),
rules(0),
- speech(0)
+ speech(0),
+ extControl(0)
{
}
@@ -289,6 +292,7 @@ void Manager::initialize()
connect ( Protocol::black(), SIGNAL(gameOver(Color)), SLOT(gameOver(Color)) );
Protocol::white()->init();
Protocol::black()->init();
+ d->extControl = new ExternalControl(this);
}
void Manager::setTimeControl(Color color, const TimeControl& control)
@@ -465,6 +469,7 @@ void Manager::reset()
d->moveHistory.clear();
d->moveUndoStack.clear();
d->gameStarted = false;
+ delete d->extControl;
}
Rules* Manager::rules() const
@@ -479,6 +484,16 @@ void Manager::setRules(Rules* rules)
d->rules = rules;
}
+void Manager::sendOffer(GameAction action, Color player, int id)
+{
+ Offer o;
+ o.action = action;
+ o.player = player;
+ o.id = id;
+ sendOffer(o);
+}
+
+
void Manager::sendOffer(const Offer& offer)
{
Q_D(GameManager);
@@ -704,8 +719,20 @@ void Manager::moveByBoard(const Move& move)
processMove(move);
}
+void Manager::moveByExternalControl(const Knights::Move& move)
+{
+ Q_D(GameManager);
+ if ( !Protocol::byColor(d->activePlayer)->isLocal() )
+ {
+ return;
+ }
+ processMove(move);
+}
+
+
void Manager::processMove(const Move& move)
{
+ sendPendingMove();
Q_D(const GameManager);
Move m = move;
if ( activePlayer() == White )
diff --git a/src/gamemanager.h b/src/gamemanager.h
index 97a2f7a..f0c9755 100644
--- a/src/gamemanager.h
+++ b/src/gamemanager.h
@@ -141,10 +141,12 @@ signals:
public slots:
void moveByProtocol ( const Move& move );
void moveByBoard ( const Move& move );
+ void moveByExternalControl ( const Move& move );
void protocolInitSuccesful();
void gameOver ( Color winner );
void resign();
+ void sendOffer ( GameAction action, Color player, int id );
void sendOffer ( const Offer& offer );
void setOfferResult ( int id, OfferAction result );
diff --git a/src/rules/chessrules.cpp b/src/rules/chessrules.cpp
index d261b32..64025c7 100644
--- a/src/rules/chessrules.cpp
+++ b/src/rules/chessrules.cpp
@@ -448,6 +448,12 @@ void ChessRules::checkSpecialFlags ( Move* move, Color color )
move->setFlag(Move::Illegal, true);
return;
}
+ if ( !legalMoves ( move->from() ).contains(*move) )
+ {
+ kWarning() << "Illegal move" << move;
+ move->setFlag(Move::Illegal, true);
+ return;
+ }
move->setPieceData ( qMakePair( p->color(), p->pieceType() ) );
move->setFlags ( move->flags() & ~(Move::Take | Move::Castle | Move::Check | \
Move::CheckMate | Move::EnPassant | Move::Promote) ); if ( m_grid->contains ( \
move->to() ) )
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic