1
0
mirror of https://github.com/ScrelliCopter/tmx2gba.git synced 2025-02-21 03:29:25 +11:00

implement remaining encodings

This commit is contained in:
2024-04-10 20:31:55 +10:00
parent 677d59f096
commit 835b80256f

View File

@@ -204,13 +204,18 @@ void TmxMap::ReadLayer(const pugi::xml_node& xNode)
} }
else if (compression == Compression::NONE) else if (compression == Compression::NONE)
{ {
//TODO tileDat.reserve(numTiles);
return; const auto end = decoded.value().end();
} for (auto it = decoded.value().begin(); it < end - 3;)
else {
{ uint32_t tile = static_cast<uint32_t>(static_cast<uint8_t>(*it++));
return; tile |= static_cast<uint32_t>(static_cast<uint8_t>(*it++)) << 8u;
tile |= static_cast<uint32_t>(static_cast<uint8_t>(*it++)) << 16u;
tile |= static_cast<uint32_t>(static_cast<uint8_t>(*it++)) << 24u;
tileDat.emplace_back(tile);
}
} }
else { return; }
} }
else if (encoding == Encoding::XML) else if (encoding == Encoding::XML)
{ {
@@ -218,11 +223,25 @@ void TmxMap::ReadLayer(const pugi::xml_node& xNode)
std::ranges::transform(xData.children("tile"), std::back_inserter(tileDat), [](auto it) std::ranges::transform(xData.children("tile"), std::back_inserter(tileDat), [](auto it)
-> uint32_t { return UintFromStr<uint32_t>(it.attribute("gid").value()).value_or(0); }); -> uint32_t { return UintFromStr<uint32_t>(it.attribute("gid").value()).value_or(0); });
} }
else else if (encoding == Encoding::CSV)
{ {
//TODO tileDat.reserve(numTiles);
return; const std::string_view csv(xData.child_value());
std::string::size_type pos = 0;
while (true)
{
// TODO: check if this has a problem on other locales?
auto gid = UintFromStr<uint32_t>(csv.substr(pos).data());
if (gid.has_value())
tileDat.emplace_back(gid.value());
if ((pos = csv.find(',', pos)) == std::string::npos)
break;
++pos;
}
} }
else { return; }
mLayers.emplace_back(TmxLayer(width, height, name, std::move(tileDat))); mLayers.emplace_back(TmxLayer(width, height, name, std::move(tileDat)));
} }