16using ImGui::BeginTable;
19using ImGui::Selectable;
20using ImGui::Separator;
21using ImGui::TableHeadersRow;
22using ImGui::TableNextColumn;
23using ImGui::TableNextRow;
24using ImGui::TableSetupColumn;
31 card_manager.RegisterCard({
32 .card_id =
"sprite.vanilla_editor",
33 .display_name =
"Vanilla Sprites",
36 .shortcut_hint =
"Alt+Shift+1",
41 card_manager.RegisterCard({
42 .card_id =
"sprite.custom_editor",
43 .display_name =
"Custom Sprites",
46 .shortcut_hint =
"Alt+Shift+2",
54 return absl::OkStatus();
103 if (ImGui::BeginTable(
"##SpriteCanvasTable", 3, ImGuiTableFlags_Resizable,
105 TableSetupColumn(
"Sprites List", ImGuiTableColumnFlags_WidthFixed, 256);
106 TableSetupColumn(
"Canvas", ImGuiTableColumnFlags_WidthStretch,
107 ImGui::GetContentRegionAvail().x);
108 TableSetupColumn(
"Tile Selector", ImGuiTableColumnFlags_WidthFixed, 256);
116 static int next_tab_id = 0;
137 if (ImGui::BeginTabItem(
139 ImGuiTabItemFlags_None)) {
162 static bool flip_x =
false;
163 static bool flip_y =
false;
164 if (ImGui::BeginChild(
gui::GetID(
"##SpriteCanvas"),
165 ImGui::GetContentRegionAvail(),
true)) {
173 if (ImGui::BeginTable(
"##OAMTable", 7, ImGuiTableFlags_Resizable,
175 TableSetupColumn(
"X", ImGuiTableColumnFlags_WidthStretch);
176 TableSetupColumn(
"Y", ImGuiTableColumnFlags_WidthStretch);
177 TableSetupColumn(
"Tile", ImGuiTableColumnFlags_WidthStretch);
178 TableSetupColumn(
"Palette", ImGuiTableColumnFlags_WidthStretch);
179 TableSetupColumn(
"Priority", ImGuiTableColumnFlags_WidthStretch);
180 TableSetupColumn(
"Flip X", ImGuiTableColumnFlags_WidthStretch);
181 TableSetupColumn(
"Flip Y", ImGuiTableColumnFlags_WidthStretch);
201 if (ImGui::Checkbox(
"##XFlip", &flip_x)) {
206 if (ImGui::Checkbox(
"##YFlip", &flip_y)) {
222 if (ImGui::BeginChild(
gui::GetID(
"sheet_label"),
223 ImVec2(ImGui::GetContentRegionAvail().x, 0),
true,
224 ImGuiWindowFlags_NoDecoration)) {
225 for (
int i = 0; i < 8; i++) {
226 std::string sheet_label = absl::StrFormat(
"Sheet %d", i);
228 if (i % 2 == 0) ImGui::SameLine();
234 for (
int i = 0; i < 8; i++) {
246 if (ImGui::BeginChild(
gui::GetID(
"##SpritesList"),
247 ImVec2(ImGui::GetContentRegionAvail().x, 0),
true,
248 ImGuiWindowFlags_NoDecoration)) {
250 for (
const auto each_sprite_name : zelda3::kSpriteDefaultNames) {
253 zelda3::kSpriteDefaultNames[i].data());
254 if (ImGui::IsItemClicked()) {
267 if (ImGui::Button(
"Add Frame")) {
270 if (ImGui::Button(
"Remove Frame")) {
276 if (BeginTable(
"##CustomSpritesTable", 3,
277 ImGuiTableFlags_Resizable | ImGuiTableFlags_Borders |
278 ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable,
280 TableSetupColumn(
"Metadata", ImGuiTableColumnFlags_WidthFixed, 256);
281 TableSetupColumn(
"Canvas", ImGuiTableColumnFlags_WidthFixed, 256);
282 TableSetupColumn(
"TIlesheets", ImGuiTableColumnFlags_WidthFixed, 256);
303 if (ImGui::Button(
"Open ZSprite")) {
306 if (!file_path.empty()) {
316 Selectable(
"%s", custom_sprite.sprName.c_str());
317 if (ImGui::IsItemClicked()) {
328 Text(
"Sprite ID: %s", custom_sprite.property_sprid.Text.c_str());
329 Text(
"Sprite Name: %s", custom_sprite.property_sprname.Text.c_str());
330 Text(
"Sprite Palette: %s", custom_sprite.property_palette.Text.c_str());
core::ResourceLabelManager * resource_label()
std::string MakeCardTitle(const std::string &base_title) const
ImVector< int > active_sprites_
bool show_vanilla_editor_
void DrawAnimationFrames()
Draws the animation frames manager.
void DrawCurrentSheets()
Draws the current sheets.
void DrawSpriteCanvas()
Draws the sprite canvas.
absl::Status Update() override
void DrawSpritesList()
Draws the sprites list.
void Initialize() override
void DrawVanillaSpriteEditor()
uint8_t current_sheets_[8]
gui::Canvas graphics_sheet_canvas_
std::vector< zsprite::ZSprite > custom_sprites_
void DrawCustomSpritesMetadata()
gui::Canvas sprite_canvas_
absl::Status Load() override
RAII timer for automatic timing management.
void DrawBitmap(Bitmap &bitmap, int border_offset, float scale)
bool DrawTileSelector(int size, int size_y=0)
void DrawBackground(ImVec2 canvas_size=ImVec2(0, 0))
void DrawGrid(float grid_step=64.0f, int tile_id_offset=8)
static EditorCardManager & Get()
Draggable, dockable card for editor sub-windows.
bool Begin(bool *p_open=nullptr)
static std::string ShowOpenFileDialog()
ShowOpenFileDialog opens a file dialog and returns the selected filepath. Uses global feature flag to...
#define ICON_MD_ADD_MODERATOR
#define ICON_MD_PEST_CONTROL_RODENT
#define ICON_MD_ADD_CIRCLE
#define ICON_MD_SMART_TOY
constexpr ImGuiTabBarFlags kSpriteTabBarFlags
void VerticalSpacing(float pixels)
bool InputHexWord(const char *label, uint16_t *data, float input_width, bool no_step)
ImGuiID GetID(const std::string &id)
bool InputHexByte(const char *label, uint8_t *data, float input_width, bool no_step)
std::string HexByte(uint8_t byte, HexStringParams params)
Main namespace for the application.
void SelectableLabelWithNameEdit(bool selected, const std::string &type, const std::string &key, const std::string &defaultValue)
absl::Status Load(const std::string &filename)