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 |