diff options
Diffstat (limited to 'src/world.cpp')
-rw-r--r-- | src/world.cpp | 58 |
1 files changed, 57 insertions, 1 deletions
diff --git a/src/world.cpp b/src/world.cpp index 9b1e4f6..3b6bd41 100644 --- a/src/world.cpp +++ b/src/world.cpp | |||
@@ -63,6 +63,10 @@ World::World(std::string filename) | |||
63 | xmlFree(key); | 63 | xmlFree(key); |
64 | 64 | ||
65 | std::vector<int> mapTiles; | 65 | std::vector<int> mapTiles; |
66 | Map::Adjacent leftAdj; | ||
67 | Map::Adjacent rightAdj; | ||
68 | Map::Adjacent upAdj; | ||
69 | Map::Adjacent downAdj; | ||
66 | 70 | ||
67 | for (xmlNodePtr mapNode = node->xmlChildrenNode; | 71 | for (xmlNodePtr mapNode = node->xmlChildrenNode; |
68 | mapNode != nullptr; | 72 | mapNode != nullptr; |
@@ -82,6 +86,54 @@ World::World(std::string filename) | |||
82 | } | 86 | } |
83 | 87 | ||
84 | xmlFree(key); | 88 | xmlFree(key); |
89 | } else if (!xmlStrcmp( | ||
90 | mapNode->name, | ||
91 | reinterpret_cast<const xmlChar*>("adjacent"))) | ||
92 | { | ||
93 | key = getProp(mapNode, "type"); | ||
94 | std::string adjTypeStr(reinterpret_cast<char*>(key)); | ||
95 | xmlFree(key); | ||
96 | |||
97 | Map::Adjacent::Type adjType; | ||
98 | if (adjTypeStr == "wall") | ||
99 | { | ||
100 | adjType = Map::Adjacent::Type::wall; | ||
101 | } else if (adjTypeStr == "wrap") | ||
102 | { | ||
103 | adjType = Map::Adjacent::Type::wrap; | ||
104 | } else if (adjTypeStr == "warp") | ||
105 | { | ||
106 | adjType = Map::Adjacent::Type::warp; | ||
107 | } else if (adjTypeStr == "reverseWarp") | ||
108 | { | ||
109 | adjType = Map::Adjacent::Type::reverse; | ||
110 | } else { | ||
111 | throw std::logic_error("Invalid adjacency type"); | ||
112 | } | ||
113 | |||
114 | key = getProp(mapNode, "map"); | ||
115 | int adjMapId = atoi(reinterpret_cast<char*>(key)); | ||
116 | xmlFree(key); | ||
117 | |||
118 | key = getProp(mapNode, "dir"); | ||
119 | std::string adjDir(reinterpret_cast<char*>(key)); | ||
120 | xmlFree(key); | ||
121 | |||
122 | if (adjDir == "left") | ||
123 | { | ||
124 | leftAdj = {adjType, adjMapId}; | ||
125 | } else if (adjDir == "right") | ||
126 | { | ||
127 | rightAdj = {adjType, adjMapId}; | ||
128 | } else if (adjDir == "up") | ||
129 | { | ||
130 | upAdj = {adjType, adjMapId}; | ||
131 | } else if (adjDir == "down") | ||
132 | { | ||
133 | downAdj = {adjType, adjMapId}; | ||
134 | } else { | ||
135 | throw std::logic_error("Invalid adjacency direction"); | ||
136 | } | ||
85 | } | 137 | } |
86 | } | 138 | } |
87 | 139 | ||
@@ -91,7 +143,11 @@ World::World(std::string filename) | |||
91 | std::forward_as_tuple( | 143 | std::forward_as_tuple( |
92 | mapId, | 144 | mapId, |
93 | std::move(mapTiles), | 145 | std::move(mapTiles), |
94 | std::move(mapTitle))); | 146 | std::move(mapTitle), |
147 | leftAdj, | ||
148 | rightAdj, | ||
149 | upAdj, | ||
150 | downAdj)); | ||
95 | } | 151 | } |
96 | } | 152 | } |
97 | 153 | ||