-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathLevelset.cpp
More file actions
126 lines (106 loc) · 2.79 KB
/
Levelset.cpp
File metadata and controls
126 lines (106 loc) · 2.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <vector>
#include <string>
#include <fstream>
#include <sstream>
#include "Levelset.h"
#include "Constants.h"
using namespace std;
//helper function used in ParseFile()
void Replace(string& original, string find, string replaceWith)
{
unsigned int i = string::npos;
while( (i = original.find(find)) != string::npos)
original.replace(i, find.length(),replaceWith);
}
const char* LEVELERROR = "nnnnnnnnnnnn"
"SSSnSSnnSSnn"
"SnnnSnSnSnSn"
"SnnnSnSnSnSn"
"SSSnSSnnSSnn"
"SnnnSnSnSnSn"
"SnnnSnSnSnSn"
"SSSnSnSnSnSn"
"nnnnnnnnnnnn"
"nnnnnnnnnnnn"
"nnnnnnnnnnnn"
"nnnnnnnnnnnn";
Levelset::Levelset()
{
}
Levelset::Levelset(const string& filename)
{
this->filename = filename;
ParseFile(filename);
}
void Levelset::ParseFile(const string& filename)
{
Level level;
string line;
ostringstream buffer;
levels.clear();
name = filename;
Replace(name, SETTINGSDIR, ""); //remove path
Replace(name, ".txt", ""); //remove extension
Replace(name, "_", " "); //change _ to spaces
ifstream infile(filename.c_str());
if(infile.good())
{
while(!infile.eof())
{
getline(infile, line);
//ignore blank lines, let lines starting with
// a '#' be comments
if(line.length() == 0 || line[0] == '#')
continue;
//if beginning another level
if(line.length()>=5 && line.substr(0, 5)=="name=")
{
//if level data collected previously
if(buffer.str().length() > 0)
{
level.data = buffer.str();
levels.push_back(level);
}
buffer.str("");
level.name = line.substr(5, line.length()-1);
}
else
{
buffer << line;
}
}
//if level data collected
if(buffer.str().length() > 0)
{
level.data = buffer.str();
levels.push_back(level);
}
infile.close();
}
//what, no levels?
if(levels.size() <= 0)
{
level.name = "";
level.data = LEVELERROR;
levels.push_back(level);
}
}
int Levelset::GetLevelCount()
{
return levels.size();
}
Level Levelset::GetLevel(unsigned int levelNumber)
{
if(levelNumber <= levels.size() && levelNumber > 0)
return levels[levelNumber-1];
else
{
Level level;
level.data = LEVELERROR;
return level;
}
}
string Levelset::GetSetName()
{
return name;
}