QTfrontend/game.cpp
author unc0rr
Mon, 29 Sep 2008 22:14:23 +0000
changeset 1301 c6fe8a4bfd34
parent 1277 752b53481057
child 1356 77ab8735401d
permissions -rw-r--r--
Fix a bug screwing team selection up in network game (REMOVETEAM message doesn't have teamID, and after removing the team QMap still contains old info, when add and remove team with the same name, total hedgehogs number will be decreased by first team hh number)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     1
/*
1066
1f1b3686a2b0 Update copyright headers a bit
unc0rr
parents: 949
diff changeset
     2
 * Hedgewars, a free turn based strategy game
883
07a568ba44e0 Update copyright info in source files headers
unc0rr
parents: 788
diff changeset
     3
 * Copyright (c) 2005-2008 Andrey Korotaev <unC0Rr@gmail.com>
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     4
 *
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     8
 *
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    12
 * GNU General Public License for more details.
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    13
 *
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    14
 * You should have received a copy of the GNU General Public License
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    15
 * along with this program; if not, write to the Free Software
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    17
 */
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    18
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    19
#include <QString>
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    20
#include <QByteArray>
788
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
    21
#include <QUuid>
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    22
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    23
#include "game.h"
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    24
#include "hwconsts.h"
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    25
#include "gameuiconfig.h"
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    26
#include "gamecfgwidget.h"
339
7535ab6c3820 Run game message added, team and config info provided for net game
displacer
parents: 324
diff changeset
    27
#include "teamselect.h"
210
440575778475 Fixed compilation on *nix .)
unc0rr
parents: 208
diff changeset
    28
#include "KB.h"
239
f9adf3c73bed 'Proto' class to make things easier
unc0rr
parents: 228
diff changeset
    29
#include "proto.h"
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    30
706
9e973b057a52 missing header fix
displacer
parents: 686
diff changeset
    31
#include <QTextStream>
9e973b057a52 missing header fix
displacer
parents: 686
diff changeset
    32
681
7a20c50988ec working weapons select
displacer
parents: 673
diff changeset
    33
HWGame::HWGame(GameUIConfig * config, GameCFGWidget * gamecfg, QString ammo, TeamSelWidget* pTeamSelWidget) :
339
7535ab6c3820 Run game message added, team and config info provided for net game
displacer
parents: 324
diff changeset
    34
  TCPBase(true),
681
7a20c50988ec working weapons select
displacer
parents: 673
diff changeset
    35
  m_pTeamSelWidget(pTeamSelWidget),
7a20c50988ec working weapons select
displacer
parents: 673
diff changeset
    36
  ammostr(ammo)
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    37
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    38
	this->config = config;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    39
	this->gamecfg = gamecfg;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    40
	TeamCount = 0;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    41
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    42
419
fdeed9718e6b virtual destructors for tcpBase derived classes, readarray clear removed as unneeded
displacer
parents: 406
diff changeset
    43
HWGame::~HWGame()
fdeed9718e6b virtual destructors for tcpBase derived classes, readarray clear removed as unneeded
displacer
parents: 406
diff changeset
    44
{
686
494b5880989a - Header cleanup in game.cpp
unc0rr
parents: 682
diff changeset
    45
	SetGameState(gsDestroyed);
419
fdeed9718e6b virtual destructors for tcpBase derived classes, readarray clear removed as unneeded
displacer
parents: 406
diff changeset
    46
}
fdeed9718e6b virtual destructors for tcpBase derived classes, readarray clear removed as unneeded
displacer
parents: 406
diff changeset
    47
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    48
void HWGame::onClientDisconnect()
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    49
{
541
bc7be7f6d3e8 Small fixes
unc0rr
parents: 533
diff changeset
    50
	switch (gameType) {
bc7be7f6d3e8 Small fixes
unc0rr
parents: 533
diff changeset
    51
		case gtNet:
bc7be7f6d3e8 Small fixes
unc0rr
parents: 533
diff changeset
    52
			emit HaveRecord(true, demo);
bc7be7f6d3e8 Small fixes
unc0rr
parents: 533
diff changeset
    53
			break;
bc7be7f6d3e8 Small fixes
unc0rr
parents: 533
diff changeset
    54
		default:
bc7be7f6d3e8 Small fixes
unc0rr
parents: 533
diff changeset
    55
			if (gameState == gsInterrupted) emit HaveRecord(false, demo);
bc7be7f6d3e8 Small fixes
unc0rr
parents: 533
diff changeset
    56
			else if (gameState == gsFinished) emit HaveRecord(true, demo);
bc7be7f6d3e8 Small fixes
unc0rr
parents: 533
diff changeset
    57
	}
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
    58
	SetGameState(gsStopped);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    59
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    60
253
e7b3687fcb2c fixed: choose map for simple game is working now
displacer
parents: 249
diff changeset
    61
void HWGame::commonConfig()
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    62
{
318
46a43b02bbb3 Game config commands are generated by GameCFGWidget
unc0rr
parents: 312
diff changeset
    63
	QByteArray buf;
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    64
	QString gt;
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    65
	switch (gameType) {
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    66
		case gtDemo:
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    67
			gt = "TD";
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    68
			break;
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    69
		case gtNet:
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    70
			gt = "TN";
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    71
			break;
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    72
		default:
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    73
			gt = "TL";
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    74
	}
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    75
	HWProto::addStringToBuffer(buf, gt);
788
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
    76
318
46a43b02bbb3 Game config commands are generated by GameCFGWidget
unc0rr
parents: 312
diff changeset
    77
	HWProto::addStringListToBuffer(buf, gamecfg->getFullConfig());
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    78
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    79
	if (m_pTeamSelWidget)
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    80
	{
352
4665bfe25470 first buggy hedgehogs num net change
displacer
parents: 341
diff changeset
    81
		QList<HWTeam> teams = m_pTeamSelWidget->getPlayingTeams();
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    82
		for(QList<HWTeam>::iterator it = teams.begin(); it != teams.end(); ++it)
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    83
		{
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    84
			HWProto::addStringListToBuffer(buf,
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    85
				(*it).TeamGameConfig(gamecfg->getInitHealth()));
682
a37b6966de84 Some misc fixes
unc0rr
parents: 681
diff changeset
    86
			HWProto::addStringToBuffer(buf, QString("eammstore %1").arg(ammostr));
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    87
		}
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    88
	}
318
46a43b02bbb3 Game config commands are generated by GameCFGWidget
unc0rr
parents: 312
diff changeset
    89
	RawSendIPC(buf);
253
e7b3687fcb2c fixed: choose map for simple game is working now
displacer
parents: 249
diff changeset
    90
}
e7b3687fcb2c fixed: choose map for simple game is working now
displacer
parents: 249
diff changeset
    91
e7b3687fcb2c fixed: choose map for simple game is working now
displacer
parents: 249
diff changeset
    92
void HWGame::SendConfig()
e7b3687fcb2c fixed: choose map for simple game is working now
displacer
parents: 249
diff changeset
    93
{
e7b3687fcb2c fixed: choose map for simple game is working now
displacer
parents: 249
diff changeset
    94
	commonConfig();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    95
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    96
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    97
void HWGame::SendQuickConfig()
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    98
{
788
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
    99
	QByteArray teamscfg;
239
f9adf3c73bed 'Proto' class to make things easier
unc0rr
parents: 228
diff changeset
   100
788
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   101
	HWProto::addStringToBuffer(teamscfg, "TL");
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   102
	HWProto::addStringToBuffer(teamscfg, QString("etheme %1")
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   103
			.arg((Themes->size() > 0) ? Themes->at(rand() % Themes->size()) : "steel"));
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   104
	HWProto::addStringToBuffer(teamscfg, "eseed " + QUuid::createUuid().toString());
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   105
239
f9adf3c73bed 'Proto' class to make things easier
unc0rr
parents: 228
diff changeset
   106
	HWTeam team1(0);
f9adf3c73bed 'Proto' class to make things easier
unc0rr
parents: 228
diff changeset
   107
	team1.difficulty = 0;
616
00928b3cf505 Use same team colors everywhere
unc0rr
parents: 610
diff changeset
   108
	team1.teamColor = *color1;
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
   109
	team1.numHedgehogs = 4;
312
c36d0b34ac3d Use new parameters, small protocol change
unc0rr
parents: 306
diff changeset
   110
	HWProto::addStringListToBuffer(teamscfg,
788
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   111
			team1.TeamGameConfig(100));
239
f9adf3c73bed 'Proto' class to make things easier
unc0rr
parents: 228
diff changeset
   112
f9adf3c73bed 'Proto' class to make things easier
unc0rr
parents: 228
diff changeset
   113
	HWTeam team2(2);
f9adf3c73bed 'Proto' class to make things easier
unc0rr
parents: 228
diff changeset
   114
	team2.difficulty = 4;
616
00928b3cf505 Use same team colors everywhere
unc0rr
parents: 610
diff changeset
   115
	team2.teamColor = *color2;
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
   116
	team2.numHedgehogs = 4;
607
26a91a9f5514 Now trainings can have custom ammostore
unc0rr
parents: 604
diff changeset
   117
	HWProto::addStringListToBuffer(teamscfg,
788
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   118
			team2.TeamGameConfig(100));
607
26a91a9f5514 Now trainings can have custom ammostore
unc0rr
parents: 604
diff changeset
   119
26a91a9f5514 Now trainings can have custom ammostore
unc0rr
parents: 604
diff changeset
   120
	HWProto::addStringToBuffer(teamscfg, *cDefaultAmmoStore);
26a91a9f5514 Now trainings can have custom ammostore
unc0rr
parents: 604
diff changeset
   121
	HWProto::addStringToBuffer(teamscfg, *cDefaultAmmoStore);
26a91a9f5514 Now trainings can have custom ammostore
unc0rr
parents: 604
diff changeset
   122
	RawSendIPC(teamscfg);
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
   123
}
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
   124
588
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   125
void HWGame::SendTrainingConfig()
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   126
{
788
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   127
	QByteArray traincfg;
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   128
	HWProto::addStringToBuffer(traincfg, "TL");
588
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   129
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   130
	HWTeam team1(0);
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   131
	team1.difficulty = 0;
616
00928b3cf505 Use same team colors everywhere
unc0rr
parents: 610
diff changeset
   132
	team1.teamColor = *color1;
604
2f1165467a66 Let hedgehog position be taken from config, still more work is needed
unc0rr
parents: 603
diff changeset
   133
	team1.numHedgehogs = 1;
788
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   134
	HWProto::addStringListToBuffer(traincfg,
588
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   135
			team1.TeamGameConfig(100));
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   136
722
993faebbe546 - Use shotgun training as more attractive than the second one with bazooka
unc0rr
parents: 706
diff changeset
   137
	QFile file(datadir->absolutePath() + "/Trainings/001_Shotgun.txt");
596
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   138
	if(!file.open(QFile::ReadOnly))
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   139
	{
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   140
		emit ErrorMessage(tr("Error reading training config file"));
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   141
		return;
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   142
	}
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   143
	
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   144
	QTextStream stream(&file);
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   145
	while(!stream.atEnd())
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   146
	{
788
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   147
		HWProto::addStringToBuffer(traincfg, "e" + stream.readLine());
596
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   148
	}
593
1f5e66379a43 Triggers proof-of-concept
unc0rr
parents: 588
diff changeset
   149
788
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   150
	RawSendIPC(traincfg);
588
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   151
}
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   152
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
   153
void HWGame::SendNetConfig()
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
   154
{
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
   155
	commonConfig();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   156
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   157
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   158
void HWGame::ParseMessage(const QByteArray & msg)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   159
{
306
7b61834edcf6 - Better blowtorch
unc0rr
parents: 297
diff changeset
   160
	switch(msg.at(1)) {
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   161
		case '?': {
395
641ed71c7c93 - Fix net game bug
unc0rr
parents: 379
diff changeset
   162
			SendIPC("!");
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   163
			break;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   164
		}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   165
		case 'C': {
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   166
			switch (gameType) {
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   167
				case gtLocal: {
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   168
				 	SendConfig();
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   169
					break;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   170
				}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   171
				case gtQLocal: {
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   172
				 	SendQuickConfig();
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   173
					break;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   174
				}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   175
				case gtDemo: break;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   176
				case gtNet: {
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
   177
					SendNetConfig();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   178
					break;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   179
				}
588
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   180
				case gtTraining: {
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   181
				 	SendTrainingConfig();
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   182
					break;
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   183
				}
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   184
			}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   185
			break;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   186
		}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   187
		case 'E': {
660
7c155e849602 - Simplify net game objects relationship
unc0rr
parents: 622
diff changeset
   188
			int size = msg.size();
1277
752b53481057 - Unbreak previously broken themes
unc0rr
parents: 1129
diff changeset
   189
			emit ErrorMessage(QString("Last two engine messages:\n") + QString().append(msg.mid(2)).left(size - 4));
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   190
			return;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   191
		}
208
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 184
diff changeset
   192
		case 'K': {
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 184
diff changeset
   193
			ulong kb = msg.mid(2).toULong();
466
bc45a038d47a frewetype warning is now printed to console
displacer
parents: 425
diff changeset
   194
			if (kb==1) {
468
8403d6884707 some debug messages removed
displacer
parents: 466
diff changeset
   195
			  qWarning("%s", KBMessages[kb - 1].toLocal8Bit().constData());
466
bc45a038d47a frewetype warning is now printed to console
displacer
parents: 425
diff changeset
   196
			  return;
bc45a038d47a frewetype warning is now printed to console
displacer
parents: 425
diff changeset
   197
			}
208
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 184
diff changeset
   198
			if (kb && kb <= KBmsgsCount)
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 184
diff changeset
   199
			{
425
a7e1dabc8fb7 - Better AI thinking behavior
unc0rr
parents: 419
diff changeset
   200
				emit ErrorMessage(KBMessages[kb - 1]);
208
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 184
diff changeset
   201
			}
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 184
diff changeset
   202
			return;
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 184
diff changeset
   203
		}
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   204
		case '+': {
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   205
			if (gameType == gtNet)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   206
			{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   207
				emit SendNet(msg);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   208
			}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   209
			break;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   210
		}
306
7b61834edcf6 - Better blowtorch
unc0rr
parents: 297
diff changeset
   211
		case 'i': {
660
7c155e849602 - Simplify net game objects relationship
unc0rr
parents: 622
diff changeset
   212
			int size = msg.size();
7c155e849602 - Simplify net game objects relationship
unc0rr
parents: 622
diff changeset
   213
			emit GameStats(msg.at(2), QString::fromUtf8(msg.mid(3).left(size - 5)));
306
7b61834edcf6 - Better blowtorch
unc0rr
parents: 297
diff changeset
   214
			break;
7b61834edcf6 - Better blowtorch
unc0rr
parents: 297
diff changeset
   215
		}
324
f4c109c82a0c Don't show game stats in case of interrupted by command '/quit' game
unc0rr
parents: 318
diff changeset
   216
		case 'Q': {
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   217
			SetGameState(gsInterrupted);
324
f4c109c82a0c Don't show game stats in case of interrupted by command '/quit' game
unc0rr
parents: 318
diff changeset
   218
			break;
f4c109c82a0c Don't show game stats in case of interrupted by command '/quit' game
unc0rr
parents: 318
diff changeset
   219
		}
f4c109c82a0c Don't show game stats in case of interrupted by command '/quit' game
unc0rr
parents: 318
diff changeset
   220
		case 'q': {
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   221
			SetGameState(gsFinished);
324
f4c109c82a0c Don't show game stats in case of interrupted by command '/quit' game
unc0rr
parents: 318
diff changeset
   222
			break;
f4c109c82a0c Don't show game stats in case of interrupted by command '/quit' game
unc0rr
parents: 318
diff changeset
   223
		}
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   224
		default: {
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   225
			if (gameType == gtNet)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   226
			{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   227
				emit SendNet(msg);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   228
			}
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   229
			demo.append(msg);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   230
		}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   231
	}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   232
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   233
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   234
void HWGame::FromNet(const QByteArray & msg)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   235
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   236
	RawSendIPC(msg);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   237
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   238
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   239
void HWGame::onClientRead()
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   240
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   241
	quint8 msglen;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   242
	quint32 bufsize;
406
ea90c6358054 segfault after endgame fixed?!
displacer
parents: 397
diff changeset
   243
	while (!readbuffer.isEmpty() && ((bufsize = readbuffer.size()) > 0) &&
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   244
			((msglen = readbuffer.data()[0]) < bufsize))
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   245
	{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   246
		QByteArray msg = readbuffer.left(msglen + 1);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   247
		readbuffer.remove(0, msglen + 1);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   248
		ParseMessage(msg);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   249
	}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   250
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   251
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   252
QStringList HWGame::setArguments()
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   253
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   254
	QStringList arguments;
555
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents: 541
diff changeset
   255
	QRect resolution = config->vid_Resolution();
497
adf1aee202c6 merge fixes from branch
displacer
parents: 486
diff changeset
   256
	arguments << cfgdir->absolutePath();
555
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents: 541
diff changeset
   257
	arguments << QString::number(resolution.width());
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents: 541
diff changeset
   258
	arguments << QString::number(resolution.height());
759
8da05b316d81 Enable back fps counter
unc0rr
parents: 753
diff changeset
   259
	arguments << QString::number(config->bitDepth()); // bpp
291
afa378f1e961 automatic assign of game server TCP port
displacer
parents: 271
diff changeset
   260
	arguments << QString("%1").arg(ipc_port);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   261
	arguments << (config->vid_Fullscreen() ? "1" : "0");
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   262
	arguments << (config->isSoundEnabled() ? "1" : "0");
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   263
	arguments << tr("en.txt");
296
607912ccc5af Implemented FPS limit and show/hide FPS value
unc0rr
parents: 291
diff changeset
   264
	arguments << "128"; // sound volume
297
279e10ec31b4 'Show FPS' and 'FPS limit' options
unc0rr
parents: 296
diff changeset
   265
	arguments << QString::number(config->timerInterval());
267
bf7c1503f569 Engine gets Data path from frontend
unc0rr
parents: 253
diff changeset
   266
	arguments << datadir->absolutePath();
297
279e10ec31b4 'Show FPS' and 'FPS limit' options
unc0rr
parents: 296
diff changeset
   267
	arguments << (config->isShowFPSEnabled() ? "1" : "0");
529
812682c1ab62 Option for alternative damage tags
unc0rr
parents: 512
diff changeset
   268
	arguments << (config->isAltDamageEnabled() ? "1" : "0");
949
866729775535 Use nick from frontend to prepend chat messages
unc0rr
parents: 883
diff changeset
   269
	arguments << config->netNick().toUtf8().toBase64();
1129
b74ffca22762 Add a checkbox in frontend to turn music off
unc0rr
parents: 1128
diff changeset
   270
	arguments << (config->isMusicEnabled() ? "1" : "0");
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   271
	return arguments;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   272
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   273
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
   274
void HWGame::AddTeam(const QString & teamname)
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   275
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   276
	if (TeamCount == 5) return;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   277
	teams[TeamCount] = teamname;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   278
	TeamCount++;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   279
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   280
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   281
void HWGame::PlayDemo(const QString & demofilename)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   282
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   283
	gameType = gtDemo;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   284
	QFile demofile(demofilename);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   285
	if (!demofile.open(QIODevice::ReadOnly))
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   286
	{
425
a7e1dabc8fb7 - Better AI thinking behavior
unc0rr
parents: 419
diff changeset
   287
		emit ErrorMessage(tr("Cannot open demofile %1").arg(demofilename));
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   288
		return ;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   289
	}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   290
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   291
	// read demo
512
efc640bb60d0 Simplify reading from file ;)
unc0rr
parents: 497
diff changeset
   292
	toSendBuf = demofile.readAll();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   293
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   294
	// run engine
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   295
	demo.clear();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   296
	Start();
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   297
	SetGameState(gsStarted);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   298
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   299
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   300
void HWGame::StartNet()
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   301
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   302
	gameType = gtNet;
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   303
	demo.clear();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   304
	Start();
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   305
	SetGameState(gsStarted);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   306
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   307
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   308
void HWGame::StartLocal()
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   309
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   310
	gameType = gtLocal;
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   311
	demo.clear();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   312
	Start();
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   313
	SetGameState(gsStarted);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   314
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   315
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   316
void HWGame::StartQuick()
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   317
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   318
	gameType = gtQLocal;
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   319
	demo.clear();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   320
	Start();
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   321
	SetGameState(gsStarted);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   322
}
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   323
587
74db4115064a More work on Training mode
unc0rr
parents: 555
diff changeset
   324
void HWGame::StartTraining()
74db4115064a More work on Training mode
unc0rr
parents: 555
diff changeset
   325
{
588
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   326
	gameType = gtTraining;
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   327
	demo.clear();
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   328
	Start();
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   329
	SetGameState(gsStarted);
587
74db4115064a More work on Training mode
unc0rr
parents: 555
diff changeset
   330
}
74db4115064a More work on Training mode
unc0rr
parents: 555
diff changeset
   331
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   332
void HWGame::SetGameState(GameState state)
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   333
{
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   334
	gameState = state;
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   335
	emit GameStateChanged(state);
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   336
}