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; |
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 { |
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(); |
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 } |