49cb0af228
- [FIX] Acallats warnings en findloader de lua - [FIX] Acallats alguns 'Illegal music handle' innecesaris - [NEW] Ara detecta que no s'ha conectat al debuger de vscode i trau els missatges per consola com abans - [NEW] Missatges de error més clars - [NEW] Ara també trau els missatges de debug per consola en la versió release
60 lines
1.7 KiB
C++
60 lines
1.7 KiB
C++
#include "lua.utils.h"
|
|
#include <string>
|
|
#include <filesystem>
|
|
#include <algorithm>
|
|
|
|
namespace mini
|
|
{
|
|
namespace lua
|
|
{
|
|
namespace debug
|
|
{
|
|
std::string pathToChunk(const std::string& path) {
|
|
std::filesystem::path p(path);
|
|
|
|
// 1. Normalizar la ruta
|
|
p = p.lexically_normal();
|
|
|
|
// 2. Buscar el directorio "data"
|
|
auto it = std::find(p.begin(), p.end(), "data");
|
|
if (it == p.end())
|
|
return ""; // no es un script Lua válido
|
|
|
|
// 3. Construir la parte relativa después de "data"
|
|
std::filesystem::path rel;
|
|
for (++it; it != p.end(); ++it)
|
|
rel /= *it;
|
|
|
|
// 4. Quitar ".lua"
|
|
std::string s = rel.string();
|
|
if (s.ends_with(".lua"))
|
|
s = s.substr(0, s.size() - 4);
|
|
|
|
// 5. Convertir "/" → "."
|
|
for (char& c : s)
|
|
if (c == '/')
|
|
c = '.';
|
|
|
|
return s;
|
|
}
|
|
|
|
std::string chunkToPath(const std::string& chunk) {
|
|
// 1. Convertir "ia.test" → "ia/test"
|
|
std::string rel;
|
|
rel.reserve(chunk.size() + 10);
|
|
|
|
for (char c : chunk)
|
|
rel += (c == '.' ? '/' : c);
|
|
|
|
// 2. Añadir prefijo y sufijo
|
|
rel = "data/" + rel + ".lua";
|
|
|
|
// 3. Convertir a ruta absoluta
|
|
std::filesystem::path abs = std::filesystem::current_path() / rel;
|
|
|
|
return abs.lexically_normal().string();
|
|
}
|
|
}
|
|
}
|
|
}
|