# HG changeset patch # User unc0rr # Date 1163536770 0 # Node ID f9adf3c73bed014d0eb80d0fdf6ad942b7aef42e # Parent 85949b945906db4b7a294c8ea6fdd2257de88ba0 'Proto' class to make things easier diff -r 85949b945906 -r f9adf3c73bed QTfrontend/CMakeLists.txt --- a/QTfrontend/CMakeLists.txt Mon Nov 13 20:13:42 2006 +0000 +++ b/QTfrontend/CMakeLists.txt Tue Nov 14 20:39:30 2006 +0000 @@ -30,7 +30,8 @@ hwmap.cpp mapContainer.cpp tcpBase.cpp - about.cpp) + about.cpp + proto.cpp) if (WIN32) set(hwfr_src ${hwfr_src} res/hedgewars.rc) @@ -56,7 +57,8 @@ mapContainer.h tcpBase.h about.h - KB.h) + KB.h + proto.h) set(hwfr_rez diff -r 85949b945906 -r f9adf3c73bed QTfrontend/game.cpp --- a/QTfrontend/game.cpp Mon Nov 13 20:13:42 2006 +0000 +++ b/QTfrontend/game.cpp Tue Nov 14 20:39:30 2006 +0000 @@ -30,6 +30,7 @@ #include "gameuiconfig.h" #include "gamecfgwidget.h" #include "KB.h" +#include "proto.h" HWGame::HWGame(GameUIConfig * config, GameCFGWidget * gamecfg) : TCPBase(true) @@ -60,12 +61,14 @@ for (int i = 0; i < TeamCount; i++) { - SendIPC("eaddteam"); - LocalCFG(teams[i]); - QColor clr=m_teamsParams[teams[i]].teamColor; - SendIPC(QString("ecolor %1").arg(clr.rgb()&0xFFFFFF).toAscii()); - for (int t = 0; t < m_teamsParams[teams[i]].numHedgehogs; t++) - SendIPC(QString("eadd hh%1 0").arg(t).toAscii()); + HWTeam team(teams[i]); + team.LoadFromFile(); + + QColor clr = m_teamsParams[teams[i]].teamColor; + QByteArray buf; + QStringList sl = team.TeamGameConfig(clr.rgb()&0xFFFFFF, m_teamsParams[teams[i]].numHedgehogs); + HWProto::addStringListToBuffer(buf, sl); + RawSendIPC(buf); } } @@ -75,20 +78,15 @@ SendIPC(QString("etheme %1").arg(config->GetRandomTheme()).toAscii()); SendIPC("TL"); SendIPC(QString("e$gmflags %1").arg(gamecfg->getGameFlags()).toAscii()); - SendIPC("eaddteam"); - LocalCFG(0); - SendIPC("ecolor 65535"); - SendIPC("eadd hh0 0"); - SendIPC("eadd hh1 0"); - SendIPC("eadd hh2 0"); - SendIPC("eadd hh3 0"); - SendIPC("eaddteam"); - LocalCFG(2); - SendIPC("ecolor 16776960"); - SendIPC("eadd hh0 5"); - SendIPC("eadd hh1 4"); - SendIPC("eadd hh2 4"); - SendIPC("eadd hh3 3"); + + QByteArray teamscfg; + HWTeam team1(0); + team1.difficulty = 0; + HWProto::addStringListToBuffer(teamscfg, team1.TeamGameConfig(65535, 4)); + + HWTeam team2(2); + team2.difficulty = 4; + RawSendIPC(HWProto::addStringListToBuffer(teamscfg, team2.TeamGameConfig(16776960, 4))); } void HWGame::ParseMessage(const QByteArray & msg) @@ -261,7 +259,7 @@ { gameType = gtLocal; if (TeamCount < 2) return; - seed = gamecfg->getCurrentSeed();//QUuid::createUuid().toString(); + seed = gamecfg->getCurrentSeed(); demo = new QByteArray; Start(); } @@ -269,7 +267,7 @@ void HWGame::StartQuick() { gameType = gtQLocal; - seed = gamecfg->getCurrentSeed();//QUuid::createUuid().toString(); + seed = gamecfg->getCurrentSeed(); demo = new QByteArray; Start(); } @@ -277,21 +275,8 @@ void HWGame::LocalCFG(const QString & teamname) { + QByteArray teamcfg; HWTeam team(teamname); - if (!team.LoadFromFile()) { - QMessageBox::critical(0, - "Error", - QString("Cannot load team config ""%1""").arg(teamname), - QMessageBox::Ok, - QMessageBox::NoButton, - QMessageBox::NoButton); - return; - } - RawSendIPC(team.IPCTeamInfo()); + RawSendIPC(HWProto::addStringListToBuffer(teamcfg, team.TeamGameConfig(16776960, 4))); } -void HWGame::LocalCFG(quint8 num) -{ - HWTeam team(num); - RawSendIPC(team.IPCTeamInfo()); -} diff -r 85949b945906 -r f9adf3c73bed QTfrontend/game.h --- a/QTfrontend/game.h Mon Nov 13 20:13:42 2006 +0000 +++ b/QTfrontend/game.h Tue Nov 14 20:39:30 2006 +0000 @@ -53,7 +53,6 @@ public slots: void FromNet(const QByteArray & msg); void LocalCFG(const QString & teamname); - void LocalCFG(quint8 num); private: enum GameType { diff -r 85949b945906 -r f9adf3c73bed QTfrontend/hedgewars.pro --- a/QTfrontend/hedgewars.pro Mon Nov 13 20:13:42 2006 +0000 +++ b/QTfrontend/hedgewars.pro Tue Nov 14 20:39:30 2006 +0000 @@ -31,7 +31,8 @@ mapContainer.h \ tcpBase.h \ about.h \ - KB.h + KB.h \ + proto.h SOURCES += game.cpp \ main.cpp \ @@ -51,7 +52,8 @@ hwmap.cpp \ mapContainer.cpp \ tcpBase.cpp \ - about.cpp + about.cpp \ + proto.cpp TRANSLATIONS += translations/hedgewars_ru.ts diff -r 85949b945906 -r f9adf3c73bed QTfrontend/netclient.cpp --- a/QTfrontend/netclient.cpp Mon Nov 13 20:13:42 2006 +0000 +++ b/QTfrontend/netclient.cpp Tue Nov 14 20:39:30 2006 +0000 @@ -21,6 +21,7 @@ #include "netclient.h" #include "game.h" #include "gameuiconfig.h" +#include "proto.h" HWNet::HWNet(GameUIConfig * config) : QObject() @@ -341,18 +342,11 @@ if (configasks == playerscnt) { quint32 color = 65535; - #define ADD(a) { \ - QByteArray strmsg; \ - strmsg.append(a); \ - quint8 sz = strmsg.size(); \ - cache.append(QByteArray((char *)&sz, 1)); \ - cache.append(strmsg); \ - } { QByteArray cache; - ADD("eseed " + seed); - ADD("e$gmflags 0"); - ADD(QString("etheme %1").arg(config->GetRandomTheme())); + HWProto::addStringToBuffer(cache, "eseed " + seed); + HWProto::addStringToBuffer(cache, "e$gmflags 0"); + HWProto::addStringToBuffer(cache, QString("etheme %1").arg(config->GetRandomTheme())); QString _msg = MAGIC_CHAR MAGIC_CHAR + QString(cache.toBase64()); RawSendNet(QString("PRIVMSG %1 :%2").arg(channel, _msg)); hwp_chanmsg(mynick, _msg); @@ -364,13 +358,12 @@ RawSendNet(QString("PRIVMSG %1 :%2").arg(channel, msg)); hwp_chanmsg(mynick, msg); QByteArray cache; - ADD(QString("ecolor %1").arg(color)); - ADD("eadd hh0 0"); - ADD("eadd hh1 0"); - ADD("eadd hh2 0"); - ADD("eadd hh3 0"); - ADD("eadd hh4 0"); - #undef ADD + HWProto::addStringToBuffer(cache, QString("ecolor %1").arg(color)); + HWProto::addStringToBuffer(cache, "eadd hh0 0"); + HWProto::addStringToBuffer(cache, "eadd hh1 0"); + HWProto::addStringToBuffer(cache, "eadd hh2 0"); + HWProto::addStringToBuffer(cache, "eadd hh3 0"); + HWProto::addStringToBuffer(cache, "eadd hh4 0"); QString _msg = MAGIC_CHAR MAGIC_CHAR + QString(cache.toBase64()); RawSendNet(QString("PRIVMSG %1 :%2").arg(channel, _msg)); hwp_chanmsg(mynick, _msg); diff -r 85949b945906 -r f9adf3c73bed QTfrontend/proto.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QTfrontend/proto.cpp Tue Nov 14 20:39:30 2006 +0000 @@ -0,0 +1,40 @@ +/* + * Hedgewars, a worms-like game + * Copyright (c) 2006 Andrey Korotaev + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#include "proto.h" + +HWProto::HWProto() +{ + +} + +QByteArray & HWProto::addStringToBuffer(QByteArray & buf, const QString & string) +{ + QByteArray strmsg = string.toUtf8(); + quint8 sz = strmsg.size(); + buf.append(QByteArray((char *)&sz, 1)); + buf.append(strmsg); + return buf; +} + +QByteArray & HWProto::addStringListToBuffer(QByteArray & buf, const QStringList & strList) +{ + for (int i = 0; i < strList.size(); i++) + addStringToBuffer(buf, strList[i]); + return buf; +} diff -r 85949b945906 -r f9adf3c73bed QTfrontend/proto.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QTfrontend/proto.h Tue Nov 14 20:39:30 2006 +0000 @@ -0,0 +1,37 @@ +/* + * Hedgewars, a worms-like game + * Copyright (c) 2006 Andrey Korotaev + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#ifndef _PROTO_H +#define _PROTO_H + +#include +#include +#include + + +class HWProto : public QObject +{ + Q_OBJECT + +public: + HWProto(); + static QByteArray & addStringToBuffer(QByteArray & buf, const QString & string); + static QByteArray & addStringListToBuffer(QByteArray & buf, const QStringList & strList); +}; + +#endif // _PROTO_H diff -r 85949b945906 -r f9adf3c73bed QTfrontend/team.cpp --- a/QTfrontend/team.cpp Mon Nov 13 20:13:42 2006 +0000 +++ b/QTfrontend/team.cpp Tue Nov 14 20:39:30 2006 +0000 @@ -111,7 +111,7 @@ binds[i].strbind = str; break; } - } else + } else if (str.startsWith("difficulty ")) { str.remove(0, 11); @@ -181,27 +181,24 @@ } } -QByteArray HWTeam::IPCTeamInfo() const +QStringList HWTeam::TeamGameConfig(quint32 color, int hedgehogs) const { - QByteArray buf; - #define ADD(a) { \ - QByteArray strmsg = a.toUtf8(); \ - quint8 sz = strmsg.size(); \ - buf.append(QByteArray((char *)&sz, 1)); \ - buf.append(strmsg); \ - } - - ADD(QString("ename team " + TeamName)); + QStringList sl; + sl.push_back("eaddteam"); + sl.push_back(QString("ecolor %1").arg(color)); + sl.push_back("ename team " + TeamName); for (int i = 0; i < 8; i++) - ADD(QString("ename hh%1 ").arg(i).append(HHName[i])); - ADD(QString("egrave " + Grave)); - ADD(QString("efort " + Fort)); + sl.push_back(QString("ename hh%1 ").arg(i).append(HHName[i])); + sl.push_back(QString("egrave " + Grave)); + sl.push_back(QString("efort " + Fort)); for(int i = 0; i < BINDS_NUMBER; i++) { - ADD(QString("ebind " + binds[i].strbind + " " + binds[i].action)); + sl.push_back(QString("ebind " + binds[i].strbind + " " + binds[i].action)); } - #undef ADD - return buf; + for (int t = 0; t < hedgehogs; t++) + sl.push_back(QString("eadd hh%1 %2") + .arg(QString::number(t), QString::number(difficulty))); + return sl; } bool HWTeam::operator==(const HWTeam& t1) const { diff -r 85949b945906 -r f9adf3c73bed QTfrontend/team.h --- a/QTfrontend/team.h Mon Nov 13 20:13:42 2006 +0000 +++ b/QTfrontend/team.h Tue Nov 14 20:39:30 2006 +0000 @@ -43,7 +43,7 @@ bool SaveToFile(); void SetToPage(HWForm * hwform); void GetFromPage(HWForm * hwform); - QByteArray IPCTeamInfo() const; + QStringList HWTeam::TeamGameConfig(quint32 color, int hedgehogs) const; bool operator==(const HWTeam& t1) const; bool operator<(const HWTeam& t1) const;