skins: SkinManager + hot-swap (F7), classic/nes a data/skins/

This commit is contained in:
2026-05-17 19:54:07 +02:00
parent a40931c7ca
commit ebfcad6f22
125 changed files with 962 additions and 76 deletions
+25
View File
@@ -6,6 +6,7 @@
#include <iostream> // for basic_ostream, operator<<, cout, endl
#include "core/resources/resource_helper.h"
#include "core/resources/skin_manager.hpp"
// Instancia única
Asset *Asset::instance = nullptr;
@@ -41,6 +42,30 @@ void Asset::add(const std::string &file, Type type, bool required, bool absolute
longest_name_ = SDL_max(longest_name_, FILE_NAME.size());
}
// Afegeix un asset gfx skin-aware: el path complet es composa via
// SkinManager (que ja inclou el PREFIX de plataforma) i guardem el
// basename per a poder-lo recomposar quan canviï la skin activa.
void Asset::addSkinAware(const std::string &basename, Type type, bool required) {
Item temp;
temp.file = executable_path_ + SkinManager::get()->gfxPath(basename);
temp.type = type;
temp.required = required;
temp.skin_basename = basename;
file_list_.push_back(temp);
longest_name_ = SDL_max(longest_name_, basename.size());
}
// Recomposa els paths dels items skin-aware amb l'skin actual del
// SkinManager. Cridat per Resource::reloadForSkin després d'un canvi.
void Asset::onSkinChanged() {
for (auto &it : file_list_) {
if (!it.skin_basename.empty()) {
it.file = executable_path_ + SkinManager::get()->gfxPath(it.skin_basename);
}
}
}
// Devuelve el fichero de un elemento de la lista a partir de una cadena
auto Asset::get(const std::string &text) -> std::string {
for (const auto &f : file_list_) {