QTfrontend/game.cpp
branchflibqtfrontend
changeset 8092 08960209db8c
parent 8070 66bc20d089fc
child 8100 0e6fadf81a2c
equal deleted inserted replaced
8091:e0a76056a633 8092:08960209db8c
    35 #include "ThemeModel.h"
    35 #include "ThemeModel.h"
    36 
    36 
    37 QString training, campaign, campaignScript, campaignTeam; // TODO: Cleaner solution?
    37 QString training, campaign, campaignScript, campaignTeam; // TODO: Cleaner solution?
    38 
    38 
    39 HWGame::HWGame(GameUIConfig * config, GameCFGWidget * gamecfg, QString ammo, TeamSelWidget* pTeamSelWidget) :
    39 HWGame::HWGame(GameUIConfig * config, GameCFGWidget * gamecfg, QString ammo, TeamSelWidget* pTeamSelWidget) :
    40     TCPBase(true, 0),
    40     TCPBase(0),
    41     ammostr(ammo),
    41     ammostr(ammo),
    42     m_pTeamSelWidget(pTeamSelWidget)
    42     m_pTeamSelWidget(pTeamSelWidget)
    43 {
    43 {
    44     this->config = config;
    44     this->config = config;
    45     this->gamecfg = gamecfg;
    45     this->gamecfg = gamecfg;
    50 {
    50 {
    51     SetGameState(gsDestroyed);
    51     SetGameState(gsDestroyed);
    52 }
    52 }
    53 
    53 
    54 void HWGame::onClientDisconnect()
    54 void HWGame::onClientDisconnect()
    55 {
    55 {/*
    56     switch (gameType)
    56     switch (gameType)
    57     {
    57     {
    58         case gtDemo:
    58         case gtDemo:
    59             // for video recording we need demo anyway 
    59             // for video recording we need demo anyway 
    60             emit HaveRecord(rtNeither, demo);
    60             emit HaveRecord(rtNeither, demo);
    67                 emit HaveRecord(rtSave, demo);
    67                 emit HaveRecord(rtSave, demo);
    68             else if (gameState == gsFinished)
    68             else if (gameState == gsFinished)
    69                 emit HaveRecord(rtDemo, demo);
    69                 emit HaveRecord(rtDemo, demo);
    70             else
    70             else
    71                 emit HaveRecord(rtNeither, demo);
    71                 emit HaveRecord(rtNeither, demo);
    72     }
    72     }*/
    73     SetGameState(gsStopped);
    73     SetGameState(gsStopped);
    74 }
    74 }
    75 
    75 
    76 void HWGame::commonConfig()
    76 void HWGame::commonConfig()
    77 {
    77 {
   104             HWProto::addStringListToBuffer(buf,
   104             HWProto::addStringListToBuffer(buf,
   105                                            team.teamGameConfig(gamecfg->getInitHealth()));
   105                                            team.teamGameConfig(gamecfg->getInitHealth()));
   106             ;
   106             ;
   107         }
   107         }
   108     }
   108     }
   109     RawSendIPC(buf);
   109     //RawSendIPC(buf);
   110 }
   110 }
   111 
   111 
   112 void HWGame::SendConfig()
   112 void HWGame::SendConfig()
   113 {
   113 {
   114     commonConfig();
   114     commonConfig();
   148     HWProto::addStringToBuffer(teamscfg, QString("eammprob %1").arg(cDefaultAmmoStore->mid(cAmmoNumber, cAmmoNumber)));
   148     HWProto::addStringToBuffer(teamscfg, QString("eammprob %1").arg(cDefaultAmmoStore->mid(cAmmoNumber, cAmmoNumber)));
   149     HWProto::addStringToBuffer(teamscfg, QString("eammdelay %1").arg(cDefaultAmmoStore->mid(2 * cAmmoNumber, cAmmoNumber)));
   149     HWProto::addStringToBuffer(teamscfg, QString("eammdelay %1").arg(cDefaultAmmoStore->mid(2 * cAmmoNumber, cAmmoNumber)));
   150     HWProto::addStringToBuffer(teamscfg, QString("eammreinf %1").arg(cDefaultAmmoStore->mid(3 * cAmmoNumber, cAmmoNumber)));
   150     HWProto::addStringToBuffer(teamscfg, QString("eammreinf %1").arg(cDefaultAmmoStore->mid(3 * cAmmoNumber, cAmmoNumber)));
   151     HWProto::addStringToBuffer(teamscfg, QString("eammstore"));
   151     HWProto::addStringToBuffer(teamscfg, QString("eammstore"));
   152     HWProto::addStringToBuffer(teamscfg, QString("eammstore"));
   152     HWProto::addStringToBuffer(teamscfg, QString("eammstore"));
   153     RawSendIPC(teamscfg);
   153     //RawSendIPC(teamscfg);
   154 }
   154 }
   155 
   155 
   156 void HWGame::SendTrainingConfig()
   156 void HWGame::SendTrainingConfig()
   157 {
   157 {
   158     QByteArray traincfg;
   158     QByteArray traincfg;
   159     HWProto::addStringToBuffer(traincfg, "TL");
   159     HWProto::addStringToBuffer(traincfg, "TL");
   160     HWProto::addStringToBuffer(traincfg, "eseed " + QUuid::createUuid().toString());
   160     HWProto::addStringToBuffer(traincfg, "eseed " + QUuid::createUuid().toString());
   161     HWProto::addStringToBuffer(traincfg, "escript " + training);
   161     HWProto::addStringToBuffer(traincfg, "escript " + training);
   162 
   162 
   163     RawSendIPC(traincfg);
   163    //RawSendIPC(traincfg);
   164 }
   164 }
   165 
   165 
   166 void HWGame::SendCampaignConfig()
   166 void HWGame::SendCampaignConfig()
   167 {
   167 {
   168     QByteArray campaigncfg;
   168     QByteArray campaigncfg;
   169     HWProto::addStringToBuffer(campaigncfg, "TL");
   169     HWProto::addStringToBuffer(campaigncfg, "TL");
   170     HWProto::addStringToBuffer(campaigncfg, "eseed " + QUuid::createUuid().toString());
   170     HWProto::addStringToBuffer(campaigncfg, "eseed " + QUuid::createUuid().toString());
   171 
   171 
   172     HWProto::addStringToBuffer(campaigncfg, "escript " + campaignScript);
   172     HWProto::addStringToBuffer(campaigncfg, "escript " + campaignScript);
   173 
   173 
   174     RawSendIPC(campaigncfg);
   174    // RawSendIPC(campaigncfg);
   175 }
   175 }
   176 
   176 
   177 void HWGame::SendNetConfig()
   177 void HWGame::SendNetConfig()
   178 {
   178 {
   179     commonConfig();
   179     commonConfig();
   183 {
   183 {
   184     switch(msg.at(1))
   184     switch(msg.at(1))
   185     {
   185     {
   186         case '?':
   186         case '?':
   187         {
   187         {
   188             SendIPC("!");
   188             //SendIPC("!");
   189             break;
   189             break;
   190         }
   190         }
   191         case 'C':
   191         case 'C':
   192         {
   192         {
   193             switch (gameType)
   193             switch (gameType)
   254             int size = msg.size();
   254             int size = msg.size();
   255             QString msgbody = QString::fromUtf8(msg.mid(2).left(size - 4));
   255             QString msgbody = QString::fromUtf8(msg.mid(2).left(size - 4));
   256             emit SendChat(msgbody);
   256             emit SendChat(msgbody);
   257             QByteArray buf;
   257             QByteArray buf;
   258             HWProto::addStringToBuffer(buf, "s" + HWProto::formatChatMsg(config->netNick(), msgbody) + "\x20\x20");
   258             HWProto::addStringToBuffer(buf, "s" + HWProto::formatChatMsg(config->netNick(), msgbody) + "\x20\x20");
   259             demo.append(buf);
   259             //demo.append(buf);
   260             break;
   260             break;
   261         }
   261         }
   262         case 'b':
   262         case 'b':
   263         {
   263         {
   264             int size = msg.size();
   264             int size = msg.size();
   278         {
   278         {
   279             if (gameType == gtNet && !netSuspend)
   279             if (gameType == gtNet && !netSuspend)
   280             {
   280             {
   281                 emit SendNet(msg);
   281                 emit SendNet(msg);
   282             }
   282             }
   283             demo.append(msg);
   283             //demo.append(msg);
   284         }
   284         }
   285     }
   285     }
   286 }
   286 }
   287 
   287 
   288 void HWGame::FromNet(const QByteArray & msg)
   288 void HWGame::FromNet(const QByteArray & msg)
   289 {
   289 {
   290     RawSendIPC(msg);
   290     //RawSendIPC(msg);
   291 }
   291 }
   292 
   292 
   293 void HWGame::FromNetChat(const QString & msg)
   293 void HWGame::FromNetChat(const QString & msg)
   294 {
   294 {
   295     QByteArray buf;
   295     QByteArray buf;
   296     HWProto::addStringToBuffer(buf, 's' + msg + "\x20\x20");
   296     HWProto::addStringToBuffer(buf, 's' + msg + "\x20\x20");
   297     RawSendIPC(buf);
   297     //RawSendIPC(buf);
   298 }
   298 }
   299 
   299 
   300 void HWGame::onClientRead()
   300 void HWGame::onClientRead()
   301 {
   301 {/*
   302     quint8 msglen;
   302     quint8 msglen;
   303     quint32 bufsize;
   303     quint32 bufsize;
   304     while (!readbuffer.isEmpty() && ((bufsize = readbuffer.size()) > 0) &&
   304     while (!readbuffer.isEmpty() && ((bufsize = readbuffer.size()) > 0) &&
   305             ((msglen = readbuffer.data()[0]) < bufsize))
   305             ((msglen = readbuffer.data()[0]) < bufsize))
   306     {
   306     {
   307         QByteArray msg = readbuffer.left(msglen + 1);
   307         QByteArray msg = readbuffer.left(msglen + 1);
   308         readbuffer.remove(0, msglen + 1);
   308         readbuffer.remove(0, msglen + 1);
   309         ParseMessage(msg);
   309         ParseMessage(msg);
   310     }
   310     }*/
   311 }
   311 }
   312 
   312 
   313 QStringList HWGame::getArguments()
   313 QStringList HWGame::getArguments()
   314 {
   314 {
   315     QStringList arguments;
   315     QStringList arguments;
   316     QRect resolution = config->vid_Resolution();
   316     QRect resolution = config->vid_Resolution();
   317     arguments << cfgdir->absolutePath();
   317     arguments << cfgdir->absolutePath();
   318     arguments << QString::number(resolution.width());
   318     arguments << QString::number(resolution.width());
   319     arguments << QString::number(resolution.height());
   319     arguments << QString::number(resolution.height());
   320     arguments << QString::number(config->bitDepth()); // bpp
   320     arguments << QString::number(config->bitDepth()); // bpp
   321     arguments << QString("%1").arg(ipc_port);
   321     //arguments << QString("%1").arg(ipc_port);
   322     arguments << (config->vid_Fullscreen() ? "1" : "0");
   322     arguments << (config->vid_Fullscreen() ? "1" : "0");
   323     arguments << (config->isSoundEnabled() ? "1" : "0");
   323     arguments << (config->isSoundEnabled() ? "1" : "0");
   324     arguments << (config->isMusicEnabled() ? "1" : "0");
   324     arguments << (config->isMusicEnabled() ? "1" : "0");
   325     arguments << QString::number(config->volume()); // sound volume
   325     arguments << QString::number(config->volume()); // sound volume
   326     arguments << QString::number(config->timerInterval());
   326     arguments << QString::number(config->timerInterval());
   344         emit ErrorMessage(tr("Cannot open demofile %1").arg(demofilename));
   344         emit ErrorMessage(tr("Cannot open demofile %1").arg(demofilename));
   345         return ;
   345         return ;
   346     }
   346     }
   347 
   347 
   348     // read demo
   348     // read demo
   349     toSendBuf = demofile.readAll();
   349     //toSendBuf = demofile.readAll();
   350 
   350 
   351     // run engine
   351     // run engine
   352     demo.clear();
   352     //demo.clear();
   353     Start(false);
   353     start(false);
   354     SetGameState(gsStarted);
   354     SetGameState(gsStarted);
   355 }
   355 }
   356 
   356 
   357 void HWGame::StartNet()
   357 void HWGame::StartNet()
   358 {
   358 {
   359     gameType = gtNet;
   359     gameType = gtNet;
   360     demo.clear();
   360     //demo.clear();
   361     Start(false);
   361     start(false);
   362     SetGameState(gsStarted);
   362     SetGameState(gsStarted);
   363 }
   363 }
   364 
   364 
   365 void HWGame::StartLocal()
   365 void HWGame::StartLocal()
   366 {
   366 {
   367     gameType = gtLocal;
   367     gameType = gtLocal;
   368     demo.clear();
   368     //demo.clear();
   369     Start(false);
   369     start(false);
   370     SetGameState(gsStarted);
   370     SetGameState(gsStarted);
   371 }
   371 }
   372 
   372 
   373 void HWGame::StartQuick()
   373 void HWGame::StartQuick()
   374 {
   374 {
   375     gameType = gtQLocal;
   375     gameType = gtQLocal;
   376     demo.clear();
   376     //demo.clear();
   377     Start(false);
   377     start(false);
   378     SetGameState(gsStarted);
   378     SetGameState(gsStarted);
   379 }
   379 }
   380 
   380 
   381 void HWGame::StartTraining(const QString & file)
   381 void HWGame::StartTraining(const QString & file)
   382 {
   382 {
   383     gameType = gtTraining;
   383     gameType = gtTraining;
   384     training = "Missions/Training/" + file + ".lua";
   384     training = "Missions/Training/" + file + ".lua";
   385     demo.clear();
   385     //demo.clear();
   386     Start(false);
   386     start(false);
   387     SetGameState(gsStarted);
   387     SetGameState(gsStarted);
   388 }
   388 }
   389 
   389 
   390 void HWGame::StartCampaign(const QString & camp, const QString & campScript, const QString & campTeam)
   390 void HWGame::StartCampaign(const QString & camp, const QString & campScript, const QString & campTeam)
   391 {
   391 {
   392     gameType = gtCampaign;
   392     gameType = gtCampaign;
   393     campaign = camp;
   393     campaign = camp;
   394     campaignScript = "Missions/Campaign/" + camp + "/" + campScript;
   394     campaignScript = "Missions/Campaign/" + camp + "/" + campScript;
   395     campaignTeam = campTeam;
   395     campaignTeam = campTeam;
   396     demo.clear();
   396     //demo.clear();
   397     Start(false);
   397     start(false);
   398     SetGameState(gsStarted);
   398     SetGameState(gsStarted);
   399 }
   399 }
   400 
   400 
   401 void HWGame::SetGameState(GameState state)
   401 void HWGame::SetGameState(GameState state)
   402 {
   402 {
   410 
   410 
   411 void HWGame::abort()
   411 void HWGame::abort()
   412 {
   412 {
   413     QByteArray buf;
   413     QByteArray buf;
   414     HWProto::addStringToBuffer(buf, QString("efinish"));
   414     HWProto::addStringToBuffer(buf, QString("efinish"));
   415     RawSendIPC(buf);
   415     //RawSendIPC(buf);
   416 }
   416 }
   417 
   417 
   418 void HWGame::sendCampaignVar(const QByteArray &varToSend)
   418 void HWGame::sendCampaignVar(const QByteArray &varToSend)
   419 {
   419 {
   420     QString varToFind(varToSend);
   420     QString varToFind(varToSend);
   421     QSettings teamfile(cfgdir->absolutePath() + "/Teams/" + campaignTeam + ".hwt", QSettings::IniFormat, 0);
   421     QSettings teamfile(cfgdir->absolutePath() + "/Teams/" + campaignTeam + ".hwt", QSettings::IniFormat, 0);
   422     teamfile.setIniCodec("UTF-8");
   422     teamfile.setIniCodec("UTF-8");
   423     QString varValue = teamfile.value("Campaign " + campaign + "/" + varToFind, "").toString();
   423     QString varValue = teamfile.value("Campaign " + campaign + "/" + varToFind, "").toString();
   424     QByteArray command;
   424     QByteArray command;
   425     HWProto::addStringToBuffer(command, "V." + varValue);
   425     HWProto::addStringToBuffer(command, "V." + varValue);
   426     RawSendIPC(command);
   426     //RawSendIPC(command);
   427 }
   427 }
   428 
   428 
   429 void HWGame::writeCampaignVar(const QByteArray & varVal)
   429 void HWGame::writeCampaignVar(const QByteArray & varVal)
   430 {
   430 {
   431     int i = varVal.indexOf(" ");
   431     int i = varVal.indexOf(" ");
   438     QSettings teamfile(cfgdir->absolutePath() + "/Teams/" + campaignTeam + ".hwt", QSettings::IniFormat, 0);
   438     QSettings teamfile(cfgdir->absolutePath() + "/Teams/" + campaignTeam + ".hwt", QSettings::IniFormat, 0);
   439     teamfile.setIniCodec("UTF-8");
   439     teamfile.setIniCodec("UTF-8");
   440     teamfile.setValue("Campaign " + campaign + "/" + varToWrite, varValue);
   440     teamfile.setValue("Campaign " + campaign + "/" + varToWrite, varValue);
   441 }
   441 }
   442 
   442 
       
   443 void HWGame::onEngineStart()
       
   444 {
       
   445 
       
   446 }