[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 {
|
||||
|
||||
RmPalette::RmPalette(WorldObjectSet &doc, size_t rmIdx) noexcept:
|
||||
RmPalette::RmPalette(WorldObjectSet &doc, size_t const rmIdx) noexcept:
|
||||
m_doc(doc),
|
||||
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 {
|
||||
m_pal = std::move(m_doc.palettes[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 {};
|
||||
}
|
||||
|
||||
@ -26,6 +42,9 @@ ox::Error RmPalette::undo() noexcept {
|
||||
[](ox::FileAddress const&a, ox::FileAddress const&b) {
|
||||
return a.getPath().or_value("") < b.getPath().or_value("");
|
||||
});
|
||||
for (auto const&u : m_objUpdates) {
|
||||
m_doc.objects[u.idx].palBank = u.oldPalBank;
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
|
@ -17,6 +17,12 @@ class RmPalette: public studio::UndoCommand {
|
||||
WorldObjectSet &m_doc;
|
||||
ox::FileAddress m_pal;
|
||||
size_t const m_rmIdx = 0;
|
||||
struct ObjUpdate {
|
||||
size_t idx{};
|
||||
uint16_t oldPalBank{};
|
||||
uint16_t newPalBank{};
|
||||
};
|
||||
ox::Vector<ObjUpdate> m_objUpdates;
|
||||
public:
|
||||
RmPalette(WorldObjectSet &doc, size_t rmIdx) noexcept;
|
||||
ox::Error redo() noexcept override;
|
||||
|
Loading…
x
Reference in New Issue
Block a user