git repos / blockattack-game

blame: source/code/stageclearhandler.cpp

normal view · raw

ae5d6381 sago007 2015-12-29 13:26 1
/*
1899da11 sago007 2015-12-30 19:04 2
===========================================================================
1899da11 sago007 2015-12-30 19:04 3
blockattack - Block Attack - Rise of the Blocks
1899da11 sago007 2015-12-30 19:04 4
Copyright (C) 2005-2015 Poul Sander
1899da11 sago007 2015-12-30 19:04 5
1899da11 sago007 2015-12-30 19:04 6
This program is free software: you can redistribute it and/or modify
1899da11 sago007 2015-12-30 19:04 7
it under the terms of the GNU General Public License as published by
1899da11 sago007 2015-12-30 19:04 8
the Free Software Foundation, either version 2 of the License, or
1899da11 sago007 2015-12-30 19:04 9
(at your option) any later version.
1899da11 sago007 2015-12-30 19:04 10
1899da11 sago007 2015-12-30 19:04 11
This program is distributed in the hope that it will be useful,
1899da11 sago007 2015-12-30 19:04 12
but WITHOUT ANY WARRANTY; without even the implied warranty of
1899da11 sago007 2015-12-30 19:04 13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1899da11 sago007 2015-12-30 19:04 14
GNU General Public License for more details.
1899da11 sago007 2015-12-30 19:04 15
1899da11 sago007 2015-12-30 19:04 16
You should have received a copy of the GNU General Public License
1899da11 sago007 2015-12-30 19:04 17
along with this program.  If not, see http://www.gnu.org/licenses/
1899da11 sago007 2015-12-30 19:04 18
1899da11 sago007 2015-12-30 19:04 19
Source information and contacts persons can be found at
1899da11 sago007 2015-12-30 19:04 20
http://blockattack.net
1899da11 sago007 2015-12-30 19:04 21
===========================================================================
1899da11 sago007 2015-12-30 19:04 22
*/
ae5d6381 sago007 2015-12-29 13:26 23
ae5d6381 sago007 2015-12-29 13:26 24
#include "stageclearhandler.hpp"
ae5d6381 sago007 2015-12-29 13:26 25
#include "SDL.h"
ae5d6381 sago007 2015-12-29 13:26 26
#include <vector>
ae5d6381 sago007 2015-12-29 13:26 27
#include <iostream>
e8475d0d sago007 2016-02-13 09:38 28
#include "physfs_stream.hpp"
ae5d6381 sago007 2015-12-29 13:26 29
ae5d6381 sago007 2015-12-29 13:26 30
//paths
e8475d0d sago007 2016-02-13 09:38 31
const char* const stageClearSaveName = "stageClear.SCsave";
ae5d6381 sago007 2015-12-29 13:26 32
335635ec sago007 2016-02-06 13:51 33
std::vector<bool> stageCleared(nrOfStageLevels);        //vector that tells if a stage is cleared
daa8f1cf sago007 2016-01-23 10:57 34
std::vector<Sint32> stageTimes(nrOfStageLevels);             //For statistical puposes
daa8f1cf sago007 2016-01-23 10:57 35
std::vector<Sint32> stageScores(nrOfStageLevels);            //--||--
daa8f1cf sago007 2016-01-23 10:57 36
Sint32 totalScore = 0;
daa8f1cf sago007 2016-01-23 10:57 37
Sint32 totalTime = 0;
ae5d6381 sago007 2015-12-29 13:26 38
ae5d6381 sago007 2015-12-29 13:26 39
using namespace std;
ae5d6381 sago007 2015-12-29 13:26 40
ae5d6381 sago007 2015-12-29 13:26 41
void StageClearSetClear(int Level, int score, int time) {
ae5d6381 sago007 2015-12-29 13:26 42
	stageCleared[Level] = true;
ae5d6381 sago007 2015-12-29 13:26 43
	int gameEndedAfter = time;
ae5d6381 sago007 2015-12-29 13:26 44
	if (stageScores[Level]<score) {
ae5d6381 sago007 2015-12-29 13:26 45
		stageScores[Level] = score;
ae5d6381 sago007 2015-12-29 13:26 46
		stageTimes[Level] = gameEndedAfter;
ae5d6381 sago007 2015-12-29 13:26 47
	}
ae5d6381 sago007 2015-12-29 13:26 48
e8475d0d sago007 2016-02-13 09:38 49
	PhysFS::ofstream outfile;
e8475d0d sago007 2016-02-13 09:38 50
	outfile.open(stageClearSaveName, ios::binary |ios::trunc);
ae5d6381 sago007 2015-12-29 13:26 51
	if (!outfile) {
e8475d0d sago007 2016-02-13 09:38 52
		cerr << "Error writing to file: " << stageClearSaveName << endl;
ae5d6381 sago007 2015-12-29 13:26 53
	}
ae5d6381 sago007 2015-12-29 13:26 54
	else {
ae5d6381 sago007 2015-12-29 13:26 55
		for (int i=0; i<nrOfStageLevels; i++) {
ae5d6381 sago007 2015-12-29 13:26 56
			bool tempBool = stageCleared[i];
ae5d6381 sago007 2015-12-29 13:26 57
			outfile.write(reinterpret_cast<char*>(&tempBool), sizeof(bool));
ae5d6381 sago007 2015-12-29 13:26 58
		}
ae5d6381 sago007 2015-12-29 13:26 59
		for (int i=0; i<nrOfStageLevels; i++) {
ae5d6381 sago007 2015-12-29 13:26 60
			Uint32 tempUInt32 = stageScores[i];
ae5d6381 sago007 2015-12-29 13:26 61
			outfile.write(reinterpret_cast<char*>(&tempUInt32), sizeof(Uint32));
ae5d6381 sago007 2015-12-29 13:26 62
		}
ae5d6381 sago007 2015-12-29 13:26 63
		for (int i=0; i<nrOfStageLevels; i++) {
ae5d6381 sago007 2015-12-29 13:26 64
			Uint32 tempUInt32 = stageTimes[i];
ae5d6381 sago007 2015-12-29 13:26 65
			outfile.write(reinterpret_cast<char*>(&tempUInt32), sizeof(Uint32));
ae5d6381 sago007 2015-12-29 13:26 66
		}
ae5d6381 sago007 2015-12-29 13:26 67
		outfile.close();
ae5d6381 sago007 2015-12-29 13:26 68
	}
ae5d6381 sago007 2015-12-29 13:26 69
}
ae5d6381 sago007 2015-12-29 13:26 70
ae5d6381 sago007 2015-12-29 13:26 71
void LoadStageClearStages() {
ae5d6381 sago007 2015-12-29 13:26 72
	bool tempBool;
ae5d6381 sago007 2015-12-29 13:26 73
	Uint32 tempUInt32;
e8475d0d sago007 2016-02-13 09:38 74
	PhysFS::ifstream stageFile(stageClearSaveName, ios::binary);
ae5d6381 sago007 2015-12-29 13:26 75
	if (stageFile) {
ae5d6381 sago007 2015-12-29 13:26 76
		for (int i = 0; i<nrOfStageLevels; i++) {
ae5d6381 sago007 2015-12-29 13:26 77
			stageFile.read(reinterpret_cast<char*>(&tempBool),sizeof(bool));
ae5d6381 sago007 2015-12-29 13:26 78
			stageCleared[i]=tempBool;
ae5d6381 sago007 2015-12-29 13:26 79
		}
ae5d6381 sago007 2015-12-29 13:26 80
		if (!stageFile.eof()) {
ae5d6381 sago007 2015-12-29 13:26 81
			for (int i=0; i<nrOfStageLevels; i++) {
ae5d6381 sago007 2015-12-29 13:26 82
				tempUInt32 = 0;
ae5d6381 sago007 2015-12-29 13:26 83
				if (!stageFile.eof()) {
ae5d6381 sago007 2015-12-29 13:26 84
					stageFile.read(reinterpret_cast<char*>(&tempUInt32),sizeof(Uint32));
ae5d6381 sago007 2015-12-29 13:26 85
				}
ae5d6381 sago007 2015-12-29 13:26 86
				stageScores[i]=tempUInt32;
ae5d6381 sago007 2015-12-29 13:26 87
				totalScore+=tempUInt32;
ae5d6381 sago007 2015-12-29 13:26 88
			}
ae5d6381 sago007 2015-12-29 13:26 89
			for (int i=0; i<nrOfStageLevels; i++) {
ae5d6381 sago007 2015-12-29 13:26 90
				tempUInt32 = 0;
ae5d6381 sago007 2015-12-29 13:26 91
				if (!stageFile.eof()) {
ae5d6381 sago007 2015-12-29 13:26 92
					stageFile.read(reinterpret_cast<char*>(&tempUInt32),sizeof(Uint32));
ae5d6381 sago007 2015-12-29 13:26 93
				}
ae5d6381 sago007 2015-12-29 13:26 94
				stageTimes[i]=tempUInt32;
ae5d6381 sago007 2015-12-29 13:26 95
				totalTime += tempUInt32;
ae5d6381 sago007 2015-12-29 13:26 96
			}
ae5d6381 sago007 2015-12-29 13:26 97
		}
ae5d6381 sago007 2015-12-29 13:26 98
		else {
ae5d6381 sago007 2015-12-29 13:26 99
			for (int i=0; i<nrOfStageLevels; i++) {
ae5d6381 sago007 2015-12-29 13:26 100
				stageScores[i]=0;
ae5d6381 sago007 2015-12-29 13:26 101
				stageTimes[i]=0;
ae5d6381 sago007 2015-12-29 13:26 102
			}
ae5d6381 sago007 2015-12-29 13:26 103
		}
ae5d6381 sago007 2015-12-29 13:26 104
		stageFile.close();
ae5d6381 sago007 2015-12-29 13:26 105
	}
ae5d6381 sago007 2015-12-29 13:26 106
	else {
ae5d6381 sago007 2015-12-29 13:26 107
		for (int i=0; i<nrOfStageLevels; i++) {
ae5d6381 sago007 2015-12-29 13:26 108
			stageCleared[i]= false;
ae5d6381 sago007 2015-12-29 13:26 109
			stageScores[i]=0;
ae5d6381 sago007 2015-12-29 13:26 110
			stageTimes[i]=0;
ae5d6381 sago007 2015-12-29 13:26 111
		}
ae5d6381 sago007 2015-12-29 13:26 112
	}
ae5d6381 sago007 2015-12-29 13:26 113
}
ae5d6381 sago007 2015-12-29 13:26 114
ae5d6381 sago007 2015-12-29 13:26 115
int GetTotalScore() {
ae5d6381 sago007 2015-12-29 13:26 116
	return totalScore;
ae5d6381 sago007 2015-12-29 13:26 117
}
ae5d6381 sago007 2015-12-29 13:26 118
int GetTotalTime() {
ae5d6381 sago007 2015-12-29 13:26 119
	return totalTime;
ae5d6381 sago007 2015-12-29 13:26 120
}
ae5d6381 sago007 2015-12-29 13:26 121
ae5d6381 sago007 2015-12-29 13:26 122
int GetNrOfLevels() {
ae5d6381 sago007 2015-12-29 13:26 123
	return nrOfStageLevels;
ae5d6381 sago007 2015-12-29 13:26 124
}
ae5d6381 sago007 2015-12-29 13:26 125
ae5d6381 sago007 2015-12-29 13:26 126
bool IsStageCleared(int level) {
ae5d6381 sago007 2015-12-29 13:26 127
	return stageCleared.at(level);
ae5d6381 sago007 2015-12-29 13:26 128
}
ae5d6381 sago007 2015-12-29 13:26 129
ae5d6381 sago007 2015-12-29 13:26 130
ae5d6381 sago007 2015-12-29 13:26 131
int GetStageScores(int level) {
ae5d6381 sago007 2015-12-29 13:26 132
	return stageScores.at(level);
ae5d6381 sago007 2015-12-29 13:26 133
}
ae5d6381 sago007 2015-12-29 13:26 134
ae5d6381 sago007 2015-12-29 13:26 135
int GetStageTime(int level) {
ae5d6381 sago007 2015-12-29 13:26 136
	return stageTimes.at(level);
ae5d6381 sago007 2015-12-29 13:26 137
}