[nostalgia/core] Fix build, add SubSheet ID to SubSheet Editor view
All checks were successful
Build / build (push) Successful in 2m5s

This commit is contained in:
Gary Talent 2023-12-26 16:37:09 -06:00
parent 087c834b25
commit 9c19655ce2
4 changed files with 30 additions and 27 deletions

View File

@ -205,12 +205,13 @@ void TileSheetEditorImGui::draw(turbine::Context&) noexcept {
}
TileSheet::SubSheetIdx path;
static constexpr auto flags = ImGuiTableFlags_RowBg | ImGuiTableFlags_NoBordersInBody;
if (ImGui::BeginTable("Subsheets", 3, flags)) {
if (ImGui::BeginTable("Subsheets", 4, flags)) {
ImGui::TableSetupColumn("Subsheet", ImGuiTableColumnFlags_NoHide);
ImGui::TableSetupColumn("Columns", ImGuiTableColumnFlags_WidthFixed, 50);
ImGui::TableSetupColumn("Rows", ImGuiTableColumnFlags_WidthFixed, 50);
ImGui::TableSetupColumn("ID", ImGuiTableColumnFlags_NoHide);
ImGui::TableHeadersRow();
drawSubsheetSelector(&m_view.img().subsheet, &path);
drawSubsheetSelector(m_view.img().subsheet, path);
ImGui::EndTable();
}
}
@ -221,44 +222,46 @@ void TileSheetEditorImGui::draw(turbine::Context&) noexcept {
m_exportMenu.draw();
}
void TileSheetEditorImGui::drawSubsheetSelector(TileSheet::SubSheet *subsheet, TileSheet::SubSheetIdx *path) {
void TileSheetEditorImGui::drawSubsheetSelector(TileSheet::SubSheet &subsheet, TileSheet::SubSheetIdx &path) {
ImGui::TableNextRow(0, 5);
using Str = ox::BasicString<100>;
auto pathStr = ox::join<Str>("##", *path).value;
auto lbl = ox::sfmt<Str>("{}##{}", subsheet->name, pathStr);
const auto rowSelected = *path == m_model.activeSubSheetIdx();
auto pathStr = ox::join<Str>("##", path).value;
auto lbl = ox::sfmt<Str>("{}##{}", subsheet.name, pathStr);
const auto rowSelected = path == m_model.activeSubSheetIdx();
const auto flags = ImGuiTreeNodeFlags_SpanFullWidth
| ImGuiTreeNodeFlags_OpenOnArrow
| ImGuiTreeNodeFlags_DefaultOpen
| (subsheet->subsheets.empty() ? ImGuiTreeNodeFlags_Leaf : 0)
| (subsheet.subsheets.empty() ? ImGuiTreeNodeFlags_Leaf : 0)
| (rowSelected ? ImGuiTreeNodeFlags_Selected : 0);
ImGui::TableNextColumn();
const auto open = ImGui::TreeNodeEx(lbl.c_str(), flags);
ImGui::SameLine();
if (ImGui::IsItemClicked()) {
m_model.setActiveSubsheet(*path);
m_model.setActiveSubsheet(path);
}
if (ImGui::IsMouseDoubleClicked(0) && ImGui::IsItemHovered()) {
showSubsheetEditor();
}
if (subsheet->subsheets.empty()) {
if (subsheet.subsheets.empty()) {
ImGui::TableNextColumn();
ImGui::Text("%d", subsheet->columns);
ImGui::Text("%d", subsheet.columns);
ImGui::TableNextColumn();
ImGui::Text("%d", subsheet->rows);
ImGui::Text("%d", subsheet.rows);
} else {
ImGui::TableNextColumn();
ImGui::Text("--");
ImGui::TableNextColumn();
ImGui::Text("--");
}
ImGui::TableNextColumn();
ImGui::Text("%d", subsheet.id);
if (open) {
for (auto i = 0ul; auto &child : subsheet->subsheets) {
path->push_back(i);
for (auto i = 0ul; auto &child : subsheet.subsheets) {
path.push_back(i);
ImGui::PushID(static_cast<int>(i));
drawSubsheetSelector(&child, path);
drawSubsheetSelector(child, path);
ImGui::PopID();
path->pop_back();
path.pop_back();
++i;
}
ImGui::TreePop();

View File

@ -83,7 +83,7 @@ class TileSheetEditorImGui: public studio::Editor {
void draw(turbine::Context&) noexcept override;
void drawSubsheetSelector(TileSheet::SubSheet*, TileSheet::SubSheetIdx *path);
void drawSubsheetSelector(TileSheet::SubSheet&, TileSheet::SubSheetIdx &path);
[[nodiscard]]
static ox::Vec2 clickPos(ImVec2 const&winPos, ox::Vec2 clickPos) noexcept;

View File

@ -239,7 +239,7 @@ void TileSheetEditorModel::ackUpdate() noexcept {
ox::Error TileSheetEditorModel::saveFile() noexcept {
const auto sctx = applicationData<studio::StudioContext>(m_ctx);
return sctx->project->writeObj(m_path, m_img);
return sctx->project->writeObj(m_path, m_img, ox::ClawFormat::Organic);
}
bool TileSheetEditorModel::pixelSelected(std::size_t idx) const noexcept {

View File

@ -61,7 +61,7 @@ std::size_t TileSheet::SubSheet::idx(ox::Point const&pt) const noexcept {
return ptToIdx(pt, columns);
}
void TileSheet::SubSheet::readPixelsTo(ox::Vector<uint8_t> *pPixels, int8_t pBpp) const noexcept {
void TileSheet::SubSheet::readPixelsTo(ox::Vector<uint8_t> &pPixels, int8_t pBpp) const noexcept {
if (!subsheets.empty()) {
for (auto &s: subsheets) {
s.readPixelsTo(pPixels);
@ -69,25 +69,25 @@ void TileSheet::SubSheet::readPixelsTo(ox::Vector<uint8_t> *pPixels, int8_t pBpp
} else {
if (pBpp == 4) {
for (auto p: this->pixels) {
pPixels->emplace_back(static_cast<uint8_t>(p & 0b1111));
pPixels->emplace_back(static_cast<uint8_t>(p >> 4));
pPixels.emplace_back(static_cast<uint8_t>(p & 0b1111));
pPixels.emplace_back(static_cast<uint8_t>(p >> 4));
}
} else {
for (auto p: this->pixels) {
pPixels->emplace_back(p);
pPixels.emplace_back(p);
}
}
}
}
void TileSheet::SubSheet::readPixelsTo(ox::Vector<uint8_t> *pPixels) const noexcept {
void TileSheet::SubSheet::readPixelsTo(ox::Vector<uint8_t> &pPixels) const noexcept {
if (!subsheets.empty()) {
for (auto &s: subsheets) {
s.readPixelsTo(pPixels);
}
} else {
for (auto p : this->pixels) {
pPixels->emplace_back(p);
pPixels.emplace_back(p);
}
}
}
@ -299,10 +299,10 @@ TileSheet::SubSheet &TileSheet::getSubSheet(TileSheet::SubSheetIdx const&idx) no
ox::Error TileSheet::addSubSheet(TileSheet::SubSheetIdx const&idx) noexcept {
auto &parent = getSubSheet(idx);
if (parent.subsheets.size() < 2) {
parent.subsheets.emplace_back(idIt++, ox::sfmt("Subsheet {}", parent.subsheets.size()), 1, 1, bpp);
parent.subsheets.emplace_back(++idIt, ox::sfmt("Subsheet {}", parent.subsheets.size()), 1, 1, bpp);
} else {
parent.subsheets.emplace_back(idIt++, "Subsheet 0", parent.columns, parent.rows, bpp);
parent.subsheets.emplace_back(idIt++, "Subsheet 1", 1, 1, bpp);
parent.subsheets.emplace_back(++idIt, "Subsheet 0", parent.columns, parent.rows, bpp);
parent.subsheets.emplace_back(++idIt, "Subsheet 1", 1, 1, bpp);
}
return OxError(0);
}
@ -353,7 +353,7 @@ ox::Result<ox::StringView> TileSheet::getNameFor(SubSheetId pId) const noexcept
ox::Vector<uint8_t> TileSheet::pixels() const noexcept {
ox::Vector<uint8_t> out;
subsheet.readPixelsTo(&out);
subsheet.readPixelsTo(out);
return out;
}