[nostalgia/core] Fix validateSubSheetIdx
This commit is contained in:
parent
dcad44403e
commit
2180f7bf6f
@ -238,7 +238,7 @@ ox::Error resizeSubsheet(TileSheet::SubSheet &ss, int8_t pBpp, ox::Size const&sz
|
|||||||
* @return a valid version of idx
|
* @return a valid version of idx
|
||||||
*/
|
*/
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
TileSheet::SubSheetIdx validateSubSheetIdx(TileSheet const&ts, TileSheet::SubSheetIdx const&idx) noexcept;
|
TileSheet::SubSheetIdx validateSubSheetIdx(TileSheet const&ts, TileSheet::SubSheetIdx idx) noexcept;
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
TileSheet::SubSheet const&getSubSheet(
|
TileSheet::SubSheet const&getSubSheet(
|
||||||
|
@ -191,27 +191,28 @@ ox::Result<ox::StringView> getNameFor(TileSheet::SubSheet const&ss, SubSheetId p
|
|||||||
|
|
||||||
|
|
||||||
TileSheet::SubSheetIdx validateSubSheetIdx(
|
TileSheet::SubSheetIdx validateSubSheetIdx(
|
||||||
TileSheet::SubSheetIdx const&pIdx,
|
TileSheet::SubSheetIdx &&pIdx,
|
||||||
std::size_t pIdxIt,
|
std::size_t pIdxIt,
|
||||||
TileSheet::SubSheet const&pSubsheet) noexcept {
|
TileSheet::SubSheet const&pSubsheet) noexcept {
|
||||||
if (pIdxIt == pIdx.size()) {
|
if (pIdxIt >= pIdx.size()) {
|
||||||
return pIdx;
|
return std::move(pIdx);
|
||||||
}
|
}
|
||||||
const auto currentIdx = pIdx[pIdxIt];
|
auto ¤tIdx = pIdx[pIdxIt];
|
||||||
if (pSubsheet.subsheets.size() <= currentIdx) {
|
if (pSubsheet.subsheets.size() <= currentIdx) {
|
||||||
auto out = pIdx;
|
if (pSubsheet.subsheets.empty()) {
|
||||||
if (!pSubsheet.subsheets.empty()) {
|
// currentIdx could not be repaired, remove
|
||||||
*out.back().value = pSubsheet.subsheets.size() - 1;
|
// this and all succeeding idxs and return
|
||||||
|
pIdx.resize(pIdxIt);
|
||||||
|
return std::move(pIdx);
|
||||||
} else {
|
} else {
|
||||||
out.pop_back();
|
currentIdx = pSubsheet.subsheets.size() - 1;
|
||||||
}
|
}
|
||||||
return out;
|
|
||||||
}
|
}
|
||||||
return validateSubSheetIdx(pIdx, pIdxIt + 1, pSubsheet.subsheets[pIdx[pIdxIt]]);
|
return validateSubSheetIdx(std::move(pIdx), pIdxIt + 1, pSubsheet.subsheets[currentIdx]);
|
||||||
}
|
}
|
||||||
|
|
||||||
TileSheet::SubSheetIdx validateSubSheetIdx(TileSheet const&ts, TileSheet::SubSheetIdx const&idx) noexcept {
|
TileSheet::SubSheetIdx validateSubSheetIdx(TileSheet const&ts, TileSheet::SubSheetIdx idx) noexcept {
|
||||||
return validateSubSheetIdx(idx, 0, ts.subsheet);
|
return validateSubSheetIdx(std::move(idx), 0, ts.subsheet);
|
||||||
}
|
}
|
||||||
|
|
||||||
const TileSheet::SubSheet &getSubSheet(
|
const TileSheet::SubSheet &getSubSheet(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user