QTfrontend/game.cpp
changeset 7629 d624030abf24
parent 7628 bc7b1d228a2c
child 7665 e556b44f5bd8
equal deleted inserted replaced
7628:bc7b1d228a2c 7629:d624030abf24
    19 #include <QString>
    19 #include <QString>
    20 #include <QByteArray>
    20 #include <QByteArray>
    21 #include <QUuid>
    21 #include <QUuid>
    22 #include <QColor>
    22 #include <QColor>
    23 #include <QStringListModel>
    23 #include <QStringListModel>
       
    24 #include <QMessageBox>
       
    25 #include <QTextStream>
    24 
    26 
    25 #include "game.h"
    27 #include "game.h"
    26 #include "hwconsts.h"
    28 #include "hwconsts.h"
    27 #include "gameuiconfig.h"
    29 #include "gameuiconfig.h"
    28 #include "gamecfgwidget.h"
    30 #include "gamecfgwidget.h"
    29 #include "teamselect.h"
    31 #include "teamselect.h"
    30 #include "KB.h"
    32 #include "KB.h"
    31 #include "proto.h"
    33 #include "proto.h"
       
    34 #include "campaign.h"
    32 
    35 
    33 #include <QTextStream>
    36 #include <QTextStream>
    34 
    37 #include "ThemeModel.h"
    35 QString training, campaign; // TODO: Cleaner solution?
    38 
       
    39 QString training, campaign, campaignScript, campaignTeam; // TODO: Cleaner solution?
    36 
    40 
    37 HWGame::HWGame(GameUIConfig * config, GameCFGWidget * gamecfg, QString ammo, TeamSelWidget* pTeamSelWidget) :
    41 HWGame::HWGame(GameUIConfig * config, GameCFGWidget * gamecfg, QString ammo, TeamSelWidget* pTeamSelWidget) :
    38     TCPBase(true),
    42     TCPBase(true),
    39     ammostr(ammo),
    43     ammostr(ammo),
    40     m_pTeamSelWidget(pTeamSelWidget)
    44     m_pTeamSelWidget(pTeamSelWidget)
    96         {
   100         {
    97             HWProto::addStringToBuffer(buf, QString("eammloadt %1").arg(ammostr.mid(0, cAmmoNumber)));
   101             HWProto::addStringToBuffer(buf, QString("eammloadt %1").arg(ammostr.mid(0, cAmmoNumber)));
    98             HWProto::addStringToBuffer(buf, QString("eammprob %1").arg(ammostr.mid(cAmmoNumber, cAmmoNumber)));
   102             HWProto::addStringToBuffer(buf, QString("eammprob %1").arg(ammostr.mid(cAmmoNumber, cAmmoNumber)));
    99             HWProto::addStringToBuffer(buf, QString("eammdelay %1").arg(ammostr.mid(2 * cAmmoNumber, cAmmoNumber)));
   103             HWProto::addStringToBuffer(buf, QString("eammdelay %1").arg(ammostr.mid(2 * cAmmoNumber, cAmmoNumber)));
   100             HWProto::addStringToBuffer(buf, QString("eammreinf %1").arg(ammostr.mid(3 * cAmmoNumber, cAmmoNumber)));
   104             HWProto::addStringToBuffer(buf, QString("eammreinf %1").arg(ammostr.mid(3 * cAmmoNumber, cAmmoNumber)));
   101             if(!gamecfg->schemeData(21).toBool()) HWProto::addStringToBuffer(buf, QString("eammstore"));
   105             if(gamecfg->schemeData(15).toBool() || !gamecfg->schemeData(21).toBool()) HWProto::addStringToBuffer(buf, QString("eammstore"));
   102             HWProto::addStringListToBuffer(buf,
   106             HWProto::addStringListToBuffer(buf,
   103                                            team.teamGameConfig(gamecfg->getInitHealth()));
   107                                            team.teamGameConfig(gamecfg->getInitHealth()));
   104             ;
   108             ;
   105         }
   109         }
   106     }
   110     }
   163 {
   167 {
   164     QByteArray campaigncfg;
   168     QByteArray campaigncfg;
   165     HWProto::addStringToBuffer(campaigncfg, "TL");
   169     HWProto::addStringToBuffer(campaigncfg, "TL");
   166     HWProto::addStringToBuffer(campaigncfg, "eseed " + QUuid::createUuid().toString());
   170     HWProto::addStringToBuffer(campaigncfg, "eseed " + QUuid::createUuid().toString());
   167 
   171 
   168     HWProto::addStringToBuffer(campaigncfg, "escript " + campaign);
   172     HWProto::addStringToBuffer(campaigncfg, "escript " + campaignScript);
   169 
   173 
   170     RawSendIPC(campaigncfg);
   174     RawSendIPC(campaigncfg);
   171 }
   175 }
   172 
   176 
   173 void HWGame::SendNetConfig()
   177 void HWGame::SendNetConfig()
   273         case 'b':
   277         case 'b':
   274         {
   278         {
   275             int size = msg.size();
   279             int size = msg.size();
   276             QString msgbody = QString::fromUtf8(msg.mid(2).left(size - 4));
   280             QString msgbody = QString::fromUtf8(msg.mid(2).left(size - 4));
   277             emit SendTeamMessage(msgbody);
   281             emit SendTeamMessage(msgbody);
       
   282             break;
       
   283         }
       
   284         case 'V':
       
   285         {
       
   286             if (msg.at(2) == '?')
       
   287                 sendCampaignVar(msg.right(msg.size() - 3));
       
   288             else if (msg.at(2) == '!')
       
   289                 writeCampaignVar(msg.right(msg.size() - 3));
   278             break;
   290             break;
   279         }
   291         }
   280         default:
   292         default:
   281         {
   293         {
   282             if (gameType == gtNet && !netSuspend)
   294             if (gameType == gtNet && !netSuspend)
   389     demo.clear();
   401     demo.clear();
   390     Start();
   402     Start();
   391     SetGameState(gsStarted);
   403     SetGameState(gsStarted);
   392 }
   404 }
   393 
   405 
   394 void HWGame::StartCampaign(const QString & file)
   406 void HWGame::StartCampaign(const QString & camp, const QString & campScript, const QString & campTeam)
   395 {
   407 {
   396     gameType = gtCampaign;
   408     gameType = gtCampaign;
   397     campaign = "Missions/Campaign/" + file + ".lua";
   409     campaign = camp;
       
   410     campaignScript = "Missions/Campaign/" + camp + "/" + campScript;
       
   411     campaignTeam = campTeam;
   398     demo.clear();
   412     demo.clear();
   399     Start();
   413     Start();
   400     SetGameState(gsStarted);
   414     SetGameState(gsStarted);
   401 }
   415 }
   402 
   416 
   403 void HWGame::SetGameState(GameState state)
   417 void HWGame::SetGameState(GameState state)
   404 {
   418 {
   405     gameState = state;
   419     gameState = state;
   406     emit GameStateChanged(state);
   420     emit GameStateChanged(state);
       
   421     if (gameType == gtCampaign)
       
   422     {
       
   423       emit CampStateChanged(1);
       
   424     }
   407 }
   425 }
   408 
   426 
   409 void HWGame::abort()
   427 void HWGame::abort()
   410 {
   428 {
   411     QByteArray buf;
   429     QByteArray buf;
   412     HWProto::addStringToBuffer(buf, QString("efinish"));
   430     HWProto::addStringToBuffer(buf, QString("efinish"));
   413     RawSendIPC(buf);
   431     RawSendIPC(buf);
   414 }
   432 }
       
   433 
       
   434 void HWGame::sendCampaignVar(QByteArray varToSend)
       
   435 {
       
   436     QString varToFind(varToSend);
       
   437     QSettings teamfile(cfgdir->absolutePath() + "/Teams/" + campaignTeam + ".hwt", QSettings::IniFormat, 0);
       
   438     teamfile.setIniCodec("UTF-8");
       
   439     QString varValue = teamfile.value("Campaign " + campaign + "/" + varToFind, "").toString();
       
   440     QByteArray command;
       
   441     HWProto::addStringToBuffer(command, "V." + varValue);
       
   442     RawSendIPC(command);
       
   443 }
       
   444 
       
   445 void HWGame::writeCampaignVar(QByteArray varVal)
       
   446 {
       
   447     QString varToWrite("");
       
   448     QString varValue("");
       
   449     unsigned int i = 0;
       
   450     while (i < varVal.size() && varVal.at(i) != ' ')
       
   451     {
       
   452       varToWrite.append(varVal.at(i));
       
   453       i++;
       
   454     }
       
   455     i++;
       
   456     while (i < varVal.size() && varVal.at(i) != '\0')
       
   457     {
       
   458       varValue.append(varVal.at(i));
       
   459       i++;
       
   460     }
       
   461 
       
   462     QSettings teamfile(cfgdir->absolutePath() + "/Teams/" + campaignTeam + ".hwt", QSettings::IniFormat, 0);
       
   463     teamfile.setIniCodec("UTF-8");
       
   464     teamfile.setValue("Campaign " + campaign + "/" + varToWrite, varValue);
       
   465 }
       
   466