[jasper/world/studio/worldobjectseteditor] Make palette removal update object palette refs
This commit is contained in:
parent
dc9d7f2082
commit
d16a6e1659
@ -9,14 +9,30 @@
|
|||||||
|
|
||||||
namespace jasper::world {
|
namespace jasper::world {
|
||||||
|
|
||||||
RmPalette::RmPalette(WorldObjectSet &doc, size_t rmIdx) noexcept:
|
RmPalette::RmPalette(WorldObjectSet &doc, size_t const rmIdx) noexcept:
|
||||||
m_doc(doc),
|
m_doc(doc),
|
||||||
m_rmIdx(rmIdx) {
|
m_rmIdx(rmIdx) {
|
||||||
|
m_objUpdates.reserve(m_doc.objects.size());
|
||||||
|
for (size_t i = 0; auto const&obj : m_doc.objects) {
|
||||||
|
if (obj.palBank >= m_rmIdx) {
|
||||||
|
auto const newPalBank = static_cast<uint16_t>(obj.palBank == m_rmIdx ?
|
||||||
|
0 : obj.palBank - 1);
|
||||||
|
m_objUpdates.emplace_back(ObjUpdate{
|
||||||
|
.idx = i,
|
||||||
|
.oldPalBank = obj.palBank,
|
||||||
|
.newPalBank = newPalBank,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ox::Error RmPalette::redo() noexcept {
|
ox::Error RmPalette::redo() noexcept {
|
||||||
m_pal = std::move(m_doc.palettes[m_rmIdx]);
|
m_pal = std::move(m_doc.palettes[m_rmIdx]);
|
||||||
std::ignore = m_doc.palettes.erase(m_rmIdx);
|
std::ignore = m_doc.palettes.erase(m_rmIdx);
|
||||||
|
for (auto const&u : m_objUpdates) {
|
||||||
|
m_doc.objects[u.idx].palBank = u.newPalBank;
|
||||||
|
}
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -26,6 +42,9 @@ ox::Error RmPalette::undo() noexcept {
|
|||||||
[](ox::FileAddress const&a, ox::FileAddress const&b) {
|
[](ox::FileAddress const&a, ox::FileAddress const&b) {
|
||||||
return a.getPath().or_value("") < b.getPath().or_value("");
|
return a.getPath().or_value("") < b.getPath().or_value("");
|
||||||
});
|
});
|
||||||
|
for (auto const&u : m_objUpdates) {
|
||||||
|
m_doc.objects[u.idx].palBank = u.oldPalBank;
|
||||||
|
}
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,6 +17,12 @@ class RmPalette: public studio::UndoCommand {
|
|||||||
WorldObjectSet &m_doc;
|
WorldObjectSet &m_doc;
|
||||||
ox::FileAddress m_pal;
|
ox::FileAddress m_pal;
|
||||||
size_t const m_rmIdx = 0;
|
size_t const m_rmIdx = 0;
|
||||||
|
struct ObjUpdate {
|
||||||
|
size_t idx{};
|
||||||
|
uint16_t oldPalBank{};
|
||||||
|
uint16_t newPalBank{};
|
||||||
|
};
|
||||||
|
ox::Vector<ObjUpdate> m_objUpdates;
|
||||||
public:
|
public:
|
||||||
RmPalette(WorldObjectSet &doc, size_t rmIdx) noexcept;
|
RmPalette(WorldObjectSet &doc, size_t rmIdx) noexcept;
|
||||||
ox::Error redo() noexcept override;
|
ox::Error redo() noexcept override;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user