# HG changeset patch # User displacer # Date 1169409205 0 # Node ID 4665bfe2547016112ae363ed2d23d44280ff30e0 # Parent 29bc9c36ad5f7208c2105b3978efa5d9a93eddb6 first buggy hedgehogs num net change diff -r 29bc9c36ad5f -r 4665bfe25470 QTfrontend/frameTeam.cpp --- a/QTfrontend/frameTeam.cpp Sun Jan 21 19:51:02 2007 +0000 +++ b/QTfrontend/frameTeam.cpp Sun Jan 21 19:53:25 2007 +0000 @@ -62,6 +62,13 @@ teamToWidget.erase(it); } +void FrameTeams::setHHNum(const HWTeam& team) +{ + TeamShowWidget* pTeamShowWidget = dynamic_cast(getTeamWidget(team)); + if(!pTeamShowWidget) throw; + pTeamShowWidget->setHHNum(team.numHedgehogs); +} + QWidget* FrameTeams::getTeamWidget(HWTeam team) { tmapTeamToWidget::iterator it=teamToWidget.find(team); diff -r 29bc9c36ad5f -r 4665bfe25470 QTfrontend/frameTeam.h --- a/QTfrontend/frameTeam.h Sun Jan 21 19:51:02 2007 +0000 +++ b/QTfrontend/frameTeam.h Sun Jan 21 19:53:25 2007 +0000 @@ -38,6 +38,7 @@ QWidget* getTeamWidget(HWTeam team); bool isFullTeams() const; void resetColors(); + void setHHNum(const HWTeam& team); public slots: void addTeam(HWTeam team, bool willPlay); diff -r 29bc9c36ad5f -r 4665bfe25470 QTfrontend/game.cpp --- a/QTfrontend/game.cpp Sun Jan 21 19:51:02 2007 +0000 +++ b/QTfrontend/game.cpp Sun Jan 21 19:53:25 2007 +0000 @@ -77,11 +77,11 @@ if (m_pTeamSelWidget) { qDebug() << "adding teams from teamselwidget..."; - QList teams = QList::fromStdList(m_pTeamSelWidget->getPlayingTeams()); + QList teams = m_pTeamSelWidget->getPlayingTeams(); for(QList::iterator it = teams.begin(); it != teams.end(); ++it) { qDebug() << "a team..."; - (*it).numHedgehogs = 4; + //(*it).numHedgehogs = 4; HWProto::addStringListToBuffer(buf, (*it).TeamGameConfig(gamecfg->getInitHealth())); } diff -r 29bc9c36ad5f -r 4665bfe25470 QTfrontend/hedgehogerWidget.cpp --- a/QTfrontend/hedgehogerWidget.cpp Sun Jan 21 19:51:02 2007 +0000 +++ b/QTfrontend/hedgehogerWidget.cpp Sun Jan 21 19:53:25 2007 +0000 @@ -47,12 +47,14 @@ if(numHedgehogs < 8 && pOurFrameTeams->overallHedgehogs<18) { numHedgehogs++; pOurFrameTeams->overallHedgehogs++; + emit hedgehogsNumChanged(); } } else if (event->button()==Qt::RightButton) { event->accept(); if(numHedgehogs > 3) { numHedgehogs--; pOurFrameTeams->overallHedgehogs--; + emit hedgehogsNumChanged(); } } else { event->ignore(); @@ -61,6 +63,14 @@ repaint(); } +void CHedgehogerWidget::setHHNum(unsigned int num) +{ + unsigned int diff=numHedgehogs-num; + numHedgehogs=num; + pOurFrameTeams->overallHedgehogs+=diff; + repaint(); +} + void CHedgehogerWidget::paintEvent(QPaintEvent* event) { QImage image(":/res/hh25x25.png"); diff -r 29bc9c36ad5f -r 4665bfe25470 QTfrontend/hedgehogerWidget.h --- a/QTfrontend/hedgehogerWidget.h Sun Jan 21 19:51:02 2007 +0000 +++ b/QTfrontend/hedgehogerWidget.h Sun Jan 21 19:53:25 2007 +0000 @@ -31,6 +31,10 @@ CHedgehogerWidget(QWidget * parent); ~CHedgehogerWidget(); unsigned char getHedgehogsNum() const; + void setHHNum (unsigned int num); + + signals: + void hedgehogsNumChanged(); protected: virtual void paintEvent(QPaintEvent* event); diff -r 29bc9c36ad5f -r 4665bfe25470 QTfrontend/hwform.cpp --- a/QTfrontend/hwform.cpp Sun Jan 21 19:51:02 2007 +0000 +++ b/QTfrontend/hwform.cpp Sun Jan 21 19:53:25 2007 +0000 @@ -246,6 +246,8 @@ connect(hwnet, SIGNAL(EnteredGame()), this, SLOT(NetGameEnter())); connect(hwnet, SIGNAL(AddNetTeam(const HWTeam&)), this, SLOT(AddNetTeam(const HWTeam&))); + connect(ui.pageNetGame->pNetTeamsWidget, SIGNAL(hhogsNumChanged(const HWTeam&)), + hwnet, SLOT(onHedgehogsNumChanged(const HWTeam&))); connect(ui.pageNetGame->pNetTeamsWidget, SIGNAL(teamWillPlay(HWTeam)), hwnet, SLOT(AddTeam(HWTeam))); connect(ui.pageNetGame->pNetTeamsWidget, SIGNAL(teamNotPlaying(const HWTeam&)), hwnet, SLOT(RemoveTeam(const HWTeam&))); @@ -262,6 +264,8 @@ connect(hwnet, SIGNAL(initHealthChanged(quint32)), ui.pageNetGame->pGameCFG, SLOT(setInitHealth(quint32))); connect(hwnet, SIGNAL(turnTimeChanged(quint32)), ui.pageNetGame->pGameCFG, SLOT(setTurnTime(quint32))); connect(hwnet, SIGNAL(fortsModeChanged(bool)), ui.pageNetGame->pGameCFG, SLOT(setFortsMode(bool))); + connect(hwnet, SIGNAL(hhnumChanged(const HWTeam&)), + ui.pageNetGame->pNetTeamsWidget, SLOT(changeHHNum(const HWTeam&))); hwnet->Connect(hostName, port, nick); diff -r 29bc9c36ad5f -r 4665bfe25470 QTfrontend/netserver.cpp --- a/QTfrontend/netserver.cpp Sun Jan 21 19:51:02 2007 +0000 +++ b/QTfrontend/netserver.cpp Sun Jan 21 19:53:25 2007 +0000 @@ -241,27 +241,36 @@ if(lst[0]=="ADDTEAM:") { if(lst.size()<10) return; lst.pop_front(); + // add team ID + static unsigned int netTeamID=1; + lst.insert(1, QString::number(netTeamID++)); + m_teamsCfg.push_back(lst); - m_hwserver->sendOthers(this, msg); + m_hwserver->sendOthers(this, QString("ADDTEAM:")+delimeter+lst.join(QString(delimeter))); return; } if(lst[0]=="REMOVETEAM:") { if(lst.size()<2) return; - removeTeam(lst[1]); + unsigned int netID=removeTeam(lst[1]); + m_hwserver->sendOthers(this, QString("REMOVETEAM:")+delimeter+lst[1]+delimeter+QString::number(netID)); + return; } m_hwserver->sendOthers(this, msg); } -void HWConnectedClient::removeTeam(const QString& tname) +unsigned int HWConnectedClient::removeTeam(const QString& tname) { + unsigned int netID=0; for(QList::iterator it=m_teamsCfg.begin(); it!=m_teamsCfg.end(); ++it) { if((*it)[0]==tname) { + netID=(*it)[1].toUInt(); m_teamsCfg.erase(it); break; } } + return netID; } QList HWConnectedClient::getTeamNames() const diff -r 29bc9c36ad5f -r 4665bfe25470 QTfrontend/netserver.h --- a/QTfrontend/netserver.h Sun Jan 21 19:51:02 2007 +0000 +++ b/QTfrontend/netserver.h Sun Jan 21 19:53:25 2007 +0000 @@ -53,7 +53,7 @@ QString client_nick; void ParseLine(const QByteArray & line); - void removeTeam(const QString& tname); + unsigned int removeTeam(const QString& tname); // returns netID HWNetServer* m_hwserver; QTcpSocket* m_client; diff -r 29bc9c36ad5f -r 4665bfe25470 QTfrontend/newnetclient.cpp --- a/QTfrontend/newnetclient.cpp Sun Jan 21 19:51:02 2007 +0000 +++ b/QTfrontend/newnetclient.cpp Sun Jan 21 19:53:25 2007 +0000 @@ -168,8 +168,8 @@ } if (lst[0] == "REMOVETEAM:") { - if(lst.size()<2) return; - m_pTeamSelWidget->removeNetTeam(HWTeam(lst[1], true)); + if(lst.size()<3) return; + m_pTeamSelWidget->removeNetTeam(HWTeam(lst[1], lst[2].toUInt())); return; } @@ -229,6 +229,12 @@ emit fortsModeChanged(lst[2].toInt() != 0); return; } + if (lst[1] == "HHNUM") { + HWTeam tmptm(lst[2], lst[3].toUInt()); + tmptm.numHedgehogs=lst[4].toUInt(); + emit hhnumChanged(tmptm); + return; + } qDebug() << "unknow config param: " << lst[1]; return; } @@ -265,6 +271,12 @@ game->StartNet(); } +void HWNewNet::onHedgehogsNumChanged(const HWTeam& team) +{ + qDebug() << team.getNetID() << ":" << team.numHedgehogs; + RawSendNet(QString("CONFIG_PARAM%1HHNUM%1%2%1%3%1%4").arg(delimeter).arg(team.TeamName).arg(team.getNetID()).arg(team.numHedgehogs)); +} + void HWNewNet::onSeedChanged(const QString & seed) { RawSendNet(QString("CONFIG_PARAM%1SEED%1%2").arg(delimeter).arg(seed)); diff -r 29bc9c36ad5f -r 4665bfe25470 QTfrontend/newnetclient.h --- a/QTfrontend/newnetclient.h Sun Jan 21 19:51:02 2007 +0000 +++ b/QTfrontend/newnetclient.h Sun Jan 21 19:53:25 2007 +0000 @@ -94,6 +94,7 @@ void initHealthChanged(quint32 health); void turnTimeChanged(quint32 time); void fortsModeChanged(bool value); + void hhnumChanged(const HWTeam&); public slots: void SendNet(const QByteArray & buf); @@ -105,6 +106,7 @@ void onInitHealthChanged(quint32 health); void onTurnTimeChanged(quint32 time); void onFortsModeChanged(bool value); + void onHedgehogsNumChanged(const HWTeam& team); private slots: void ClientRead(); diff -r 29bc9c36ad5f -r 4665bfe25470 QTfrontend/team.cpp --- a/QTfrontend/team.cpp Sun Jan 21 19:51:02 2007 +0000 +++ b/QTfrontend/team.cpp Sun Jan 21 19:53:25 2007 +0000 @@ -29,9 +29,9 @@ #include #include -HWTeam::HWTeam(const QString & teamname, bool isNet) : +HWTeam::HWTeam(const QString & teamname, unsigned int netID) : difficulty(0), - netTeam(isNet) + m_netID(netID) { TeamName = teamname; OldTeamName = TeamName; @@ -45,18 +45,18 @@ } } -HWTeam::HWTeam(const QStringList& strLst) : - netTeam(true) +HWTeam::HWTeam(const QStringList& strLst) { // net teams are configured from QStringList - if(strLst.size()<9) throw HWTeamConstructException(); + if(strLst.size()<10) throw HWTeamConstructException(); TeamName=strLst[0]; - for(int i = 0; i < 8; i++) HHName[i]=strLst[i+1]; + m_netID=strLst[1].toUInt(); + for(int i = 0; i < 8; i++) HHName[i]=strLst[i+2]; } HWTeam::HWTeam(quint8 num) : difficulty(0), - netTeam(false) + m_netID(0) { num %= PREDEFTEAMS_COUNT; TeamName = QApplication::translate("teams", pteams[num].TeamName); @@ -207,7 +207,7 @@ { QStringList sl; sl.push_back("eaddteam"); - if (netTeam) + if (m_netID) sl.push_back("erdriven"); sl.push_back(QString("ecolor %1").arg(teamColor.rgb() & 0xffffff)); sl.push_back("ename team " + TeamName); @@ -218,7 +218,7 @@ sl.push_back(QString("egrave " + Grave)); sl.push_back(QString("efort " + Fort)); - if (!netTeam) + if (!m_netID) for(int i = 0; i < BINDS_NUMBER; i++) sl.push_back(QString("ebind " + binds[i].strbind + " " + binds[i].action)); @@ -229,10 +229,20 @@ return sl; } +bool HWTeam::isNetTeam() const +{ + return m_netID!=0; +} + +unsigned int HWTeam::getNetID() const +{ + return m_netID; +} + bool HWTeam::operator==(const HWTeam& t1) const { - return TeamName==t1.TeamName && netTeam==t1.netTeam; + return TeamName==t1.TeamName && m_netID==t1.m_netID; } bool HWTeam::operator<(const HWTeam& t1) const { - return TeamNameaddTeam(team, true); curPlayingTeams.push_back(team); - QObject::connect(framePlaying->getTeamWidget(team), SIGNAL(teamStatusChanged(HWTeam)), + connect(framePlaying->getTeamWidget(team), SIGNAL(teamStatusChanged(HWTeam)), this, SLOT(netTeamStatusChanged(const HWTeam&))); } else { frameDontPlaying->addTeam(team, false); @@ -41,12 +41,27 @@ } } +void TeamSelWidget::hhNumChanged(const HWTeam& team) +{ + QList::iterator itPlay=std::find(curPlayingTeams.begin(), curPlayingTeams.end(), team); + itPlay->numHedgehogs=team.numHedgehogs; + emit hhogsNumChanged(team); +} + +void TeamSelWidget::changeHHNum(const HWTeam& team) +{ + QList::iterator itPlay=std::find(curPlayingTeams.begin(), curPlayingTeams.end(), team); + itPlay->numHedgehogs=team.numHedgehogs; + + framePlaying->setHHNum(team); +} + void TeamSelWidget::removeNetTeam(const HWTeam& team) { for(;;) { - list::iterator itPlay=std::find(curPlayingTeams.begin(), curPlayingTeams.end(), team); + QList::iterator itPlay=std::find(curPlayingTeams.begin(), curPlayingTeams.end(), team); if(itPlay==curPlayingTeams.end()) break; - if(itPlay->netTeam) { + if(itPlay->isNetTeam()) { QObject::disconnect(framePlaying->getTeamWidget(*itPlay), SIGNAL(teamStatusChanged(HWTeam))); framePlaying->removeTeam(team); curPlayingTeams.erase(itPlay); @@ -57,7 +72,7 @@ void TeamSelWidget::netTeamStatusChanged(const HWTeam& team) { - list::iterator itPlay=std::find(curPlayingTeams.begin(), curPlayingTeams.end(), team); + QList::iterator itPlay=std::find(curPlayingTeams.begin(), curPlayingTeams.end(), team); } @@ -68,8 +83,8 @@ void TeamSelWidget::changeTeamStatus(HWTeam team) { - list::iterator itDontPlay=std::find(curDontPlayingTeams.begin(), curDontPlayingTeams.end(), team); - list::iterator itPlay=std::find(curPlayingTeams.begin(), curPlayingTeams.end(), team); + QList::iterator itDontPlay=std::find(curDontPlayingTeams.begin(), curDontPlayingTeams.end(), team); + QList::iterator itPlay=std::find(curPlayingTeams.begin(), curPlayingTeams.end(), team); bool willBePlaying=itDontPlay!=curDontPlayingTeams.end(); @@ -101,6 +116,8 @@ pRemoveTeams->removeTeam(team); QObject::connect(pAddTeams->getTeamWidget(team), SIGNAL(teamStatusChanged(HWTeam)), this, SLOT(changeTeamStatus(HWTeam))); + if(willBePlaying) connect(framePlaying->getTeamWidget(team), SIGNAL(hhNmChanged(const HWTeam&)), + this, SLOT(hhNumChanged(const HWTeam&))); QSize szh=pAddTeams->sizeHint(); QSize szh1=pRemoveTeams->sizeHint(); @@ -138,7 +155,7 @@ void TeamSelWidget::resetPlayingTeams(const QList& teamslist) { - list::iterator it; + QList::iterator it; for(it=curPlayingTeams.begin(); it!=curPlayingTeams.end(); it++) { framePlaying->removeTeam(*it); } @@ -159,7 +176,7 @@ return std::find(curPlayingTeams.begin(), curPlayingTeams.end(), team)!=curPlayingTeams.end(); } -list TeamSelWidget::getPlayingTeams() const +QList TeamSelWidget::getPlayingTeams() const { return curPlayingTeams; } diff -r 29bc9c36ad5f -r 4665bfe25470 QTfrontend/teamselect.h --- a/QTfrontend/teamselect.h Sun Jan 21 19:51:02 2007 +0000 +++ b/QTfrontend/teamselect.h Sun Jan 21 19:53:25 2007 +0000 @@ -43,20 +43,23 @@ void removeNetTeam(const HWTeam& team); void resetPlayingTeams(const QList& teamslist); bool isPlaying(HWTeam team) const; - list getPlayingTeams() const; + QList getPlayingTeams() const; public slots: void addTeam(HWTeam team); void netTeamStatusChanged(const HWTeam& team); + void changeHHNum(const HWTeam&); signals: void NewTeam(); void teamWillPlay(HWTeam team); void teamNotPlaying(const HWTeam& team); + void hhogsNumChanged(const HWTeam&); private slots: void changeTeamStatus(HWTeam team); void newTeamClicked(); + void hhNumChanged(const HWTeam& team); private: void addScrArea(FrameTeams* pfteams, QColor color, int maxHeight); @@ -66,8 +69,8 @@ QVBoxLayout mainLayout; QPushButton * newTeam; - list curPlayingTeams; - list curDontPlayingTeams; + QList curPlayingTeams; + QList curDontPlayingTeams; }; #endif // _TEAM_SELECT_INCLUDED diff -r 29bc9c36ad5f -r 4665bfe25470 QTfrontend/teamselhelper.cpp --- a/QTfrontend/teamselhelper.cpp Sun Jan 21 19:51:02 2007 +0000 +++ b/QTfrontend/teamselhelper.cpp Sun Jan 21 19:53:25 2007 +0000 @@ -36,7 +36,7 @@ mainLayout.setSpacing(1); mainLayout.setMargin(2); this->setMaximumHeight(35); - QIcon difficultyIcon=team.netTeam ? QIcon(QString(":/res/net.png")) + QIcon difficultyIcon=team.isNetTeam() ? QIcon(QString(":/res/net.png")) : QIcon(QString(":/res/botlevels/%1.png").arg(m_team.difficulty)); QPalette newPalette = palette(); @@ -68,6 +68,7 @@ // hedgehogs num phhoger=new CHedgehogerWidget(this); + connect(phhoger, SIGNAL(hedgehogsNumChanged()), this, SLOT(hhNumChanged())); mainLayout.addWidget(phhoger); } @@ -75,6 +76,17 @@ QObject::connect(bText, SIGNAL(clicked()), this, SLOT(activateTeam())); } +void TeamShowWidget::setHHNum(unsigned int num) +{ + phhoger->setHHNum(num); +} + +void TeamShowWidget::hhNumChanged() +{ + m_team.numHedgehogs=phhoger->getHedgehogsNum(); + emit hhNmChanged(m_team); +} + void TeamShowWidget::activateTeam() { emit teamStatusChanged(m_team); diff -r 29bc9c36ad5f -r 4665bfe25470 QTfrontend/teamselhelper.h --- a/QTfrontend/teamselhelper.h Sun Jan 21 19:51:02 2007 +0000 +++ b/QTfrontend/teamselhelper.h Sun Jan 21 19:53:25 2007 +0000 @@ -53,6 +53,7 @@ public: TeamShowWidget(HWTeam team, bool isPlaying, QWidget * parent); void setPlaying(bool isPlaying); + void setHHNum(unsigned int num); private: TeamShowWidget(); @@ -62,8 +63,12 @@ CHedgehogerWidget* phhoger; QPushButton* colorButt; + private slots: + void hhNumChanged(); + signals: void teamStatusChanged(HWTeam team); + void hhNmChanged(const HWTeam&); }; #endif // _TEAMSEL_HELPER_INCLUDED