fix(input): mou gamecontrollerdb.txt a l'arrel i el copia al build/ via CMake

This commit is contained in:
JailDesigner committed 2026-04-25 10:36:55 +02:00
1 parent c77f90f6b6
commit 91614fc545
4 files changed
+38 -11

No files matched your search

+20
View File
@@ -203,6 +203,26 @@ add_custom_command(
add_custom_target(resource_pack ALL DEPENDS ${RESOURCE_PACK}) add_custom_target(resource_pack ALL DEPENDS ${RESOURCE_PACK})
add_dependencies(${PROJECT_NAME} resource_pack) add_dependencies(${PROJECT_NAME} resource_pack)
# --- CÒPIA DE gamecontrollerdb.txt AL COSTAT DEL BINARI ---
# SDL_AddGamepadMappingsFromFile només llegeix del filesystem real (no del
# pack), així que el fitxer ha de viure al directori del binari. Es copia
# només si existeix per no fallar la build d'algú que encara no ha fet
# `make controllerdb`.
if(EXISTS "${CMAKE_SOURCE_DIR}/gamecontrollerdb.txt")
set(CONTROLLER_DB "${CMAKE_BINARY_DIR}/gamecontrollerdb.txt")
add_custom_command(
OUTPUT ${CONTROLLER_DB}
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${CMAKE_SOURCE_DIR}/gamecontrollerdb.txt"
"${CONTROLLER_DB}"
DEPENDS "${CMAKE_SOURCE_DIR}/gamecontrollerdb.txt"
COMMENT "Copiant gamecontrollerdb.txt → build/"
VERBATIM
)
add_custom_target(controller_db ALL DEPENDS ${CONTROLLER_DB})
add_dependencies(${PROJECT_NAME} controller_db)
endif()
target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra -Wpedantic) target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra -Wpedantic)
target_compile_definitions(${PROJECT_NAME} PRIVATE target_compile_definitions(${PROJECT_NAME} PRIVATE
$<$<CONFIG:Debug>:_DEBUG> $<$<CONFIG:Debug>:_DEBUG>
+5 -4
View File
@@ -62,12 +62,13 @@ pack:
@./$(BUILDDIR)/pack_resources data $(BUILDDIR)/resources.pack @./$(BUILDDIR)/pack_resources data $(BUILDDIR)/resources.pack
# Descàrrega de la base de dades de mappings de mandos. SDL només pot # Descàrrega de la base de dades de mappings de mandos. SDL només pot
# obrir-la des del filesystem (no del pack), per això viu a data/input/. # obrir-la des del filesystem (no del pack), per això viu a l'arrel del
# projecte i CMake la copia al costat del binari a cada build.
controllerdb: controllerdb:
@echo "Descarregant gamecontrollerdb.txt..." @echo "Descarregant gamecontrollerdb.txt..."
@curl -fsSL https://raw.githubusercontent.com/mdqinc/SDL_GameControllerDB/master/gamecontrollerdb.txt \ @curl -fsSL https://raw.githubusercontent.com/mdqinc/SDL_GameControllerDB/master/gamecontrollerdb.txt \
-o data/input/gamecontrollerdb.txt -o gamecontrollerdb.txt
@echo "data/input/gamecontrollerdb.txt actualitzat" @echo "gamecontrollerdb.txt actualitzat"
# ============================================================================== # ==============================================================================
# CODE QUALITY (delegados a cmake) # CODE QUALITY (delegados a cmake)
@@ -118,7 +119,7 @@ help:
@echo "" @echo ""
@echo " Recursos:" @echo " Recursos:"
@echo " make pack - Empaquetar data/ a $(BUILDDIR)/resources.pack (format AE26)" @echo " make pack - Empaquetar data/ a $(BUILDDIR)/resources.pack (format AE26)"
@echo " make controllerdb - Descarregar data/input/gamecontrollerdb.txt actualitzat" @echo " make controllerdb - Descarregar gamecontrollerdb.txt actualitzat (arrel)"
@echo "" @echo ""
@echo " Qualitat de codi:" @echo " Qualitat de codi:"
@echo " make format - Formatar codi amb clang-format" @echo " make format - Formatar codi amb clang-format"
File renamed without changes.
+13 -7
View File
@@ -149,16 +149,22 @@ void GamepadManager::init() {
<< SDL_GetError() << '\n'; << SDL_GetError() << '\n';
return; return;
} }
// `gamecontrollerdb.txt` és opcional. Si no existeix, SDL retorna -1 i // `gamecontrollerdb.txt` és opcional. Viu a l'arrel del projecte
// continuem amb les definicions internes del sistema. Sempre informem // (no a `data/`) perquè SDL_AddGamepadMappingsFromFile només sap
// del resultat per facilitar el diagnòstic de mandos no reconeguts. // llegir del filesystem real, no del pack. CMake el copia al costat
static constexpr const char* DB_PATH = "data/input/gamecontrollerdb.txt"; // del binari a cada build perquè SDL_GetBasePath el trobi tant en
const int ADDED = SDL_AddGamepadMappingsFromFile(DB_PATH); // dev com en release. Sempre informem del resultat per facilitar el
// diagnòstic de mandos no reconeguts.
std::string db_path = "gamecontrollerdb.txt";
if (const char* base = SDL_GetBasePath()) {
db_path = std::string(base) + "gamecontrollerdb.txt";
}
const int ADDED = SDL_AddGamepadMappingsFromFile(db_path.c_str());
if (ADDED < 0) { if (ADDED < 0) {
std::cout << "GamepadManager: no s'ha pogut carregar " << DB_PATH std::cout << "GamepadManager: no s'ha pogut carregar " << db_path
<< ": " << SDL_GetError() << '\n'; << ": " << SDL_GetError() << '\n';
} else { } else {
std::cout << "GamepadManager: " << ADDED << " mappings carregats de " << DB_PATH << '\n'; std::cout << "GamepadManager: " << ADDED << " mappings carregats de " << db_path << '\n';
} }
int count = 0; int count = 0;