Parse spawn groups from tiled map data.

pull/28/head
sigonasr2 2 years ago
parent 89473d417c
commit 66d8b9050c
  1. 52
      Crawler/TMXParser.h
  2. 2
      Crawler/Version.h

@ -47,10 +47,27 @@ struct LayerTag{
}
};
struct SpawnerTag{
XMLTag ObjectData;
std::vector<XMLTag>properties;
std::string str() {
std::string displayStr=ObjectData.tag+"\n"+ObjectData.FormatTagData(ObjectData.data);
for(XMLTag tag:properties){
displayStr+=" ("+tag.FormatTagData(tag.data)+")\n";
}
return displayStr;
}
friend std::ostream& operator << (std::ostream& os, SpawnerTag& rhs) {
os << rhs.str()<<"\n";
return os; }
};
struct Map{
XMLTag MapData;
XMLTag TilesetData;
std::vector<LayerTag> LayerData;
std::vector<SpawnerTag> SpawnerData;
std::string FormatLayerData(std::ostream& os, std::vector<LayerTag>tiles) {
std::string displayStr;
for (int i=0;i<LayerData.size();i++) {
@ -58,11 +75,19 @@ struct Map{
}
return displayStr;
}
std::string FormatSpawnerData(std::ostream& os, std::vector<SpawnerTag>tiles) {
std::string displayStr;
for (int i=0;i<SpawnerData.size();i++) {
displayStr+=SpawnerData[i].str();
}
return displayStr;
}
friend std::ostream& operator << (std::ostream& os, Map& rhs) {
os <<
rhs.MapData <<"\n"<<
rhs.TilesetData <<"\n"<<
rhs.FormatLayerData(os,rhs.LayerData) <<"\n";
rhs.FormatLayerData(os,rhs.LayerData) <<"\n"<<
rhs.FormatSpawnerData(os,rhs.SpawnerData)<<"\n";
return os; }
};
@ -78,6 +103,8 @@ public:
private:
Map parsedMapInfo;
bool buildingSpawner=false;
SpawnerTag obj;
void ParseTag(std::string tag) {
XMLTag newTag;
@ -135,9 +162,28 @@ private:
if (newTag.tag=="layer") {
LayerTag l = {newTag};
parsedMapInfo.LayerData.push_back(l);
} else
if (newTag.tag=="object") {
if(buildingSpawner){
parsedMapInfo.SpawnerData.push_back(obj);
}
buildingSpawner=true;
obj={newTag};
goto spawnerResetSkip;
} else
if (newTag.tag=="property"&&buildingSpawner) {
if(newTag.data["propertytype"]=="MonsterName"){
obj.properties.push_back(newTag);
}
goto spawnerResetSkip;
} else {
std::cout<<"Unsupported tag format! Ignoring."<<"\n";
}
if(buildingSpawner){
parsedMapInfo.SpawnerData.push_back(obj);
}
buildingSpawner=false;
spawnerResetSkip:
std::cout<<"\n"<<"=============\n";
}
@ -184,6 +230,10 @@ public:
}
}
if(buildingSpawner){
parsedMapInfo.SpawnerData.push_back(obj);
}
std::cout<<"Parsed Map Data:\n"<<parsedMapInfo<<"\n";
}
};

@ -2,7 +2,7 @@
#define VERSION_MAJOR 0
#define VERSION_MINOR 2
#define VERSION_PATCH 0
#define VERSION_BUILD 100
#define VERSION_BUILD 104
#define stringify(a) stringify_(a)
#define stringify_(a) #a

Loading…
Cancel
Save