git repos / blockattack-game

blame: source/code/replay.cpp

normal view · raw

89c4a3a6 sago007 2008-08-29 14:32 1
/*
c53e6443 sago007 2012-04-17 11:04 2
===========================================================================
c53e6443 sago007 2012-04-17 11:04 3
blockattack - Block Attack - Rise of the Blocks
c53e6443 sago007 2012-04-17 11:04 4
Copyright (C) 2005-2012 Poul Sander
89c4a3a6 sago007 2008-08-29 14:32 5
c53e6443 sago007 2012-04-17 11:04 6
This program is free software: you can redistribute it and/or modify
c53e6443 sago007 2012-04-17 11:04 7
it under the terms of the GNU General Public License as published by
c53e6443 sago007 2012-04-17 11:04 8
the Free Software Foundation, either version 2 of the License, or
c53e6443 sago007 2012-04-17 11:04 9
(at your option) any later version.
89c4a3a6 sago007 2008-08-29 14:32 10
c53e6443 sago007 2012-04-17 11:04 11
This program is distributed in the hope that it will be useful,
c53e6443 sago007 2012-04-17 11:04 12
but WITHOUT ANY WARRANTY; without even the implied warranty of
c53e6443 sago007 2012-04-17 11:04 13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
c53e6443 sago007 2012-04-17 11:04 14
GNU General Public License for more details.
89c4a3a6 sago007 2008-08-29 14:32 15
c53e6443 sago007 2012-04-17 11:04 16
You should have received a copy of the GNU General Public License
c53e6443 sago007 2012-04-17 11:04 17
along with this program.  If not, see http://www.gnu.org/licenses/
89c4a3a6 sago007 2008-08-29 14:32 18
c53e6443 sago007 2012-04-17 11:04 19
Source information and contacts persons can be found at
c53e6443 sago007 2012-04-17 11:04 20
http://blockattack.sf.net
c53e6443 sago007 2012-04-17 11:04 21
===========================================================================
89c4a3a6 sago007 2008-08-29 14:32 22
*/
89c4a3a6 sago007 2008-08-29 14:32 23
89c4a3a6 sago007 2008-08-29 14:32 24
/*
89c4a3a6 sago007 2008-08-29 14:32 25
Handles replay
89c4a3a6 sago007 2008-08-29 14:32 26
*/
89c4a3a6 sago007 2008-08-29 14:32 27
c96f480e sago007 2009-03-28 18:59 28
#include <string.h>
c96f480e sago007 2009-03-28 18:59 29
89c4a3a6 sago007 2008-08-29 14:32 30
#include "replay.h"
89c4a3a6 sago007 2008-08-29 14:32 31
56241205 sago007 2012-08-05 11:15 32
extern int verboseLevel;
56241205 sago007 2012-08-05 11:15 33
89c4a3a6 sago007 2008-08-29 14:32 34
Replay::Replay()
89c4a3a6 sago007 2008-08-29 14:32 35
{
c53e6443 sago007 2012-04-17 11:04 36
	isLoaded = false;
79d3c1d3 sago007 2012-05-05 15:54 37
	actions.clear();
89c4a3a6 sago007 2008-08-29 14:32 38
}
89c4a3a6 sago007 2008-08-29 14:32 39
89c4a3a6 sago007 2008-08-29 14:32 40
Replay::Replay(const Replay& r)
89c4a3a6 sago007 2008-08-29 14:32 41
{
c53e6443 sago007 2012-04-17 11:04 42
	isLoaded = r.isLoaded;
6c9b4cd7 sago007 2012-05-01 19:34 43
	name = r.name;
d93dc017 sago007 2012-04-22 14:28 44
	actions = r.actions;
89c4a3a6 sago007 2008-08-29 14:32 45
}
89c4a3a6 sago007 2008-08-29 14:32 46
89c4a3a6 sago007 2008-08-29 14:32 47
89c4a3a6 sago007 2008-08-29 14:32 48
89c4a3a6 sago007 2008-08-29 14:32 49
89c4a3a6 sago007 2008-08-29 14:32 50
89c4a3a6 sago007 2008-08-29 14:32 51
89c4a3a6 sago007 2008-08-29 14:32 52
89c4a3a6 sago007 2008-08-29 14:32 53
bool Replay::saveReplay(string filename)
89c4a3a6 sago007 2008-08-29 14:32 54
{
d93dc017 sago007 2012-04-22 14:28 55
	//Saving as fileversion 4
56241205 sago007 2012-08-05 11:15 56
	if(verboseLevel)
56241205 sago007 2012-08-05 11:15 57
		cout << "Saving as version 4 save file" << endl;
c53e6443 sago007 2012-04-17 11:04 58
	ofstream saveFile;
c53e6443 sago007 2012-04-17 11:04 59
	saveFile.open(filename.c_str(),ios::binary|ios::trunc);
c53e6443 sago007 2012-04-17 11:04 60
	if (saveFile)
c53e6443 sago007 2012-04-17 11:04 61
	{
6c9b4cd7 sago007 2012-05-01 19:34 62
		saveFile << "0 16 PLAYER 1\n";
6c9b4cd7 sago007 2012-05-01 19:34 63
		saveFile << "0 16 NAME " << name << "\n";
b4f1d3cf sago007 2012-08-20 21:28 64
		for(unsigned int i = 0; i < actions.size(); ++i)
80b830cd sago007 2012-08-19 17:51 65
		{
6c9b4cd7 sago007 2012-05-01 19:34 66
			saveFile << actions.at(i).time << " " << actions.at(i).action << " " << actions.at(i).param << "\n";
c53e6443 sago007 2012-04-17 11:04 67
		}
c53e6443 sago007 2012-04-17 11:04 68
		saveFile.close();
c53e6443 sago007 2012-04-17 11:04 69
		return true;
c53e6443 sago007 2012-04-17 11:04 70
	}
c53e6443 sago007 2012-04-17 11:04 71
	else
c53e6443 sago007 2012-04-17 11:04 72
	{
c53e6443 sago007 2012-04-17 11:04 73
		return false;
c53e6443 sago007 2012-04-17 11:04 74
	}
89c4a3a6 sago007 2008-08-29 14:32 75
}
89c4a3a6 sago007 2008-08-29 14:32 76
89c4a3a6 sago007 2008-08-29 14:32 77
bool Replay::saveReplay(string filename,Replay p2)
89c4a3a6 sago007 2008-08-29 14:32 78
{
b283e0f7 sago007 2012-07-29 14:01 79
	//Saving as fileversion 4
56241205 sago007 2012-08-05 11:15 80
	if(verboseLevel)
56241205 sago007 2012-08-05 11:15 81
		cout << "Saving as version 4 save file (2 players)" << endl;
c53e6443 sago007 2012-04-17 11:04 82
	ofstream saveFile;
c53e6443 sago007 2012-04-17 11:04 83
	saveFile.open(filename.c_str(),ios::binary|ios::trunc);
c53e6443 sago007 2012-04-17 11:04 84
	if (saveFile)
c53e6443 sago007 2012-04-17 11:04 85
	{
b283e0f7 sago007 2012-07-29 14:01 86
		saveFile << "0 16 PLAYER 1\n";
b283e0f7 sago007 2012-07-29 14:01 87
		saveFile << "0 16 NAME " << name << "\n";
b4f1d3cf sago007 2012-08-20 21:28 88
		for(unsigned int i = 0; i < actions.size(); ++i)
80b830cd sago007 2012-08-19 17:51 89
		{
b283e0f7 sago007 2012-07-29 14:01 90
			saveFile << actions.at(i).time << " " << actions.at(i).action << " " << actions.at(i).param << "\n";
b283e0f7 sago007 2012-07-29 14:01 91
		}
b283e0f7 sago007 2012-07-29 14:01 92
		saveFile << "0 16 PLAYER 2\n";
b283e0f7 sago007 2012-07-29 14:01 93
		saveFile << "0 16 NAME " << name << "\n";
b4f1d3cf sago007 2012-08-20 21:28 94
		for(unsigned int i = 0; i < p2.getActions().size(); ++i)
80b830cd sago007 2012-08-19 17:51 95
		{
b283e0f7 sago007 2012-07-29 14:01 96
			saveFile << p2.getActions().at(i).time << " " << p2.getActions().at(i).action << " " << p2.getActions().at(i).param << "\n";
b283e0f7 sago007 2012-07-29 14:01 97
		}
c53e6443 sago007 2012-04-17 11:04 98
		saveFile.close();
c53e6443 sago007 2012-04-17 11:04 99
		return true;
c53e6443 sago007 2012-04-17 11:04 100
	}
c53e6443 sago007 2012-04-17 11:04 101
	else
c53e6443 sago007 2012-04-17 11:04 102
	{
c53e6443 sago007 2012-04-17 11:04 103
		return false;
c53e6443 sago007 2012-04-17 11:04 104
	}
89c4a3a6 sago007 2008-08-29 14:32 105
}
89c4a3a6 sago007 2008-08-29 14:32 106
89c4a3a6 sago007 2008-08-29 14:32 107
bool Replay::loadReplay(string filename)
89c4a3a6 sago007 2008-08-29 14:32 108
{
c53e6443 sago007 2012-04-17 11:04 109
	isLoaded = true;
6c9b4cd7 sago007 2012-05-01 19:34 110
	actions.clear();
c53e6443 sago007 2012-04-17 11:04 111
	ifstream loadFile;
79d3c1d3 sago007 2012-05-05 15:54 112
	loadFile.open(filename.c_str());
c53e6443 sago007 2012-04-17 11:04 113
	if (loadFile)
c53e6443 sago007 2012-04-17 11:04 114
	{
80b830cd sago007 2012-08-19 17:51 115
		while(!loadFile.eof())
80b830cd sago007 2012-08-19 17:51 116
		{
79d3c1d3 sago007 2012-05-05 15:54 117
			Sint32 time;
79d3c1d3 sago007 2012-05-05 15:54 118
			Uint32 action;
6c9b4cd7 sago007 2012-05-01 19:34 119
			string restOfLine;
6c9b4cd7 sago007 2012-05-01 19:34 120
			loadFile >> time >> action;
6c9b4cd7 sago007 2012-05-01 19:34 121
			if(action == 16)
c53e6443 sago007 2012-04-17 11:04 122
			{
6c9b4cd7 sago007 2012-05-01 19:34 123
				string command;
6c9b4cd7 sago007 2012-05-01 19:34 124
				loadFile >> command;
6c9b4cd7 sago007 2012-05-01 19:34 125
				if(command == "NAME")
6c9b4cd7 sago007 2012-05-01 19:34 126
					getline(loadFile,name,'\n');
80b830cd sago007 2012-08-19 17:51 127
				if(command == "PLAYER")
80b830cd sago007 2012-08-19 17:51 128
				{
6c9b4cd7 sago007 2012-05-01 19:34 129
					getline(loadFile,restOfLine,'\n');
79d3c1d3 sago007 2012-05-05 15:54 130
					if(restOfLine != " 1")
6c9b4cd7 sago007 2012-05-01 19:34 131
						break;
6c9b4cd7 sago007 2012-05-01 19:34 132
				}
80b830cd sago007 2012-08-19 17:51 133
			}
80b830cd sago007 2012-08-19 17:51 134
			else
6c9b4cd7 sago007 2012-05-01 19:34 135
			{
6c9b4cd7 sago007 2012-05-01 19:34 136
				getline(loadFile,restOfLine,'\n');
6c9b4cd7 sago007 2012-05-01 19:34 137
				Action a;
6c9b4cd7 sago007 2012-05-01 19:34 138
				a.time = time;
6c9b4cd7 sago007 2012-05-01 19:34 139
				a.action = action;
50258544 sago007 2012-05-10 19:11 140
				if(restOfLine.length()>1)
50258544 sago007 2012-05-10 19:11 141
					a.param = restOfLine.substr(1);
50258544 sago007 2012-05-10 19:11 142
				else
50258544 sago007 2012-05-10 19:11 143
					a.param = "";
6c9b4cd7 sago007 2012-05-01 19:34 144
				actions.push_back(a);
c53e6443 sago007 2012-04-17 11:04 145
			}
80b830cd sago007 2012-08-19 17:51 146
6c9b4cd7 sago007 2012-05-01 19:34 147
		}
c53e6443 sago007 2012-04-17 11:04 148
		loadFile.close();
56241205 sago007 2012-08-05 11:15 149
		if(verboseLevel)
56241205 sago007 2012-08-05 11:15 150
			cout << "Loaded 1 player, actions.size="<< actions.size() << endl;
c53e6443 sago007 2012-04-17 11:04 151
	}
c53e6443 sago007 2012-04-17 11:04 152
	else
c53e6443 sago007 2012-04-17 11:04 153
	{
56241205 sago007 2012-08-05 11:15 154
		cerr << "File not found or couldn't open: " << filename << endl;
c53e6443 sago007 2012-04-17 11:04 155
		return false;
c53e6443 sago007 2012-04-17 11:04 156
	}
b4f1d3cf sago007 2012-08-20 21:28 157
	return true;
89c4a3a6 sago007 2008-08-29 14:32 158
}
89c4a3a6 sago007 2008-08-29 14:32 159
89c4a3a6 sago007 2008-08-29 14:32 160
bool Replay::loadReplay2(string filename)
89c4a3a6 sago007 2008-08-29 14:32 161
{
c53e6443 sago007 2012-04-17 11:04 162
	isLoaded = true;
b283e0f7 sago007 2012-07-29 14:01 163
	bool player2started = false; //set to true once the player two part is reached
b283e0f7 sago007 2012-07-29 14:01 164
	actions.clear();
c53e6443 sago007 2012-04-17 11:04 165
	ifstream loadFile;
b283e0f7 sago007 2012-07-29 14:01 166
	loadFile.open(filename.c_str());
c53e6443 sago007 2012-04-17 11:04 167
	if (loadFile)
c53e6443 sago007 2012-04-17 11:04 168
	{
80b830cd sago007 2012-08-19 17:51 169
		while(!loadFile.eof())
80b830cd sago007 2012-08-19 17:51 170
		{
b283e0f7 sago007 2012-07-29 14:01 171
			Sint32 time;
b283e0f7 sago007 2012-07-29 14:01 172
			Uint32 action;
b283e0f7 sago007 2012-07-29 14:01 173
			string restOfLine;
b283e0f7 sago007 2012-07-29 14:01 174
			loadFile >> time >> action;
b283e0f7 sago007 2012-07-29 14:01 175
			if(action == 16)
c53e6443 sago007 2012-04-17 11:04 176
			{
b283e0f7 sago007 2012-07-29 14:01 177
				string command;
b283e0f7 sago007 2012-07-29 14:01 178
				loadFile >> command;
b283e0f7 sago007 2012-07-29 14:01 179
				if(command == "NAME")
b283e0f7 sago007 2012-07-29 14:01 180
					getline(loadFile,name,'\n');
80b830cd sago007 2012-08-19 17:51 181
				if(command == "PLAYER")
80b830cd sago007 2012-08-19 17:51 182
				{
b283e0f7 sago007 2012-07-29 14:01 183
					getline(loadFile,restOfLine,'\n');
b283e0f7 sago007 2012-07-29 14:01 184
					if(restOfLine == " 2")
b283e0f7 sago007 2012-07-29 14:01 185
						player2started = true;
b283e0f7 sago007 2012-07-29 14:01 186
				}
80b830cd sago007 2012-08-19 17:51 187
			}
80b830cd sago007 2012-08-19 17:51 188
			else
b283e0f7 sago007 2012-07-29 14:01 189
			{
b283e0f7 sago007 2012-07-29 14:01 190
				getline(loadFile,restOfLine,'\n');
b283e0f7 sago007 2012-07-29 14:01 191
				if(!player2started)
b283e0f7 sago007 2012-07-29 14:01 192
					continue;
b283e0f7 sago007 2012-07-29 14:01 193
				Action a;
b283e0f7 sago007 2012-07-29 14:01 194
				a.time = time;
b283e0f7 sago007 2012-07-29 14:01 195
				a.action = action;
b283e0f7 sago007 2012-07-29 14:01 196
				if(restOfLine.length()>1)
b283e0f7 sago007 2012-07-29 14:01 197
					a.param = restOfLine.substr(1);
b283e0f7 sago007 2012-07-29 14:01 198
				else
b283e0f7 sago007 2012-07-29 14:01 199
					a.param = "";
b283e0f7 sago007 2012-07-29 14:01 200
				actions.push_back(a);
c53e6443 sago007 2012-04-17 11:04 201
			}
80b830cd sago007 2012-08-19 17:51 202
b283e0f7 sago007 2012-07-29 14:01 203
		}
c53e6443 sago007 2012-04-17 11:04 204
		loadFile.close();
56241205 sago007 2012-08-05 11:15 205
		if(verboseLevel)
56241205 sago007 2012-08-05 11:15 206
			cout << "Loaded 2 player, actions.size="<< actions.size() << endl;
c53e6443 sago007 2012-04-17 11:04 207
	}
c53e6443 sago007 2012-04-17 11:04 208
	else
c53e6443 sago007 2012-04-17 11:04 209
	{
56241205 sago007 2012-08-05 11:15 210
		cerr << "File not found or couldn't open: " << filename << endl;
c53e6443 sago007 2012-04-17 11:04 211
		return false;
c53e6443 sago007 2012-04-17 11:04 212
	}
b4f1d3cf sago007 2012-08-20 21:28 213
	return true;
89c4a3a6 sago007 2008-08-29 14:32 214
}
d12916ab sago007 2012-04-19 23:30 215
6c9b4cd7 sago007 2012-05-01 19:34 216
void Replay::setName(string name)
6c9b4cd7 sago007 2012-05-01 19:34 217
{
6c9b4cd7 sago007 2012-05-01 19:34 218
	this->name = name;
6c9b4cd7 sago007 2012-05-01 19:34 219
}
6c9b4cd7 sago007 2012-05-01 19:34 220
6c9b4cd7 sago007 2012-05-01 19:34 221
string Replay::getName() const
6c9b4cd7 sago007 2012-05-01 19:34 222
{
6c9b4cd7 sago007 2012-05-01 19:34 223
	return name;
6c9b4cd7 sago007 2012-05-01 19:34 224
}
6c9b4cd7 sago007 2012-05-01 19:34 225
80b830cd sago007 2012-08-19 17:51 226
vector<Action> Replay::getActions() const
80b830cd sago007 2012-08-19 17:51 227
{
79d3c1d3 sago007 2012-05-05 15:54 228
	return actions;
79d3c1d3 sago007 2012-05-05 15:54 229
}
79d3c1d3 sago007 2012-05-05 15:54 230
80b830cd sago007 2012-08-19 17:51 231
void Replay::addAction(int tick, int action, string param)
79d3c1d3 sago007 2012-05-05 15:54 232
{
56241205 sago007 2012-08-05 11:15 233
#if DEBUG
6c9b4cd7 sago007 2012-05-01 19:34 234
	cout << tick << " " << action << " " << param << endl;
56241205 sago007 2012-08-05 11:15 235
#endif
d12916ab sago007 2012-04-19 23:30 236
	Action a;
d12916ab sago007 2012-04-19 23:30 237
	a.time = tick;
d12916ab sago007 2012-04-19 23:30 238
	a.action = action;
6c9b4cd7 sago007 2012-05-01 19:34 239
	a.param = param;
d12916ab sago007 2012-04-19 23:30 240
	actions.push_back(a);
d12916ab sago007 2012-04-19 23:30 241
}
1970-01-01 00:00 242