18
18
// 02110-1301, USA.
21
#include "SmallTile.h"
22
22
#include <iostream>
25
std::string Tile::d_tag = "tile";
24
27
using namespace std;
28
32
d_type = Tile::GRASS;
29
d_pattern = Tile::SOLID;
34
d_smalltile = new SmallTile();
36
37
Tile::Tile(XML_Helper* helper)
40
39
helper->getData(d_name, "name");
41
40
helper->getData(d_moves, "moves");
42
helper->getData(i, "type");
43
d_type = static_cast<Tile::Type>(i);
42
helper->getData(type_str, "type");
43
d_type = tileTypeFromString(type_str);
47
46
bool Tile::save(XML_Helper *helper)
49
48
bool retval = true;
51
retval &= helper->openTag("tile");
50
retval &= helper->openTag(d_tag);
52
51
retval &= helper->saveData("name", d_name);
53
52
retval &= helper->saveData("moves", d_moves);
54
retval &= helper->saveData("type", d_type);
55
retval &= helper->openTag("smallmap");
58
//patterns with a single colour
60
retval &= helper->saveData("red", d_color.r);
61
retval &= helper->saveData("green", d_color.g);
62
retval &= helper->saveData("blue", d_color.b);
64
//patterns with two colours
65
case STIPPLED: case SUNKEN:
66
retval &= helper->saveData("red", d_color.r);
67
retval &= helper->saveData("green", d_color.g);
68
retval &= helper->saveData("blue", d_color.b);
69
retval &= helper->saveData("2nd_red", d_second_color.r);
70
retval &= helper->saveData("2nd_green", d_second_color.g);
71
retval &= helper->saveData("2nd_blue", d_second_color.b);
73
//patterns with three colours
74
case RANDOMIZED: case TABLECLOTH:
75
retval &= helper->saveData("red", d_color.r);
76
retval &= helper->saveData("green", d_color.g);
77
retval &= helper->saveData("blue", d_color.b);
78
retval &= helper->saveData("2nd_red", d_second_color.r);
79
retval &= helper->saveData("2nd_green", d_second_color.g);
80
retval &= helper->saveData("2nd_blue", d_second_color.b);
81
retval &= helper->saveData("3rd_red", d_third_color.r);
82
retval &= helper->saveData("3rd_green", d_third_color.g);
83
retval &= helper->saveData("3rd_blue", d_third_color.b);
86
retval &= helper->closeTag();
53
std::string type_str = tileTypeToString(Tile::Type(d_type));
54
retval &= helper->saveData("type", type_str);
55
retval &= d_smalltile->save(helper);
87
56
for (Tile::iterator i = begin(); i != end(); ++i)
88
57
retval &= (*i)->save(helper);
89
58
retval &= helper->closeTag();
146
112
return tilestyles[rand() % tilestyles.size()];
115
std::string Tile::tileTypeToString(const Tile::Type type)
120
return "Tile::GRASS";
122
return "Tile::WATER";
124
return "Tile::FOREST";
126
return "Tile::HILLS";
128
return "Tile::MOUNTAIN";
130
return "Tile::SWAMP";
134
return "Tile::GRASS";
137
Tile::Type Tile::tileTypeFromString(const std::string str)
139
if (str.size() > 0 && isdigit(str.c_str()[0]))
140
return Tile::Type(atoi(str.c_str()));
141
if (str == "Tile::GRASS")
143
else if (str == "Tile::WATER")
145
else if (str == "Tile::FOREST")
147
else if (str == "Tile::HILLS")
149
else if (str == "Tile::MOUNTAIN")
150
return Tile::MOUNTAIN;
151
else if (str == "Tile::SWAMP")
153
else if (str == "Tile::VOID")
159
bool Tile::validateGrass(std::list<TileStyle::Type> types)
161
//grass tiles only have lone styles and other styles.
162
for (std::list<TileStyle::Type>::iterator it = types.begin();
163
it != types.end(); it++)
165
if ((*it) != TileStyle::LONE && (*it) != TileStyle::OTHER)
171
bool Tile::validateFeature(std::list<TileStyle::Type> types)
173
//forest, water and hill tiles have a full suite of styles
174
//"other" styles are optional.
175
if (types.size() == TileStyle::OTHER)
177
if (types.size() == TileStyle::OTHER - 1 &&
178
find (types.begin(), types.end(), TileStyle::OTHER) == types.end())
183
bool Tile::consistsOnlyOfLoneAndOtherStyles()
185
std::list<TileStyle::Type> types;
186
for (Tile::iterator i = begin(); i != end(); ++i)
187
(*i)->getUniqueTileStyleTypes(types);
188
return validateGrass(types);
190
bool Tile::validate()
195
for (Tile::iterator i = begin(); i != end(); ++i)
196
if ((*i)->validate() == false)
199
std::list<TileStyle::Type> types;
200
for (Tile::iterator i = begin(); i != end(); ++i)
201
(*i)->getUniqueTileStyleTypes(types);
209
if (validateGrass(types) == false)
212
case Tile::FOREST: case Tile::WATER: case Tile::HILLS:
213
case Tile::SWAMP: case Tile::VOID: case Tile::MOUNTAIN:
214
if (validateFeature(types) == false)
216
if (validateGrass(types) == false)