#pragma once #include "openroller/psp/SongCatalog.hpp" #include #include namespace openroller::psp { struct SongMenu { void* catalogStorage = nullptr; std::size_t catalogSize = 0; const SongCatalogHeader* header = nullptr; const SongCatalogRecord* songs = nullptr; int selection = 0; int difficulty = 0; bool difficultyMode = false; void* jacketStorage = nullptr; std::size_t jacketSize = 0; const std::uint16_t* jacketPixels = nullptr; std::uint16_t jacketWidth = 0; std::uint16_t jacketHeight = 0; char rootPath[256]{}; }; bool loadSongMenu(const char* catalogPath, SongMenu* menu, char* error, std::size_t errorCapacity); void unloadSongMenu(SongMenu* menu); bool moveSongSelection(SongMenu* menu, int delta); bool moveDifficultySelection(SongMenu* menu, int delta); const SongCatalogRecord* selectedSong(const SongMenu& menu); bool selectedSongPath(const SongMenu& menu, char* output, std::size_t capacity); bool selectedAudioPath(const SongMenu& menu, char* output, std::size_t capacity); bool selectedShotAudioPath(const SongMenu& menu, char* output, std::size_t capacity); } // namespace openroller::psp