void Player::setPhase(Phase phase){ if(this->phase != phase){ this->phase = phase; if(phase == Player::Start){ emit turn_started(); } } }
Client::Client(QObject *parent, const QString &filename) :QObject(parent), refusable(true), status(NotActive), alive_count(1), nullification_dialog(NULL) { ClientInstance = this; callbacks["checkVersion"] = &Client::checkVersion; callbacks["setup"] = &Client::setup; callbacks["addPlayer"] = &Client::addPlayer; callbacks["removePlayer"] = &Client::removePlayer; callbacks["startInXs"] = &Client::startInXs; callbacks["arrangeSeats"] = &Client::arrangeSeats; callbacks["startGame"] = &Client::startGame; callbacks["hpChange"] = &Client::hpChange; callbacks["playSkillEffect"] = &Client::playSkillEffect; callbacks["closeNullification"] = &Client::closeNullification; callbacks["playCardEffect"] = &Client::playCardEffect; callbacks["clearPile"] = &Client::clearPile; callbacks["setPileNumber"] = &Client::setPileNumber; callbacks["gameOver"] = &Client::gameOver; callbacks["killPlayer"] = &Client::killPlayer; callbacks["gameOverWarn"] = &Client::gameOverWarn; callbacks["showCard"] = &Client::showCard; callbacks["setMark"] = &Client::setMark; callbacks["log"] = &Client::log; callbacks["speak"] = &Client::speak; callbacks["increaseSlashCount"] = &Client::increaseSlashCount; callbacks["attachSkill"] = &Client::attachSkill; callbacks["detachSkill"] = &Client::detachSkill; callbacks["moveFocus"] = &Client::moveFocus; callbacks["setEmotion"] = &Client::setEmotion; callbacks["skillInvoked"] = &Client::skillInvoked; callbacks["acquireSkill"] = &Client::acquireSkill; callbacks["moveNCards"] = &Client::moveNCards; callbacks["moveCard"] = &Client::moveCard; callbacks["drawCards"] = &Client::drawCards; callbacks["drawNCards"] = &Client::drawNCards; // interactive methods callbacks["activate"] = &Client::activate; callbacks["doChooseGeneral"] = &Client::doChooseGeneral; callbacks["doGuanxing"] = &Client::doGuanxing; callbacks["doGongxin"] = &Client::doGongxin; callbacks["askForDiscard"] = &Client::askForDiscard; callbacks["askForSuit"] = &Client::askForSuit; callbacks["askForKingdom"] = &Client::askForKingdom; callbacks["askForSinglePeach"] = &Client::askForSinglePeach; callbacks["askForCardChosen"] = &Client::askForCardChosen; callbacks["askForCard"] = &Client::askForCard; callbacks["askForUseCard"] = &Client::askForUseCard; callbacks["askForSkillInvoke"] = &Client::askForSkillInvoke; callbacks["askForChoice"] = &Client::askForChoice; callbacks["askForNullification"] = &Client::askForNullification; callbacks["askForCardShow"] = &Client::askForCardShow; callbacks["askForPindian"] = &Client::askForPindian; callbacks["askForYiji"] = &Client::askForYiji; callbacks["askForPlayerChosen"] = &Client::askForPlayerChosen; callbacks["fillAG"] = &Client::fillAG; callbacks["askForAG"] = &Client::askForAG; callbacks["takeAG"] = &Client::takeAG; callbacks["clearAG"] = &Client::clearAG; ask_dialog = NULL; use_card = false; Self = new ClientPlayer(this); Self->setScreenName(Config.UserName); Self->setProperty("avatar", Config.UserAvatar); connect(Self, SIGNAL(turn_started()), this, SLOT(clearTurnTag())); connect(Self, SIGNAL(role_changed(QString)), this, SLOT(notifyRoleChange(QString))); if(!filename.isEmpty()){ socket = NULL; recorder = NULL; replayer = new Replayer(this, filename); // connect(replayer, SIGNAL(command_parsed(char*)), this, SLOT(processReply(char*))); connect(replayer, SIGNAL(command_parsed(QString)), this, SLOT(processCommand(QString))); }else{ socket = new NativeClientSocket; socket->setParent(this); connect(socket, SIGNAL(message_got(char*)), this, SLOT(processReply(char*))); connect(socket, SIGNAL(error_message(QString)), this, SIGNAL(error_message(QString))); socket->connectToHost(); recorder = new Recorder(this); connect(socket, SIGNAL(message_got(char*)), recorder, SLOT(record(char*))); replayer = NULL; } }