QTfrontend/game.cpp
author nemo
Tue, 08 Sep 2009 19:44:49 +0000
changeset 2357 babe1a55e284
parent 2049 243d363546e7
child 2377 f3fab2b09e0c
permissions -rw-r--r--
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
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),
1904
20348675b015 - Fix warnings in frontend
unc0rr
parents: 1812
diff changeset
    35
  ammostr(ammo),
20348675b015 - Fix warnings in frontend
unc0rr
parents: 1812
diff changeset
    36
  m_pTeamSelWidget(pTeamSelWidget)
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) {
1490
4eb4fc12cc30 Don't rerecord a demo
unc0rr
parents: 1369
diff changeset
    51
		case gtDemo: break;
541
bc7be7f6d3e8 Small fixes
unc0rr
parents: 533
diff changeset
    52
		case gtNet:
bc7be7f6d3e8 Small fixes
unc0rr
parents: 533
diff changeset
    53
			emit HaveRecord(true, demo);
bc7be7f6d3e8 Small fixes
unc0rr
parents: 533
diff changeset
    54
			break;
bc7be7f6d3e8 Small fixes
unc0rr
parents: 533
diff changeset
    55
		default:
bc7be7f6d3e8 Small fixes
unc0rr
parents: 533
diff changeset
    56
			if (gameState == gsInterrupted) emit HaveRecord(false, demo);
bc7be7f6d3e8 Small fixes
unc0rr
parents: 533
diff changeset
    57
			else if (gameState == gsFinished) emit HaveRecord(true, demo);
bc7be7f6d3e8 Small fixes
unc0rr
parents: 533
diff changeset
    58
	}
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
    59
	SetGameState(gsStopped);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    60
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    61
253
e7b3687fcb2c fixed: choose map for simple game is working now
displacer
parents: 249
diff changeset
    62
void HWGame::commonConfig()
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    63
{
318
46a43b02bbb3 Game config commands are generated by GameCFGWidget
unc0rr
parents: 312
diff changeset
    64
	QByteArray buf;
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    65
	QString gt;
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    66
	switch (gameType) {
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    67
		case gtDemo:
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    68
			gt = "TD";
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    69
			break;
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    70
		case gtNet:
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    71
			gt = "TN";
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    72
			break;
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    73
		default:
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    74
			gt = "TL";
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    75
	}
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    76
	HWProto::addStringToBuffer(buf, gt);
788
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
    77
318
46a43b02bbb3 Game config commands are generated by GameCFGWidget
unc0rr
parents: 312
diff changeset
    78
	HWProto::addStringListToBuffer(buf, gamecfg->getFullConfig());
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    79
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    80
	if (m_pTeamSelWidget)
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    81
	{
352
4665bfe25470 first buggy hedgehogs num net change
displacer
parents: 341
diff changeset
    82
		QList<HWTeam> teams = m_pTeamSelWidget->getPlayingTeams();
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    83
		for(QList<HWTeam>::iterator it = teams.begin(); it != teams.end(); ++it)
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    84
		{
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    85
			HWProto::addStringListToBuffer(buf,
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    86
				(*it).TeamGameConfig(gamecfg->getInitHealth()));
682
a37b6966de84 Some misc fixes
unc0rr
parents: 681
diff changeset
    87
			HWProto::addStringToBuffer(buf, QString("eammstore %1").arg(ammostr));
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    88
		}
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
    89
	}
318
46a43b02bbb3 Game config commands are generated by GameCFGWidget
unc0rr
parents: 312
diff changeset
    90
	RawSendIPC(buf);
253
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
e7b3687fcb2c fixed: choose map for simple game is working now
displacer
parents: 249
diff changeset
    93
void HWGame::SendConfig()
e7b3687fcb2c fixed: choose map for simple game is working now
displacer
parents: 249
diff changeset
    94
{
e7b3687fcb2c fixed: choose map for simple game is working now
displacer
parents: 249
diff changeset
    95
	commonConfig();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    96
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    97
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    98
void HWGame::SendQuickConfig()
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
    99
{
788
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   100
	QByteArray teamscfg;
239
f9adf3c73bed 'Proto' class to make things easier
unc0rr
parents: 228
diff changeset
   101
788
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   102
	HWProto::addStringToBuffer(teamscfg, "TL");
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   103
	HWProto::addStringToBuffer(teamscfg, QString("etheme %1")
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   104
			.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
   105
	HWProto::addStringToBuffer(teamscfg, "eseed " + QUuid::createUuid().toString());
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   106
1907
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   107
	HWNamegen namegen;
239
f9adf3c73bed 'Proto' class to make things easier
unc0rr
parents: 228
diff changeset
   108
1907
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   109
	HWTeam * team1;
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   110
	team1 = new HWTeam;
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   111
	team1->difficulty = 0;
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   112
	team1->teamColor = *color1;
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   113
	team1->numHedgehogs = 4;
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   114
	namegen.TeamRandomNames(team1,TRUE);
607
26a91a9f5514 Now trainings can have custom ammostore
unc0rr
parents: 604
diff changeset
   115
	HWProto::addStringListToBuffer(teamscfg,
1907
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   116
			team1->TeamGameConfig(100));
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   117
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   118
	HWTeam * team2;
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   119
	team2 = new HWTeam;
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   120
	team2->difficulty = 4;
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   121
	team2->teamColor = *color2;
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   122
	team2->numHedgehogs = 4;
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   123
	namegen.TeamRandomNames(team2,TRUE);
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   124
	HWProto::addStringListToBuffer(teamscfg,
a104432e8301 Random team generator rework by ttsmj
unc0rr
parents: 1904
diff changeset
   125
			team2->TeamGameConfig(100));
607
26a91a9f5514 Now trainings can have custom ammostore
unc0rr
parents: 604
diff changeset
   126
1576
a02353129a41 Check for deprecated ammo schemes at startup and delete them
unc0rr
parents: 1490
diff changeset
   127
	HWProto::addStringToBuffer(teamscfg, "eammstore " + *cDefaultAmmoStore);
a02353129a41 Check for deprecated ammo schemes at startup and delete them
unc0rr
parents: 1490
diff changeset
   128
	HWProto::addStringToBuffer(teamscfg, "eammstore " + *cDefaultAmmoStore);
607
26a91a9f5514 Now trainings can have custom ammostore
unc0rr
parents: 604
diff changeset
   129
	RawSendIPC(teamscfg);
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
   130
}
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
   131
588
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   132
void HWGame::SendTrainingConfig()
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   133
{
788
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   134
	QByteArray traincfg;
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   135
	HWProto::addStringToBuffer(traincfg, "TL");
588
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   136
2049
243d363546e7 Fix team name in training (broken by ttsmj's random teams patch)
unc0rr
parents: 1907
diff changeset
   137
	HWTeam team1;
588
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   138
	team1.difficulty = 0;
616
00928b3cf505 Use same team colors everywhere
unc0rr
parents: 610
diff changeset
   139
	team1.teamColor = *color1;
604
2f1165467a66 Let hedgehog position be taken from config, still more work is needed
unc0rr
parents: 603
diff changeset
   140
	team1.numHedgehogs = 1;
788
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   141
	HWProto::addStringListToBuffer(traincfg,
588
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   142
			team1.TeamGameConfig(100));
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   143
722
993faebbe546 - Use shotgun training as more attractive than the second one with bazooka
unc0rr
parents: 706
diff changeset
   144
	QFile file(datadir->absolutePath() + "/Trainings/001_Shotgun.txt");
596
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   145
	if(!file.open(QFile::ReadOnly))
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   146
	{
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   147
		emit ErrorMessage(tr("Error reading training config file"));
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   148
		return;
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   149
	}
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   150
	
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   151
	QTextStream stream(&file);
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   152
	while(!stream.atEnd())
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   153
	{
788
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   154
		HWProto::addStringToBuffer(traincfg, "e" + stream.readLine());
596
38bdde6a54c1 First step to store trainings in files
unc0rr
parents: 595
diff changeset
   155
	}
593
1f5e66379a43 Triggers proof-of-concept
unc0rr
parents: 588
diff changeset
   156
788
00720357601f - Get rid of PageSimpleGame, now pressing 'quick game' just starts round
unc0rr
parents: 759
diff changeset
   157
	RawSendIPC(traincfg);
588
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   158
}
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   159
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
   160
void HWGame::SendNetConfig()
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
   161
{
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
   162
	commonConfig();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   163
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   164
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   165
void HWGame::ParseMessage(const QByteArray & msg)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   166
{
306
7b61834edcf6 - Better blowtorch
unc0rr
parents: 297
diff changeset
   167
	switch(msg.at(1)) {
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   168
		case '?': {
395
641ed71c7c93 - Fix net game bug
unc0rr
parents: 379
diff changeset
   169
			SendIPC("!");
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   170
			break;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   171
		}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   172
		case 'C': {
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   173
			switch (gameType) {
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   174
				case gtLocal: {
1358
99ba722e5a09 Fix chat messages in saves and demos
unc0rr
parents: 1356
diff changeset
   175
					SendConfig();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   176
					break;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   177
				}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   178
				case gtQLocal: {
1358
99ba722e5a09 Fix chat messages in saves and demos
unc0rr
parents: 1356
diff changeset
   179
					SendQuickConfig();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   180
					break;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   181
				}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   182
				case gtDemo: break;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   183
				case gtNet: {
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
   184
					SendNetConfig();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   185
					break;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   186
				}
588
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   187
				case gtTraining: {
1358
99ba722e5a09 Fix chat messages in saves and demos
unc0rr
parents: 1356
diff changeset
   188
					SendTrainingConfig();
588
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   189
					break;
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   190
				}
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   191
			}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   192
			break;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   193
		}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   194
		case 'E': {
660
7c155e849602 - Simplify net game objects relationship
unc0rr
parents: 622
diff changeset
   195
			int size = msg.size();
1277
752b53481057 - Unbreak previously broken themes
unc0rr
parents: 1129
diff changeset
   196
			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
   197
			return;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   198
		}
208
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 184
diff changeset
   199
		case 'K': {
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 184
diff changeset
   200
			ulong kb = msg.mid(2).toULong();
466
bc45a038d47a frewetype warning is now printed to console
displacer
parents: 425
diff changeset
   201
			if (kb==1) {
468
8403d6884707 some debug messages removed
displacer
parents: 466
diff changeset
   202
			  qWarning("%s", KBMessages[kb - 1].toLocal8Bit().constData());
466
bc45a038d47a frewetype warning is now printed to console
displacer
parents: 425
diff changeset
   203
			  return;
bc45a038d47a frewetype warning is now printed to console
displacer
parents: 425
diff changeset
   204
			}
208
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 184
diff changeset
   205
			if (kb && kb <= KBmsgsCount)
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 184
diff changeset
   206
			{
425
a7e1dabc8fb7 - Better AI thinking behavior
unc0rr
parents: 419
diff changeset
   207
				emit ErrorMessage(KBMessages[kb - 1]);
208
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 184
diff changeset
   208
			}
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 184
diff changeset
   209
			return;
a049157d673a Implement Knowledge Base for libs/compilers bugs
unc0rr
parents: 184
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
		}
1356
77ab8735401d Share chat between frontend and engine
unc0rr
parents: 1277
diff changeset
   224
		case 's': {
77ab8735401d Share chat between frontend and engine
unc0rr
parents: 1277
diff changeset
   225
			int size = msg.size();
1358
99ba722e5a09 Fix chat messages in saves and demos
unc0rr
parents: 1356
diff changeset
   226
			QString msgbody = QString::fromUtf8(msg.mid(2).left(size - 4));
99ba722e5a09 Fix chat messages in saves and demos
unc0rr
parents: 1356
diff changeset
   227
			emit SendChat(msgbody);
99ba722e5a09 Fix chat messages in saves and demos
unc0rr
parents: 1356
diff changeset
   228
			QByteArray buf;
99ba722e5a09 Fix chat messages in saves and demos
unc0rr
parents: 1356
diff changeset
   229
			HWProto::addStringToBuffer(buf, QString("s%1: %2\x20\x20").arg(config->netNick()).arg(msgbody));
99ba722e5a09 Fix chat messages in saves and demos
unc0rr
parents: 1356
diff changeset
   230
			demo.append(buf);
99ba722e5a09 Fix chat messages in saves and demos
unc0rr
parents: 1356
diff changeset
   231
			break;
1356
77ab8735401d Share chat between frontend and engine
unc0rr
parents: 1277
diff changeset
   232
		}
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   233
		default: {
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   234
			if (gameType == gtNet)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   235
			{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   236
				emit SendNet(msg);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   237
			}
1358
99ba722e5a09 Fix chat messages in saves and demos
unc0rr
parents: 1356
diff changeset
   238
		if (msg.at(1) != 's')
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   239
			demo.append(msg);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   240
		}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   241
	}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   242
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   243
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   244
void HWGame::FromNet(const QByteArray & msg)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   245
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   246
	RawSendIPC(msg);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   247
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   248
1356
77ab8735401d Share chat between frontend and engine
unc0rr
parents: 1277
diff changeset
   249
void HWGame::FromNetChat(const QString & msg)
77ab8735401d Share chat between frontend and engine
unc0rr
parents: 1277
diff changeset
   250
{
77ab8735401d Share chat between frontend and engine
unc0rr
parents: 1277
diff changeset
   251
	QByteArray buf;
77ab8735401d Share chat between frontend and engine
unc0rr
parents: 1277
diff changeset
   252
	HWProto::addStringToBuffer(buf, 's' + msg + "\x20\x20");
77ab8735401d Share chat between frontend and engine
unc0rr
parents: 1277
diff changeset
   253
	RawSendIPC(buf);
77ab8735401d Share chat between frontend and engine
unc0rr
parents: 1277
diff changeset
   254
}
77ab8735401d Share chat between frontend and engine
unc0rr
parents: 1277
diff changeset
   255
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   256
void HWGame::onClientRead()
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   257
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   258
	quint8 msglen;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   259
	quint32 bufsize;
406
ea90c6358054 segfault after endgame fixed?!
displacer
parents: 397
diff changeset
   260
	while (!readbuffer.isEmpty() && ((bufsize = readbuffer.size()) > 0) &&
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   261
			((msglen = readbuffer.data()[0]) < bufsize))
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   262
	{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   263
		QByteArray msg = readbuffer.left(msglen + 1);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   264
		readbuffer.remove(0, msglen + 1);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   265
		ParseMessage(msg);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   266
	}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   267
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   268
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   269
QStringList HWGame::setArguments()
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   270
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   271
	QStringList arguments;
555
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents: 541
diff changeset
   272
	QRect resolution = config->vid_Resolution();
497
adf1aee202c6 merge fixes from branch
displacer
parents: 486
diff changeset
   273
	arguments << cfgdir->absolutePath();
555
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents: 541
diff changeset
   274
	arguments << QString::number(resolution.width());
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents: 541
diff changeset
   275
	arguments << QString::number(resolution.height());
759
8da05b316d81 Enable back fps counter
unc0rr
parents: 753
diff changeset
   276
	arguments << QString::number(config->bitDepth()); // bpp
291
afa378f1e961 automatic assign of game server TCP port
displacer
parents: 271
diff changeset
   277
	arguments << QString("%1").arg(ipc_port);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   278
	arguments << (config->vid_Fullscreen() ? "1" : "0");
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   279
	arguments << (config->isSoundEnabled() ? "1" : "0");
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   280
	arguments << tr("en.txt");
1777
88674c291331 Implement initial sound volume option
unc0rr
parents: 1576
diff changeset
   281
	arguments << QString::number(config->volume()); // sound volume
297
279e10ec31b4 'Show FPS' and 'FPS limit' options
unc0rr
parents: 296
diff changeset
   282
	arguments << QString::number(config->timerInterval());
267
bf7c1503f569 Engine gets Data path from frontend
unc0rr
parents: 253
diff changeset
   283
	arguments << datadir->absolutePath();
297
279e10ec31b4 'Show FPS' and 'FPS limit' options
unc0rr
parents: 296
diff changeset
   284
	arguments << (config->isShowFPSEnabled() ? "1" : "0");
529
812682c1ab62 Option for alternative damage tags
unc0rr
parents: 512
diff changeset
   285
	arguments << (config->isAltDamageEnabled() ? "1" : "0");
949
866729775535 Use nick from frontend to prepend chat messages
unc0rr
parents: 883
diff changeset
   286
	arguments << config->netNick().toUtf8().toBase64();
1129
b74ffca22762 Add a checkbox in frontend to turn music off
unc0rr
parents: 1128
diff changeset
   287
	arguments << (config->isMusicEnabled() ? "1" : "0");
1812
3d4692e825e7 'Reduce quality' patch by nemo
unc0rr
parents: 1777
diff changeset
   288
	arguments << (config->isReducedQuality() ? "1" : "0");
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   289
	return arguments;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   290
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   291
341
184230eb4151 - Store more team specific values in HWTeam
unc0rr
parents: 339
diff changeset
   292
void HWGame::AddTeam(const QString & teamname)
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   293
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   294
	if (TeamCount == 5) return;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   295
	teams[TeamCount] = teamname;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   296
	TeamCount++;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   297
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   298
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   299
void HWGame::PlayDemo(const QString & demofilename)
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   300
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   301
	gameType = gtDemo;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   302
	QFile demofile(demofilename);
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   303
	if (!demofile.open(QIODevice::ReadOnly))
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   304
	{
425
a7e1dabc8fb7 - Better AI thinking behavior
unc0rr
parents: 419
diff changeset
   305
		emit ErrorMessage(tr("Cannot open demofile %1").arg(demofilename));
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   306
		return ;
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   307
	}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   308
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   309
	// read demo
512
efc640bb60d0 Simplify reading from file ;)
unc0rr
parents: 497
diff changeset
   310
	toSendBuf = demofile.readAll();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   311
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   312
	// run engine
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   313
	demo.clear();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   314
	Start();
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   315
	SetGameState(gsStarted);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   316
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   317
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   318
void HWGame::StartNet()
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   319
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   320
	gameType = gtNet;
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   321
	demo.clear();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   322
	Start();
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   323
	SetGameState(gsStarted);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   324
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   325
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   326
void HWGame::StartLocal()
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   327
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   328
	gameType = gtLocal;
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   329
	demo.clear();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   330
	Start();
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   331
	SetGameState(gsStarted);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   332
}
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   333
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   334
void HWGame::StartQuick()
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   335
{
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   336
	gameType = gtQLocal;
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   337
	demo.clear();
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   338
	Start();
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   339
	SetGameState(gsStarted);
184
f97a7a3dc8f6 - Update more headers
unc0rr
parents: 183
diff changeset
   340
}
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   341
587
74db4115064a More work on Training mode
unc0rr
parents: 555
diff changeset
   342
void HWGame::StartTraining()
74db4115064a More work on Training mode
unc0rr
parents: 555
diff changeset
   343
{
588
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   344
	gameType = gtTraining;
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   345
	demo.clear();
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   346
	Start();
b2e61fc49e5d Better stub for Training mode
unc0rr
parents: 587
diff changeset
   347
	SetGameState(gsStarted);
587
74db4115064a More work on Training mode
unc0rr
parents: 555
diff changeset
   348
}
74db4115064a More work on Training mode
unc0rr
parents: 555
diff changeset
   349
533
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   350
void HWGame::SetGameState(GameState state)
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   351
{
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   352
	gameState = state;
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   353
	emit GameStateChanged(state);
eebb7684ac22 Save saves in Save directory
unc0rr
parents: 529
diff changeset
   354
}