Removed all old variants.
[tagua/yd.git] / src / entities / examinationentity.cpp
blob3c525cd30c7af295292e4230fe967c02a33ea983
1 /*
2 Copyright (c) 2006 Paolo Capriotti <p.capriotti@sns.it>
3 (c) 2006 Maurizio Monge <maurizio.monge@kdemail.net>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9 */
11 #include "examinationentity.h"
12 #include "game.h"
13 #include "icsconnection.h"
14 #include "positioninfo.h"
15 #include "pgnparser.h"
16 #include "hlvariant/chess/piece.h"
17 #include "icsapi.h"
19 #include <iostream>
21 ExaminationEntity::ExaminationEntity(VariantInfo* variant, const boost::shared_ptr<Game>& game,
22 int game_number, const boost::shared_ptr<ICSConnection>& connection,
23 AgentGroup* group)
24 : UserEntity(game, HLVariant::Chess::Piece::QUEEN)
25 , m_variant(variant)
26 , m_icsapi(variant->icsAPI())
27 , m_game_number(game_number)
28 , m_connection(connection)
29 , m_dispatcher(group, this) {
30 Q_ASSERT(m_icsapi);
33 QString ExaminationEntity::save() const {
34 return m_game->pgn();
37 void ExaminationEntity::loadPGN(const PGN& pgn) {
38 m_game->load(pgn);
41 AbstractMove::Ptr ExaminationEntity::testMove(const NormalUserMove&) const {
42 return AbstractMove::Ptr();
44 AbstractMove::Ptr ExaminationEntity::testMove(const DropUserMove&) const {
45 return AbstractMove::Ptr();
48 bool ExaminationEntity::testPremove(const NormalUserMove&) const { return false; }
49 bool ExaminationEntity::testPremove(const DropUserMove&) const { return false; }
50 void ExaminationEntity::executeMove(boost::shared_ptr<AbstractMove>) { }
51 void ExaminationEntity::addPremove(const NormalUserMove&) { }
52 void ExaminationEntity::addPremove(const DropUserMove&) { }
53 void ExaminationEntity::cancelPremove() { }
54 InteractionType ExaminationEntity::validTurn(const Point&) const { return NoAction; }
55 InteractionType ExaminationEntity::validTurn(int) const { return NoAction; }
56 bool ExaminationEntity::movable(const Point&) const { return false; }
57 bool ExaminationEntity::jump(const Index&) { return true; }
59 bool ExaminationEntity::gotoFirst() {
60 m_connection->sendText("back 99999");
61 return true;
64 bool ExaminationEntity::gotoLast() {
65 m_connection->sendText("forward 99999");
66 return true;
69 bool ExaminationEntity::goTo(const Index& index) {
70 std::pair<int, int> steps = m_game->index().stepsTo(index);
71 if (steps.first == 0) {
72 m_connection->sendText(QString("forward %1").arg(steps.second));
73 return true;
75 else if (steps.second == 0) {
76 m_connection->sendText(QString("back %1").arg(steps.first));
77 return true;
79 else return false;
82 bool ExaminationEntity::forward() {
83 std::cout << "[entity] forward" << std::endl;
84 m_connection->sendText("forward");
85 return true;
88 bool ExaminationEntity::back() {
89 m_connection->sendText("back");
90 return true;
93 bool ExaminationEntity::undo() { return true; }
94 bool ExaminationEntity::redo() { return true; }
95 bool ExaminationEntity::truncate() { return true; }
96 bool ExaminationEntity::promoteVariation() { return true; }
98 void ExaminationEntity::notifyStyle12(const PositionInfo& style12, bool /*is_starting*/) {
99 m_dispatcher.clockUpdate(style12.whiteTime, style12.blackTime);
101 if (style12.index() > 0) {
102 MovePtr last_move = m_icsapi->parseVerbose(style12.lastMove, style12.position);
103 m_game->insert(last_move, style12.position, style12.index());
106 m_game->goTo(style12.index());
108 void ExaminationEntity::notifyPool(const class PoolInfo&) { /*TODO */ }
109 void ExaminationEntity::notifyMoveList(int, AbstractPosition::Ptr, const PGN&){ /* TODO */ }
110 void ExaminationEntity::notifyMove(const Index&) { }
111 void ExaminationEntity::notifyBack() { }
112 void ExaminationEntity::notifyForward() { }
113 void ExaminationEntity::notifyGotoFirst() { }
114 void ExaminationEntity::notifyGotoLast() { }
116 bool ExaminationEntity::attach() {
117 return m_game->lastMainlineIndex() == 0;