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

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

Loading…
Cancel
Save