mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-12-10 03:47:42 +00:00
Use UTF-8 exclusively internally
This removes SystemString, SystemChar, etc. All filepaths and log strings are assumed to be UTF-8, with conversions to UTF-16 for Windows APIs as appropriate. Updates amuse, athena, boo, kabufua and nod
This commit is contained in:
@@ -17,7 +17,7 @@ namespace DataSpec::DNAANCS {
|
||||
template <class PAKRouter, class ANCSDNA, class MaterialSet, class SurfaceHeader, atUint32 CMDLVersion>
|
||||
bool ReadANCSToBlender(hecl::blender::Token& btok, const ANCSDNA& ancs, const hecl::ProjectPath& outPath,
|
||||
PAKRouter& pakRouter, const typename PAKRouter::EntryType& entry, const SpecBase& dataspec,
|
||||
std::function<void(const hecl::SystemChar*)> fileChanged, bool force) {
|
||||
std::function<void(const char*)> fileChanged, bool force) {
|
||||
auto& conn = btok.getBlenderConnection();
|
||||
/* Extract character CMDL/CSKR/CINF first */
|
||||
std::vector<CharacterResInfo<typename PAKRouter::IDType>> chResInfo;
|
||||
@@ -32,8 +32,7 @@ bool ReadANCSToBlender(hecl::blender::Token& btok, const ANCSDNA& ancs, const he
|
||||
return false;
|
||||
|
||||
std::string bestName = pakRouter.getBestEntryName(*cmdlE);
|
||||
hecl::SystemStringConv bestNameView(bestName);
|
||||
fileChanged(bestNameView.c_str());
|
||||
fileChanged(bestName.c_str());
|
||||
|
||||
typename ANCSDNA::CSKRType cskr;
|
||||
pakRouter.lookupAndReadDNA(info.cskr, cskr);
|
||||
@@ -75,8 +74,7 @@ bool ReadANCSToBlender(hecl::blender::Token& btok, const ANCSDNA& ancs, const he
|
||||
}
|
||||
|
||||
std::string bestName = pakRouter.getBestEntryName(*cmdlE);
|
||||
hecl::SystemStringConv bestNameView(bestName);
|
||||
fileChanged(bestNameView.c_str());
|
||||
fileChanged(bestName.c_str());
|
||||
|
||||
const auto* rp = pakRouter.lookupCMDLRigPair(cmdlid);
|
||||
typename ANCSDNA::CSKRType cskr;
|
||||
@@ -106,8 +104,7 @@ bool ReadANCSToBlender(hecl::blender::Token& btok, const ANCSDNA& ancs, const he
|
||||
}
|
||||
|
||||
std::string bestName = pakRouter.getBestEntryName(entry);
|
||||
hecl::SystemStringConv bestNameView(bestName);
|
||||
fileChanged(bestNameView.c_str());
|
||||
fileChanged(bestName.c_str());
|
||||
|
||||
/* Establish ANCS blend */
|
||||
if (!conn.createBlend(outPath, hecl::blender::BlendType::Actor))
|
||||
@@ -142,7 +139,7 @@ bool ReadANCSToBlender(hecl::blender::Token& btok, const ANCSDNA& ancs, const he
|
||||
if (cinfsDone.find(info.cinf) == cinfsDone.end()) {
|
||||
if (const typename PAKRouter::EntryType* cinfE = pakRouter.lookupEntry(info.cinf, nullptr, true, false)) {
|
||||
hecl::ProjectPath cinfPath = pakRouter.getWorking(cinfE);
|
||||
os.linkArmature(cinfPath.getAbsolutePathUTF8(), fmt::format(FMT_STRING("CINF_{}"), info.cinf));
|
||||
os.linkArmature(cinfPath.getAbsolutePath(), fmt::format(FMT_STRING("CINF_{}"), info.cinf));
|
||||
os << "if obj.name not in bpy.context.scene.objects:\n"
|
||||
" bpy.context.scene.collection.objects.link(obj)\n";
|
||||
}
|
||||
@@ -158,7 +155,7 @@ bool ReadANCSToBlender(hecl::blender::Token& btok, const ANCSDNA& ancs, const he
|
||||
/* Link CMDL */
|
||||
if (const typename PAKRouter::EntryType* cmdlE = pakRouter.lookupEntry(info.cmdl, nullptr, true, false)) {
|
||||
hecl::ProjectPath cmdlPath = pakRouter.getWorking(cmdlE);
|
||||
os.linkMesh(cmdlPath.getAbsolutePathUTF8(), pakRouter.getBestEntryName(*cmdlE));
|
||||
os.linkMesh(cmdlPath.getAbsolutePath(), pakRouter.getBestEntryName(*cmdlE));
|
||||
|
||||
/* Attach CMDL to CINF */
|
||||
os << "if obj.name not in bpy.context.scene.objects:\n"
|
||||
@@ -177,7 +174,7 @@ bool ReadANCSToBlender(hecl::blender::Token& btok, const ANCSDNA& ancs, const he
|
||||
if (const typename PAKRouter::EntryType* cmdlE =
|
||||
pakRouter.lookupEntry(overlay.second.first, nullptr, true, false)) {
|
||||
hecl::ProjectPath cmdlPath = pakRouter.getWorking(cmdlE);
|
||||
os.linkMesh(cmdlPath.getAbsolutePathUTF8(), pakRouter.getBestEntryName(*cmdlE));
|
||||
os.linkMesh(cmdlPath.getAbsolutePath(), pakRouter.getBestEntryName(*cmdlE));
|
||||
|
||||
/* Attach CMDL to CINF */
|
||||
os << "if obj.name not in bpy.context.scene.objects:\n"
|
||||
@@ -202,7 +199,7 @@ bool ReadANCSToBlender(hecl::blender::Token& btok, const ANCSDNA& ancs, const he
|
||||
if (cinfsDone.find(cinfid) == cinfsDone.end()) {
|
||||
if (const typename PAKRouter::EntryType* cinfE = pakRouter.lookupEntry(cinfid, nullptr, true, false)) {
|
||||
hecl::ProjectPath cinfPath = pakRouter.getWorking(cinfE);
|
||||
os.linkArmature(cinfPath.getAbsolutePathUTF8(), fmt::format(FMT_STRING("CINF_{}"), cinfid));
|
||||
os.linkArmature(cinfPath.getAbsolutePath(), fmt::format(FMT_STRING("CINF_{}"), cinfid));
|
||||
os << "if obj.name not in bpy.context.scene.objects:\n"
|
||||
" bpy.context.scene.collection.objects.link(obj)\n";
|
||||
}
|
||||
@@ -219,7 +216,7 @@ bool ReadANCSToBlender(hecl::blender::Token& btok, const ANCSDNA& ancs, const he
|
||||
/* Link CMDL */
|
||||
if (const typename PAKRouter::EntryType* cmdlE = pakRouter.lookupEntry(cmdlid, nullptr, true, false)) {
|
||||
hecl::ProjectPath cmdlPath = pakRouter.getWorking(cmdlE);
|
||||
os.linkMesh(cmdlPath.getAbsolutePathUTF8(), pakRouter.getBestEntryName(*cmdlE));
|
||||
os.linkMesh(cmdlPath.getAbsolutePath(), pakRouter.getBestEntryName(*cmdlE));
|
||||
|
||||
/* Attach CMDL to CINF */
|
||||
os << "if obj.name not in bpy.context.scene.objects:\n"
|
||||
@@ -270,16 +267,16 @@ template bool
|
||||
ReadANCSToBlender<PAKRouter<DNAMP1::PAKBridge>, DNAMP1::ANCS, DNAMP1::MaterialSet, DNACMDL::SurfaceHeader_1, 2>(
|
||||
hecl::blender::Token& btok, const DNAMP1::ANCS& ancs, const hecl::ProjectPath& outPath,
|
||||
PAKRouter<DNAMP1::PAKBridge>& pakRouter, const typename PAKRouter<DNAMP1::PAKBridge>::EntryType& entry,
|
||||
const SpecBase& dataspec, std::function<void(const hecl::SystemChar*)> fileChanged, bool force);
|
||||
const SpecBase& dataspec, std::function<void(const char*)> fileChanged, bool force);
|
||||
template bool
|
||||
ReadANCSToBlender<PAKRouter<DNAMP2::PAKBridge>, DNAMP2::ANCS, DNAMP2::MaterialSet, DNACMDL::SurfaceHeader_2, 4>(
|
||||
hecl::blender::Token& btok, const DNAMP2::ANCS& ancs, const hecl::ProjectPath& outPath,
|
||||
PAKRouter<DNAMP2::PAKBridge>& pakRouter, const typename PAKRouter<DNAMP2::PAKBridge>::EntryType& entry,
|
||||
const SpecBase& dataspec, std::function<void(const hecl::SystemChar*)> fileChanged, bool force);
|
||||
const SpecBase& dataspec, std::function<void(const char*)> fileChanged, bool force);
|
||||
template bool
|
||||
ReadANCSToBlender<PAKRouter<DNAMP3::PAKBridge>, DNAMP3::CHAR, DNAMP3::MaterialSet, DNACMDL::SurfaceHeader_3, 4>(
|
||||
hecl::blender::Token& btok, const DNAMP3::CHAR& ancs, const hecl::ProjectPath& outPath,
|
||||
PAKRouter<DNAMP3::PAKBridge>& pakRouter, const typename PAKRouter<DNAMP3::PAKBridge>::EntryType& entry,
|
||||
const SpecBase& dataspec, std::function<void(const hecl::SystemChar*)> fileChanged, bool force);
|
||||
const SpecBase& dataspec, std::function<void(const char*)> fileChanged, bool force);
|
||||
|
||||
} // namespace DataSpec::DNAANCS
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
|
||||
#include "athena/Types.hpp"
|
||||
#include "hecl/Blender/Connection.hpp"
|
||||
#include "hecl/SystemChar.hpp"
|
||||
|
||||
namespace DataSpec {
|
||||
struct SpecBase;
|
||||
@@ -43,6 +42,6 @@ struct AnimationResInfo {
|
||||
template <class PAKRouter, class ANCSDNA, class MaterialSet, class SurfaceHeader, atUint32 CMDLVersion>
|
||||
bool ReadANCSToBlender(hecl::blender::Token& btok, const ANCSDNA& ancs, const hecl::ProjectPath& outPath,
|
||||
PAKRouter& pakRouter, const typename PAKRouter::EntryType& entry, const SpecBase& dataspec,
|
||||
std::function<void(const hecl::SystemChar*)> fileChanged, bool force = false);
|
||||
std::function<void(const char*)> fileChanged, bool force = false);
|
||||
|
||||
} // namespace DataSpec::DNAANCS
|
||||
|
||||
@@ -82,8 +82,7 @@ void ReadMaterialSetToBlender_1_2(hecl::blender::PyOutStream& os, const Material
|
||||
PAKEntryReadStream rs = texEntry->beginReadStream(*node);
|
||||
TXTR::Extract(rs, txtrPath);
|
||||
}
|
||||
hecl::SystemString resPath = pakRouter.getResourceRelativePath(entry, tex);
|
||||
hecl::SystemUTF8Conv resPathView(resPath);
|
||||
std::string resPath = pakRouter.getResourceRelativePath(entry, tex);
|
||||
os.format(FMT_STRING("if '{}' in bpy.data.images:\n"
|
||||
" image = bpy.data.images['{}']\n"
|
||||
"else:\n"
|
||||
@@ -91,7 +90,7 @@ void ReadMaterialSetToBlender_1_2(hecl::blender::PyOutStream& os, const Material
|
||||
" image.name = '{}'\n"
|
||||
"texmap_list.append(image)\n"
|
||||
"\n"),
|
||||
texName, texName, resPathView, texName);
|
||||
texName, texName, resPath, texName);
|
||||
}
|
||||
|
||||
unsigned m = 0;
|
||||
@@ -468,7 +467,7 @@ void InitGeomBlenderContext(hecl::blender::PyOutStream& os, const hecl::ProjectP
|
||||
"with bpy.data.libraries.load('{}', link=True, relative=True) as (data_from, data_to):\n"
|
||||
" data_to.node_groups = data_from.node_groups\n"
|
||||
"\n"),
|
||||
masterShaderPath.getAbsolutePathUTF8());
|
||||
masterShaderPath.getAbsolutePath());
|
||||
}
|
||||
|
||||
void FinishBlenderMesh(hecl::blender::PyOutStream& os, unsigned matSetCount, int meshIdx) {
|
||||
@@ -1195,7 +1194,7 @@ bool WriteCMDL(const hecl::ProjectPath& outPath, const hecl::ProjectPath& inPath
|
||||
|
||||
size_t endOff = 0;
|
||||
for (const Material& mat : mset) {
|
||||
std::string diagName = fmt::format(FMT_STRING("{}:{}"), inPath.getLastComponentUTF8(), mat.name);
|
||||
std::string diagName = fmt::format(FMT_STRING("{}:{}"), inPath.getLastComponent(), mat.name);
|
||||
hecl::Frontend::IR matIR = FE.compileSource(mat.source, diagName);
|
||||
setBackends.emplace_back();
|
||||
hecl::Backend::GX& matGX = setBackends.back();
|
||||
|
||||
@@ -83,7 +83,7 @@ void UniqueID32::Enumerate<BigDNA::WriteYaml>(typename WriteYaml::StreamT& write
|
||||
hecl::ProjectPath path = UniqueIDBridge::TranslatePakIdToPath(*this);
|
||||
if (!path)
|
||||
return;
|
||||
writer.writeString(path.getEncodableStringUTF8());
|
||||
writer.writeString(path.getEncodableString());
|
||||
}
|
||||
template <>
|
||||
void UniqueID32::Enumerate<BigDNA::BinarySize>(typename BinarySize::StreamT& s) {
|
||||
@@ -133,7 +133,7 @@ void UniqueID64::Enumerate<BigDNA::WriteYaml>(typename WriteYaml::StreamT& write
|
||||
hecl::ProjectPath path = UniqueIDBridge::TranslatePakIdToPath(*this);
|
||||
if (!path)
|
||||
return;
|
||||
writer.writeString(path.getEncodableStringUTF8());
|
||||
writer.writeString(path.getEncodableString());
|
||||
}
|
||||
template <>
|
||||
void UniqueID64::Enumerate<BigDNA::BinarySize>(typename BinarySize::StreamT& s) {
|
||||
@@ -164,7 +164,7 @@ void UniqueID128::Enumerate<BigDNA::WriteYaml>(typename WriteYaml::StreamT& writ
|
||||
hecl::ProjectPath path = UniqueIDBridge::TranslatePakIdToPath(*this);
|
||||
if (!path)
|
||||
return;
|
||||
writer.writeString(path.getEncodableStringUTF8());
|
||||
writer.writeString(path.getEncodableString());
|
||||
}
|
||||
template <>
|
||||
void UniqueID128::Enumerate<BigDNA::BinarySize>(typename BinarySize::StreamT& s) {
|
||||
@@ -189,7 +189,7 @@ void WordBitmap::write(athena::io::IStreamWriter& writer) const {
|
||||
void WordBitmap::binarySize(size_t& __isz) const { __isz += m_words.size() * 4; }
|
||||
|
||||
hecl::ProjectPath GetPathBeginsWith(const hecl::DirectoryEnumerator& dEnum, const hecl::ProjectPath& parentPath,
|
||||
hecl::SystemStringView test) {
|
||||
std::string_view test) {
|
||||
for (const auto& ent : dEnum)
|
||||
if (hecl::StringUtils::BeginsWith(ent.m_name, test))
|
||||
return hecl::ProjectPath(parentPath, ent.m_name);
|
||||
|
||||
@@ -144,12 +144,6 @@ public:
|
||||
copy[8] = '\0';
|
||||
assign(strtoul(copy, nullptr, 16));
|
||||
}
|
||||
UniqueID32(const wchar_t* hexStr) noexcept {
|
||||
wchar_t copy[9];
|
||||
wcsncpy(copy, hexStr, 8);
|
||||
copy[8] = L'\0';
|
||||
assign(wcstoul(copy, nullptr, 16));
|
||||
}
|
||||
|
||||
static constexpr size_t BinarySize() noexcept { return 4; }
|
||||
};
|
||||
@@ -194,12 +188,6 @@ public:
|
||||
copy[16] = '\0';
|
||||
assign(std::strtoull(copy, nullptr, 16));
|
||||
}
|
||||
UniqueID64(const wchar_t* hexStr) noexcept {
|
||||
wchar_t copy[17];
|
||||
std::wcsncpy(copy, hexStr, 16);
|
||||
copy[16] = L'\0';
|
||||
assign(std::wcstoull(copy, nullptr, 16));
|
||||
}
|
||||
|
||||
static constexpr size_t BinarySize() noexcept { return 8; }
|
||||
};
|
||||
@@ -370,8 +358,8 @@ struct CharacterAssociations {
|
||||
};
|
||||
|
||||
hecl::ProjectPath GetPathBeginsWith(const hecl::DirectoryEnumerator& dEnum, const hecl::ProjectPath& parentPath,
|
||||
hecl::SystemStringView test);
|
||||
inline hecl::ProjectPath GetPathBeginsWith(const hecl::ProjectPath& parentPath, hecl::SystemStringView test) {
|
||||
std::string_view test);
|
||||
inline hecl::ProjectPath GetPathBeginsWith(const hecl::ProjectPath& parentPath, std::string_view test) {
|
||||
return GetPathBeginsWith(hecl::DirectoryEnumerator(parentPath.getAbsolutePath()), parentPath, test);
|
||||
}
|
||||
|
||||
|
||||
@@ -287,10 +287,9 @@ bool ReadMAPAToBlender(hecl::blender::Connection& conn, const MAPA& mapa, const
|
||||
/* World background */
|
||||
hecl::ProjectPath worldDir = outPath.getParentPath().getParentPath();
|
||||
for (const auto& ent : hecl::DirectoryEnumerator(worldDir.getAbsolutePath())) {
|
||||
if (hecl::StringUtils::BeginsWith(ent.m_name, _SYS_STR("!world")) &&
|
||||
hecl::StringUtils::EndsWith(ent.m_name, _SYS_STR(".blend"))) {
|
||||
hecl::SystemUTF8Conv conv(ent.m_name);
|
||||
os.linkBackground(fmt::format(FMT_STRING("//../{}"), conv), "World"sv);
|
||||
if (hecl::StringUtils::BeginsWith(ent.m_name, "!world") &&
|
||||
hecl::StringUtils::EndsWith(ent.m_name, ".blend")) {
|
||||
os.linkBackground(fmt::format(FMT_STRING("//../{}"), ent.m_name), "World"sv);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -322,7 +321,7 @@ template bool ReadMAPAToBlender<PAKRouter<DNAMP3::PAKBridge>>(hecl::blender::Con
|
||||
template <typename MAPAType>
|
||||
bool Cook(const hecl::blender::MapArea& mapaIn, const hecl::ProjectPath& out) {
|
||||
if (mapaIn.verts.size() >= 256) {
|
||||
Log.report(logvisor::Error, FMT_STRING(_SYS_STR("MAPA {} vertex range exceeded [{}/{}]")), out.getRelativePath(),
|
||||
Log.report(logvisor::Error, FMT_STRING("MAPA {} vertex range exceeded [{}/{}]"), out.getRelativePath(),
|
||||
mapaIn.verts.size(), 255);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ bool ReadMAPUToBlender(hecl::blender::Connection& conn, const MAPU& mapu, const
|
||||
"\n";
|
||||
|
||||
hecl::ProjectPath hexPath = pakRouter.getWorking(mapu.hexMapa);
|
||||
os.linkMesh(hexPath.getAbsolutePathUTF8(), "MAP");
|
||||
os.linkMesh(hexPath.getAbsolutePath(), "MAP");
|
||||
os << "hexMesh = bpy.data.objects['MAP'].data\n";
|
||||
|
||||
for (const MAPU::World& wld : mapu.worlds) {
|
||||
@@ -55,7 +55,7 @@ bool ReadMAPUToBlender(hecl::blender::Connection& conn, const MAPU& mapu, const
|
||||
"bpy.context.scene.collection.objects.link(wldObj)\n"),
|
||||
wld.name, wldXfF[0][0], wldXfF[0][1], wldXfF[0][2], wldXfF[0][3], wldXfF[1][0], wldXfF[1][1],
|
||||
wldXfF[1][2], wldXfF[1][3], wldXfF[2][0], wldXfF[2][1], wldXfF[2][2], wldXfF[2][3], hexColorF[0],
|
||||
hexColorF[1], hexColorF[2], hexColorF[3], path.getParentPath().getRelativePathUTF8());
|
||||
hexColorF[1], hexColorF[2], hexColorF[3], path.getParentPath().getRelativePath());
|
||||
int idx = 0;
|
||||
for (const MAPU::Transform& hexXf : wld.hexTransforms) {
|
||||
zeus::simd_floats hexXfF[3];
|
||||
@@ -113,8 +113,8 @@ bool MAPU::Cook(const hecl::blender::MapUniverse& mapuIn, const hecl::ProjectPat
|
||||
MAPU::World& wldOut = mapu.worlds.back();
|
||||
wldOut.name = wld.name;
|
||||
for (const auto& ent : wld.worldPath.enumerateDir()) {
|
||||
if (hecl::StringUtils::BeginsWith(ent.m_name, _SYS_STR("!world")) &&
|
||||
hecl::StringUtils::EndsWith(ent.m_name, _SYS_STR(".blend"))) {
|
||||
if (hecl::StringUtils::BeginsWith(ent.m_name, "!world") &&
|
||||
hecl::StringUtils::EndsWith(ent.m_name, ".blend")) {
|
||||
wldOut.mlvl = hecl::ProjectPath(wld.worldPath, ent.m_name);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -12,8 +12,8 @@ namespace DataSpec::DNAMLVL {
|
||||
template <class PAKRouter, typename MLVL>
|
||||
bool ReadMLVLToBlender(hecl::blender::Connection& conn, const MLVL& mlvl, const hecl::ProjectPath& outPath,
|
||||
PAKRouter& pakRouter, const typename PAKRouter::EntryType& entry, bool force,
|
||||
std::function<void(const hecl::SystemChar*)> fileChanged) {
|
||||
hecl::ProjectPath blendPath = outPath.getWithExtension(_SYS_STR(".blend"), true);
|
||||
std::function<void(const char*)> fileChanged) {
|
||||
hecl::ProjectPath blendPath = outPath.getWithExtension(".blend", true);
|
||||
if (!force && blendPath.isFile())
|
||||
return true;
|
||||
|
||||
@@ -35,7 +35,6 @@ bool ReadMLVLToBlender(hecl::blender::Connection& conn, const MLVL& mlvl, const
|
||||
int areaIdx = 0;
|
||||
for (const auto& area : mlvl.areas) {
|
||||
const typename PAKRouter::EntryType* mreaEntry = pakRouter.lookupEntry(area.areaMREAId);
|
||||
hecl::SystemUTF8Conv areaDirName(*mreaEntry->unique.m_areaName);
|
||||
|
||||
os.AABBToBMesh(area.aabb[0], area.aabb[1]);
|
||||
zeus::simd_floats xfMtxF[3];
|
||||
@@ -52,7 +51,7 @@ bool ReadMLVLToBlender(hecl::blender::Connection& conn, const MLVL& mlvl, const
|
||||
"box.location = mtxd[0]\n"
|
||||
"box.rotation_quaternion = mtxd[1]\n"
|
||||
"box.scale = mtxd[2]\n"),
|
||||
areaDirName, xfMtxF[0][0], xfMtxF[0][1], xfMtxF[0][2], xfMtxF[0][3], xfMtxF[1][0], xfMtxF[1][1],
|
||||
*mreaEntry->unique.m_areaName, xfMtxF[0][0], xfMtxF[0][1], xfMtxF[0][2], xfMtxF[0][3], xfMtxF[1][0], xfMtxF[1][1],
|
||||
xfMtxF[1][2], xfMtxF[1][3], xfMtxF[2][0], xfMtxF[2][1], xfMtxF[2][2], xfMtxF[2][3]);
|
||||
|
||||
/* Insert dock planes */
|
||||
@@ -95,16 +94,16 @@ bool ReadMLVLToBlender(hecl::blender::Connection& conn, const MLVL& mlvl, const
|
||||
template bool ReadMLVLToBlender<PAKRouter<DNAMP1::PAKBridge>, DNAMP1::MLVL>(
|
||||
hecl::blender::Connection& conn, const DNAMP1::MLVL& mlvl, const hecl::ProjectPath& outPath,
|
||||
PAKRouter<DNAMP1::PAKBridge>& pakRouter, const PAKRouter<DNAMP1::PAKBridge>::EntryType& entry, bool force,
|
||||
std::function<void(const hecl::SystemChar*)> fileChanged);
|
||||
std::function<void(const char*)> fileChanged);
|
||||
|
||||
template bool ReadMLVLToBlender<PAKRouter<DNAMP2::PAKBridge>, DNAMP2::MLVL>(
|
||||
hecl::blender::Connection& conn, const DNAMP2::MLVL& mlvl, const hecl::ProjectPath& outPath,
|
||||
PAKRouter<DNAMP2::PAKBridge>& pakRouter, const PAKRouter<DNAMP2::PAKBridge>::EntryType& entry, bool force,
|
||||
std::function<void(const hecl::SystemChar*)> fileChanged);
|
||||
std::function<void(const char*)> fileChanged);
|
||||
|
||||
template bool ReadMLVLToBlender<PAKRouter<DNAMP3::PAKBridge>, DNAMP3::MLVL>(
|
||||
hecl::blender::Connection& conn, const DNAMP3::MLVL& mlvl, const hecl::ProjectPath& outPath,
|
||||
PAKRouter<DNAMP3::PAKBridge>& pakRouter, const PAKRouter<DNAMP3::PAKBridge>::EntryType& entry, bool force,
|
||||
std::function<void(const hecl::SystemChar*)> fileChanged);
|
||||
std::function<void(const char*)> fileChanged);
|
||||
|
||||
} // namespace DataSpec::DNAMLVL
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
|
||||
#include "DataSpec/DNACommon/DNACommon.hpp"
|
||||
|
||||
#include <hecl/SystemChar.hpp>
|
||||
|
||||
namespace hecl {
|
||||
class ProjectPath;
|
||||
}
|
||||
@@ -19,6 +17,6 @@ namespace DataSpec::DNAMLVL {
|
||||
template <class PAKRouter, typename MLVL>
|
||||
bool ReadMLVLToBlender(hecl::blender::Connection& conn, const MLVL& mlvl, const hecl::ProjectPath& outPath,
|
||||
PAKRouter& pakRouter, const typename PAKRouter::EntryType& entry, bool force,
|
||||
std::function<void(const hecl::SystemChar*)> fileChanged);
|
||||
std::function<void(const char*)> fileChanged);
|
||||
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ template <class PAKBRIDGE>
|
||||
void UniqueResult::checkEntry(const PAKBRIDGE& pakBridge, const typename PAKBRIDGE::PAKType::Entry& entry) {
|
||||
UniqueResult::Type resultType = UniqueResult::Type::NotFound;
|
||||
bool foundOneLayer = false;
|
||||
const hecl::SystemString* levelName = nullptr;
|
||||
const std::string* levelName = nullptr;
|
||||
typename PAKBRIDGE::PAKType::IDType useLevelId;
|
||||
typename PAKBRIDGE::PAKType::IDType useAreaId;
|
||||
unsigned layerIdx = 0;
|
||||
@@ -123,10 +123,9 @@ void PAKRouter<BRIDGETYPE>::build(std::vector<BRIDGETYPE>& bridges, std::functio
|
||||
size_t bridgeIdx = 0;
|
||||
for (BRIDGETYPE& bridge : bridges) {
|
||||
const auto& name = bridge.getName();
|
||||
hecl::SystemStringConv sysName(name);
|
||||
|
||||
hecl::SystemStringView::const_iterator extit = sysName.sys_str().end() - 4;
|
||||
hecl::SystemString baseName(sysName.sys_str().begin(), extit);
|
||||
std::string_view::const_iterator extit = name.end() - 4;
|
||||
std::string baseName(name.begin(), extit);
|
||||
|
||||
m_bridgePaths.emplace_back(
|
||||
std::make_pair(hecl::ProjectPath(m_gameWorking, baseName), hecl::ProjectPath(m_gameCooked, baseName)));
|
||||
@@ -173,13 +172,13 @@ void PAKRouter<BRIDGETYPE>::build(std::vector<BRIDGETYPE>& bridges, std::functio
|
||||
continue; /* Problematic corner case */
|
||||
if (auto rec = catalogWriter.enterSubRecord(namedEntry.name)) {
|
||||
hecl::ProjectPath working = getWorking(namedEntry.id);
|
||||
if (working.getAuxInfoUTF8().size()) {
|
||||
if (working.getAuxInfo().size()) {
|
||||
if (auto v = catalogWriter.enterSubVector()) {
|
||||
catalogWriter.writeString(working.getRelativePathUTF8());
|
||||
catalogWriter.writeString(working.getAuxInfoUTF8());
|
||||
catalogWriter.writeString(working.getRelativePath());
|
||||
catalogWriter.writeString(working.getAuxInfo());
|
||||
}
|
||||
} else
|
||||
catalogWriter.writeString(working.getRelativePathUTF8());
|
||||
catalogWriter.writeString(working.getRelativePath());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -217,8 +216,8 @@ hecl::ProjectPath PAKRouter<BRIDGETYPE>::getCharacterWorking(const EntryType* en
|
||||
if (characterSearch != m_charAssoc.m_cskrToCharacter.cend()) {
|
||||
hecl::ProjectPath characterPath = getWorking(characterSearch->second.first);
|
||||
if (entry->type == FOURCC('EVNT')) {
|
||||
hecl::SystemStringConv wideStr(characterSearch->second.second);
|
||||
return characterPath.getWithExtension((hecl::SystemString(_SYS_STR(".")) + wideStr.c_str()).c_str(), true);
|
||||
std::string extension(characterSearch->second.second);
|
||||
return characterPath.getWithExtension((std::string(".") + extension.c_str()).c_str(), true);
|
||||
}
|
||||
return characterPath.ensureAuxInfo(characterSearch->second.second);
|
||||
}
|
||||
@@ -241,12 +240,12 @@ hecl::ProjectPath PAKRouter<BRIDGETYPE>::getWorking(const EntryType* entry,
|
||||
const EntryType* singleSearch = pak->lookupEntry(entry->id);
|
||||
if (singleSearch) {
|
||||
const hecl::ProjectPath& pakPath = m_bridgePaths[curBridgeIdx].first;
|
||||
hecl::SystemString entName = hecl::UTF8StringToSysString(getBestEntryName(*entry));
|
||||
hecl::SystemString auxInfo;
|
||||
std::string entName = getBestEntryName(*entry);
|
||||
std::string auxInfo;
|
||||
if (extractor.fileExts[0] && !extractor.fileExts[1])
|
||||
entName += extractor.fileExts[0];
|
||||
else if (extractor.fileExts[0])
|
||||
entName += _SYS_STR(".*");
|
||||
entName += ".*";
|
||||
else if (hecl::ProjectPath chWork = getCharacterWorking(entry))
|
||||
return chWork;
|
||||
return hecl::ProjectPath(pakPath, entName).ensureAuxInfo(auxInfo);
|
||||
@@ -257,12 +256,12 @@ hecl::ProjectPath PAKRouter<BRIDGETYPE>::getWorking(const EntryType* entry,
|
||||
if (uniqueSearch != m_uniqueEntries.end()) {
|
||||
const BRIDGETYPE& bridge = m_bridges->at(uniqueSearch->second.first);
|
||||
const hecl::ProjectPath& pakPath = m_bridgePaths[uniqueSearch->second.first].first;
|
||||
hecl::SystemString entName = hecl::UTF8StringToSysString(getBestEntryName(*entry));
|
||||
hecl::SystemString auxInfo;
|
||||
std::string entName = getBestEntryName(*entry);
|
||||
std::string auxInfo;
|
||||
if (extractor.fileExts[0] && !extractor.fileExts[1])
|
||||
entName += extractor.fileExts[0];
|
||||
else if (extractor.fileExts[0])
|
||||
entName += _SYS_STR(".*");
|
||||
entName += ".*";
|
||||
else if (hecl::ProjectPath chWork = getCharacterWorking(entry))
|
||||
return chWork;
|
||||
if (bridge.getPAK().m_noShare) {
|
||||
@@ -275,13 +274,13 @@ hecl::ProjectPath PAKRouter<BRIDGETYPE>::getWorking(const EntryType* entry,
|
||||
|
||||
auto sharedSearch = m_sharedEntries.find(entry->id);
|
||||
if (sharedSearch != m_sharedEntries.end()) {
|
||||
hecl::SystemString entBase = hecl::UTF8StringToSysString(getBestEntryName(*entry));
|
||||
hecl::SystemString auxInfo;
|
||||
hecl::SystemString entName = entBase;
|
||||
std::string entBase = getBestEntryName(*entry);
|
||||
std::string auxInfo;
|
||||
std::string entName = entBase;
|
||||
if (extractor.fileExts[0] && !extractor.fileExts[1])
|
||||
entName += extractor.fileExts[0];
|
||||
else if (extractor.fileExts[0])
|
||||
entName += _SYS_STR(".*");
|
||||
entName += ".*";
|
||||
else if (hecl::ProjectPath chWork = getCharacterWorking(entry))
|
||||
return chWork;
|
||||
hecl::ProjectPath sharedPath(m_sharedWorking, entName);
|
||||
@@ -349,7 +348,7 @@ hecl::ProjectPath PAKRouter<BRIDGETYPE>::getCooked(const IDType& id, bool silenc
|
||||
}
|
||||
|
||||
template <class BRIDGETYPE>
|
||||
hecl::SystemString PAKRouter<BRIDGETYPE>::getResourceRelativePath(const EntryType& a, const IDType& b) const {
|
||||
std::string PAKRouter<BRIDGETYPE>::getResourceRelativePath(const EntryType& a, const IDType& b) const {
|
||||
const nod::Node* node = m_node.get();
|
||||
const PAKType* pak = m_pak.get();
|
||||
if (!pak)
|
||||
@@ -358,11 +357,11 @@ hecl::SystemString PAKRouter<BRIDGETYPE>::getResourceRelativePath(const EntryTyp
|
||||
FMT_STRING("PAKRouter::enterPAKBridge() must be called before PAKRouter::getResourceRelativePath()"));
|
||||
const typename BRIDGETYPE::PAKType::Entry* be = lookupEntry(b);
|
||||
if (!be)
|
||||
return hecl::SystemString();
|
||||
return std::string();
|
||||
hecl::ProjectPath aPath = getWorking(&a, BRIDGETYPE::LookupExtractor(*node, *pak, a));
|
||||
hecl::SystemString ret;
|
||||
std::string ret;
|
||||
for (size_t i = 0; i < aPath.levelCount(); ++i)
|
||||
ret += _SYS_STR("../");
|
||||
ret += "../";
|
||||
hecl::ProjectPath bPath = getWorking(be, BRIDGETYPE::LookupExtractor(*node, *pak, *be));
|
||||
ret += bPath.getRelativePath();
|
||||
return ret;
|
||||
@@ -434,7 +433,7 @@ std::string PAKRouter<BRIDGETYPE>::getBestEntryName(const IDType& entry, bool st
|
||||
|
||||
template <class BRIDGETYPE>
|
||||
bool PAKRouter<BRIDGETYPE>::extractResources(const BRIDGETYPE& pakBridge, bool force, hecl::blender::Token& btok,
|
||||
std::function<void(const hecl::SystemChar*, float)> progress) {
|
||||
std::function<void(const char*, float)> progress) {
|
||||
enterPAKBridge(pakBridge);
|
||||
size_t count = 0;
|
||||
size_t sz = m_pak->m_entries.size();
|
||||
@@ -447,9 +446,8 @@ bool PAKRouter<BRIDGETYPE>::extractResources(const BRIDGETYPE& pakBridge, bool f
|
||||
continue;
|
||||
|
||||
std::string bestName = getBestEntryName(*entryPtr, false);
|
||||
hecl::SystemStringConv bestNameView(bestName);
|
||||
float thisFac = ++count / fsz;
|
||||
progress(bestNameView.c_str(), thisFac);
|
||||
progress(bestName.c_str(), thisFac);
|
||||
|
||||
const nod::Node* node = m_node.get();
|
||||
|
||||
@@ -464,7 +462,7 @@ bool PAKRouter<BRIDGETYPE>::extractResources(const BRIDGETYPE& pakBridge, bool f
|
||||
if (force || cooked.isNone()) {
|
||||
cooked.makeDirChain(false);
|
||||
PAKEntryReadStream s = entryPtr->beginReadStream(*node);
|
||||
const auto fout = hecl::FopenUnique(cooked.getAbsolutePath().data(), _SYS_STR("wb"));
|
||||
const auto fout = hecl::FopenUnique(cooked.getAbsolutePath().data(), "wb");
|
||||
std::fwrite(s.data(), 1, s.length(), fout.get());
|
||||
}
|
||||
|
||||
@@ -479,7 +477,7 @@ bool PAKRouter<BRIDGETYPE>::extractResources(const BRIDGETYPE& pakBridge, bool f
|
||||
if (force || !extractor.IsFullyExtracted(working)) {
|
||||
PAKEntryReadStream s = entryPtr->beginReadStream(*node);
|
||||
extractor.func_b(m_dataSpec, s, working, *this, *entryPtr, force, btok,
|
||||
[&progress, thisFac](const hecl::SystemChar* update) { progress(update, thisFac); });
|
||||
[&progress, thisFac](const char* update) { progress(update, thisFac); });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,9 +60,9 @@ public:
|
||||
|
||||
struct UniqueResult {
|
||||
enum class Type { NotFound, Pak, Level, Area, Layer } m_type = Type::NotFound;
|
||||
const hecl::SystemString* m_levelName = nullptr;
|
||||
const hecl::SystemString* m_areaName = nullptr;
|
||||
const hecl::SystemString* m_layerName = nullptr;
|
||||
const std::string* m_levelName = nullptr;
|
||||
const std::string* m_areaName = nullptr;
|
||||
const std::string* m_layerName = nullptr;
|
||||
UniqueResult() = default;
|
||||
UniqueResult(Type tp) : m_type(tp) {}
|
||||
|
||||
@@ -81,9 +81,9 @@ struct ResExtractor {
|
||||
std::function<bool(PAKEntryReadStream&, const hecl::ProjectPath&)> func_a;
|
||||
std::function<bool(const SpecBase&, PAKEntryReadStream&, const hecl::ProjectPath&, PAKRouter<PAKBRIDGE>&,
|
||||
const typename PAKBRIDGE::PAKType::Entry&, bool, hecl::blender::Token&,
|
||||
std::function<void(const hecl::SystemChar*)>)>
|
||||
std::function<void(const char*)>)>
|
||||
func_b;
|
||||
std::array<const hecl::SystemChar*, 6> fileExts = {};
|
||||
std::array<const char*, 6> fileExts = {};
|
||||
unsigned weight = 0;
|
||||
std::function<void(const SpecBase&, PAKEntryReadStream&, PAKRouter<PAKBRIDGE>&, typename PAKBRIDGE::PAKType::Entry&)>
|
||||
func_name;
|
||||
@@ -91,7 +91,7 @@ struct ResExtractor {
|
||||
ResExtractor() = default;
|
||||
|
||||
ResExtractor(std::function<bool(PAKEntryReadStream&, const hecl::ProjectPath&)> func,
|
||||
std::array<const hecl::SystemChar*, 6>&& fileExtsIn, unsigned weightin = 0,
|
||||
std::array<const char*, 6>&& fileExtsIn, unsigned weightin = 0,
|
||||
std::function<void(const SpecBase&, PAKEntryReadStream&, PAKRouter<PAKBRIDGE>&,
|
||||
typename PAKBRIDGE::PAKType::Entry&)>
|
||||
nfunc = {})
|
||||
@@ -99,9 +99,9 @@ struct ResExtractor {
|
||||
|
||||
ResExtractor(std::function<bool(const SpecBase&, PAKEntryReadStream&, const hecl::ProjectPath&, PAKRouter<PAKBRIDGE>&,
|
||||
const typename PAKBRIDGE::PAKType::Entry&, bool, hecl::blender::Token&,
|
||||
std::function<void(const hecl::SystemChar*)>)>
|
||||
std::function<void(const char*)>)>
|
||||
func,
|
||||
std::array<const hecl::SystemChar*, 6>&& fileExtsIn, unsigned weightin = 0,
|
||||
std::array<const char*, 6>&& fileExtsIn, unsigned weightin = 0,
|
||||
std::function<void(const SpecBase&, PAKEntryReadStream&, PAKRouter<PAKBRIDGE>&,
|
||||
typename PAKBRIDGE::PAKType::Entry&)>
|
||||
nfunc = {})
|
||||
@@ -127,11 +127,11 @@ struct ResExtractor {
|
||||
/** Level hierarchy representation */
|
||||
template <class IDType>
|
||||
struct Level {
|
||||
hecl::SystemString name;
|
||||
std::string name;
|
||||
struct Area {
|
||||
hecl::SystemString name;
|
||||
std::string name;
|
||||
struct Layer {
|
||||
hecl::SystemString name;
|
||||
std::string name;
|
||||
bool active;
|
||||
std::unordered_set<IDType> resources;
|
||||
};
|
||||
@@ -188,13 +188,13 @@ public:
|
||||
hecl::ProjectPath getCooked(const EntryType* entry) const;
|
||||
hecl::ProjectPath getCooked(const IDType& id, bool silenceWarnings = false) const;
|
||||
|
||||
hecl::SystemString getResourceRelativePath(const EntryType& a, const IDType& b) const;
|
||||
std::string getResourceRelativePath(const EntryType& a, const IDType& b) const;
|
||||
|
||||
std::string getBestEntryName(const EntryType& entry, bool stdOverride = true) const;
|
||||
std::string getBestEntryName(const IDType& entry, bool stdOverride = true) const;
|
||||
|
||||
bool extractResources(const BRIDGETYPE& pakBridge, bool force, hecl::blender::Token& btok,
|
||||
std::function<void(const hecl::SystemChar*, float)> progress);
|
||||
std::function<void(const char*, float)> progress);
|
||||
|
||||
const typename BRIDGETYPE::PAKType::Entry* lookupEntry(const IDType& entry, const nod::Node** nodeOut = nullptr,
|
||||
bool silenceWarnings = false, bool currentPAK = false) const;
|
||||
|
||||
@@ -180,7 +180,7 @@ template <class PAKBridge>
|
||||
bool PATH<PAKBridge>::Extract(const SpecBase& dataSpec, PAKEntryReadStream& rs, const hecl::ProjectPath& outPath,
|
||||
PAKRouter<PAKBridge>& pakRouter, const typename PAKBridge::PAKType::Entry& entry,
|
||||
bool force, hecl::blender::Token& btok,
|
||||
std::function<void(const hecl::SystemChar*)> fileChanged) {
|
||||
std::function<void(const char*)> fileChanged) {
|
||||
PATH path;
|
||||
path.read(rs);
|
||||
hecl::blender::Connection& conn = btok.getBlenderConnection();
|
||||
@@ -189,8 +189,8 @@ bool PATH<PAKBridge>::Extract(const SpecBase& dataSpec, PAKEntryReadStream& rs,
|
||||
|
||||
std::string areaPath;
|
||||
for (const auto& ent : hecl::DirectoryEnumerator(outPath.getParentPath().getAbsolutePath())) {
|
||||
if (hecl::StringUtils::BeginsWith(ent.m_name, _SYS_STR("!area_"))) {
|
||||
areaPath = hecl::SystemUTF8Conv(ent.m_name).str();
|
||||
if (hecl::StringUtils::BeginsWith(ent.m_name, "!area_")) {
|
||||
areaPath = ent.m_name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -223,7 +223,7 @@ bool PATH<PAKBridge>::Cook(const hecl::ProjectPath& outPath, const hecl::Project
|
||||
#if DUMP_OCTREE
|
||||
{
|
||||
hecl::blender::Connection& conn = btok.getBlenderConnection();
|
||||
if (!conn.createBlend(inPath.getWithExtension(_SYS_STR(".octree.blend"), true), hecl::blender::BlendType::PathMesh))
|
||||
if (!conn.createBlend(inPath.getWithExtension(".octree.blend", true), hecl::blender::BlendType::PathMesh))
|
||||
return false;
|
||||
|
||||
zeus::CMatrix4f xf;
|
||||
|
||||
@@ -104,7 +104,7 @@ struct AT_SPECIALIZE_PARMS(DataSpec::DNAMP1::PAKBridge, DataSpec::DNAMP2::PAKBri
|
||||
|
||||
static bool Extract(const SpecBase& dataSpec, PAKEntryReadStream& rs, const hecl::ProjectPath& outPath,
|
||||
PAKRouter<PAKBridge>& pakRouter, const typename PAKBridge::PAKType::Entry& entry, bool force,
|
||||
hecl::blender::Token& btok, std::function<void(const hecl::SystemChar*)> fileChanged);
|
||||
hecl::blender::Token& btok, std::function<void(const char*)> fileChanged);
|
||||
|
||||
static bool Cook(const hecl::ProjectPath& outPath, const hecl::ProjectPath& inPath, const PathMesh& mesh,
|
||||
hecl::blender::Token& btok);
|
||||
|
||||
@@ -15,29 +15,29 @@ std::unique_ptr<ISTRG> LoadSTRG(athena::io::IStreamReader& reader) {
|
||||
uint32_t magic = reader.readUint32Big();
|
||||
if (magic != 0x87654321) {
|
||||
LogDNACommon.report(logvisor::Error, FMT_STRING("invalid STRG magic"));
|
||||
return std::unique_ptr<ISTRG>();
|
||||
return {};
|
||||
}
|
||||
|
||||
uint32_t version = reader.readUint32Big();
|
||||
switch (version) {
|
||||
case 0: {
|
||||
DNAMP1::STRG* newStrg = new DNAMP1::STRG;
|
||||
auto* newStrg = new DNAMP1::STRG;
|
||||
newStrg->_read(reader);
|
||||
return std::unique_ptr<ISTRG>(newStrg);
|
||||
}
|
||||
case 1: {
|
||||
DNAMP2::STRG* newStrg = new DNAMP2::STRG;
|
||||
auto* newStrg = new DNAMP2::STRG;
|
||||
newStrg->_read(reader);
|
||||
return std::unique_ptr<ISTRG>(newStrg);
|
||||
}
|
||||
case 3: {
|
||||
DNAMP3::STRG* newStrg = new DNAMP3::STRG;
|
||||
auto* newStrg = new DNAMP3::STRG;
|
||||
newStrg->_read(reader);
|
||||
return std::unique_ptr<ISTRG>(newStrg);
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return std::unique_ptr<ISTRG>();
|
||||
return {};
|
||||
}
|
||||
} // namespace DataSpec
|
||||
|
||||
@@ -21,7 +21,6 @@ struct ISTRG : BigDNAVYaml {
|
||||
virtual size_t count() const = 0;
|
||||
virtual std::string getUTF8(const FourCC& lang, size_t idx) const = 0;
|
||||
virtual std::u16string getUTF16(const FourCC& lang, size_t idx) const = 0;
|
||||
virtual hecl::SystemString getSystemString(const FourCC& lang, size_t idx) const = 0;
|
||||
virtual int32_t lookupIdx(std::string_view name) const = 0;
|
||||
|
||||
virtual void gatherDependencies(std::vector<hecl::ProjectPath>& pathsOut) const;
|
||||
|
||||
@@ -836,9 +836,9 @@ bool TXTR::Extract(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath) {
|
||||
const uint16_t height = rs.readUint16Big();
|
||||
const uint32_t numMips = rs.readUint32Big();
|
||||
|
||||
auto fp = hecl::FopenUnique(outPath.getAbsolutePath().data(), _SYS_STR("wb"));
|
||||
auto fp = hecl::FopenUnique(outPath.getAbsolutePath().data(), "wb");
|
||||
if (fp == nullptr) {
|
||||
Log.report(logvisor::Error, FMT_STRING(_SYS_STR("Unable to open '{}' for writing")), outPath.getAbsolutePath());
|
||||
Log.report(logvisor::Error, FMT_STRING("Unable to open '{}' for writing"), outPath.getAbsolutePath());
|
||||
return false;
|
||||
}
|
||||
png_structp png = png_create_write_struct(PNG_LIBPNG_VER_STRING, nullptr, PNGErr, PNGWarn);
|
||||
@@ -1039,9 +1039,9 @@ static int GetNumPaletteEntriesForGCN(png_structp png, png_infop info) {
|
||||
}
|
||||
|
||||
bool TXTR::Cook(const hecl::ProjectPath& inPath, const hecl::ProjectPath& outPath) {
|
||||
auto inf = hecl::FopenUnique(inPath.getAbsolutePath().data(), _SYS_STR("rb"));
|
||||
auto inf = hecl::FopenUnique(inPath.getAbsolutePath().data(), "rb");
|
||||
if (inf == nullptr) {
|
||||
Log.report(logvisor::Error, FMT_STRING(_SYS_STR("Unable to open '{}' for reading")), inPath.getAbsolutePath());
|
||||
Log.report(logvisor::Error, FMT_STRING("Unable to open '{}' for reading"), inPath.getAbsolutePath());
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1049,7 +1049,7 @@ bool TXTR::Cook(const hecl::ProjectPath& inPath, const hecl::ProjectPath& outPat
|
||||
char header[8];
|
||||
std::fread(header, 1, sizeof(header), inf.get());
|
||||
if (png_sig_cmp((png_const_bytep)header, 0, 8)) {
|
||||
Log.report(logvisor::Error, FMT_STRING(_SYS_STR("invalid PNG signature in '{}'")), inPath.getAbsolutePath());
|
||||
Log.report(logvisor::Error, FMT_STRING("invalid PNG signature in '{}'"), inPath.getAbsolutePath());
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1067,7 +1067,7 @@ bool TXTR::Cook(const hecl::ProjectPath& inPath, const hecl::ProjectPath& outPat
|
||||
}
|
||||
|
||||
if (setjmp(png_jmpbuf(pngRead))) {
|
||||
Log.report(logvisor::Error, FMT_STRING(_SYS_STR("unable to initialize libpng I/O for '{}'")),
|
||||
Log.report(logvisor::Error, FMT_STRING("unable to initialize libpng I/O for '{}'"),
|
||||
inPath.getAbsolutePath());
|
||||
png_destroy_read_struct(&pngRead, &info, nullptr);
|
||||
return false;
|
||||
@@ -1113,7 +1113,7 @@ bool TXTR::Cook(const hecl::ProjectPath& inPath, const hecl::ProjectPath& outPat
|
||||
}
|
||||
|
||||
if (bitDepth != 8) {
|
||||
Log.report(logvisor::Error, FMT_STRING(_SYS_STR("'{}' is not 8 bits-per-channel")), inPath.getAbsolutePath());
|
||||
Log.report(logvisor::Error, FMT_STRING("'{}' is not 8 bits-per-channel"), inPath.getAbsolutePath());
|
||||
png_destroy_read_struct(&pngRead, &info, nullptr);
|
||||
return false;
|
||||
}
|
||||
@@ -1144,7 +1144,7 @@ bool TXTR::Cook(const hecl::ProjectPath& inPath, const hecl::ProjectPath& outPat
|
||||
nComps = 1;
|
||||
break;
|
||||
default:
|
||||
Log.report(logvisor::Error, FMT_STRING(_SYS_STR("unsupported color type in '{}'")), inPath.getAbsolutePath());
|
||||
Log.report(logvisor::Error, FMT_STRING("unsupported color type in '{}'"), inPath.getAbsolutePath());
|
||||
png_destroy_read_struct(&pngRead, &info, nullptr);
|
||||
return false;
|
||||
}
|
||||
@@ -1164,7 +1164,7 @@ bool TXTR::Cook(const hecl::ProjectPath& inPath, const hecl::ProjectPath& outPat
|
||||
bufOut.reset(new uint8_t[bufLen]);
|
||||
|
||||
if (setjmp(png_jmpbuf(pngRead))) {
|
||||
Log.report(logvisor::Fatal, FMT_STRING(_SYS_STR("unable to read image in '{}'")), inPath.getAbsolutePath());
|
||||
Log.report(logvisor::Fatal, FMT_STRING("unable to read image in '{}'"), inPath.getAbsolutePath());
|
||||
png_destroy_read_struct(&pngRead, &info, nullptr);
|
||||
return false;
|
||||
}
|
||||
@@ -1345,7 +1345,7 @@ bool TXTR::Cook(const hecl::ProjectPath& inPath, const hecl::ProjectPath& outPat
|
||||
/* Do write out */
|
||||
athena::io::FileWriter outf(outPath.getAbsolutePath(), true, false);
|
||||
if (outf.hasError()) {
|
||||
Log.report(logvisor::Error, FMT_STRING(_SYS_STR("Unable to open '{}' for writing")), outPath.getAbsolutePath());
|
||||
Log.report(logvisor::Error, FMT_STRING("Unable to open '{}' for writing"), outPath.getAbsolutePath());
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1359,9 +1359,9 @@ bool TXTR::Cook(const hecl::ProjectPath& inPath, const hecl::ProjectPath& outPat
|
||||
}
|
||||
|
||||
bool TXTR::CookPC(const hecl::ProjectPath& inPath, const hecl::ProjectPath& outPath) {
|
||||
auto inf = hecl::FopenUnique(inPath.getAbsolutePath().data(), _SYS_STR("rb"));
|
||||
auto inf = hecl::FopenUnique(inPath.getAbsolutePath().data(), "rb");
|
||||
if (inf == nullptr) {
|
||||
Log.report(logvisor::Error, FMT_STRING(_SYS_STR("Unable to open '{}' for reading")), inPath.getAbsolutePath());
|
||||
Log.report(logvisor::Error, FMT_STRING("Unable to open '{}' for reading"), inPath.getAbsolutePath());
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1369,7 +1369,7 @@ bool TXTR::CookPC(const hecl::ProjectPath& inPath, const hecl::ProjectPath& outP
|
||||
char header[8];
|
||||
std::fread(header, 1, sizeof(header), inf.get());
|
||||
if (png_sig_cmp((png_const_bytep)header, 0, 8)) {
|
||||
Log.report(logvisor::Error, FMT_STRING(_SYS_STR("invalid PNG signature in '{}'")), inPath.getAbsolutePath());
|
||||
Log.report(logvisor::Error, FMT_STRING("invalid PNG signature in '{}'"), inPath.getAbsolutePath());
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1387,7 +1387,7 @@ bool TXTR::CookPC(const hecl::ProjectPath& inPath, const hecl::ProjectPath& outP
|
||||
}
|
||||
|
||||
if (setjmp(png_jmpbuf(pngRead))) {
|
||||
Log.report(logvisor::Error, FMT_STRING(_SYS_STR("unable to initialize libpng I/O for '{}'")),
|
||||
Log.report(logvisor::Error, FMT_STRING("unable to initialize libpng I/O for '{}'"),
|
||||
inPath.getAbsolutePath());
|
||||
png_destroy_read_struct(&pngRead, &info, nullptr);
|
||||
return false;
|
||||
@@ -1427,7 +1427,7 @@ bool TXTR::CookPC(const hecl::ProjectPath& inPath, const hecl::ProjectPath& outP
|
||||
}
|
||||
|
||||
if (bitDepth != 8) {
|
||||
Log.report(logvisor::Error, FMT_STRING(_SYS_STR("'{}' is not 8 bits-per-channel")), inPath.getAbsolutePath());
|
||||
Log.report(logvisor::Error, FMT_STRING("'{}' is not 8 bits-per-channel"), inPath.getAbsolutePath());
|
||||
png_destroy_read_struct(&pngRead, &info, nullptr);
|
||||
return false;
|
||||
}
|
||||
@@ -1456,7 +1456,7 @@ bool TXTR::CookPC(const hecl::ProjectPath& inPath, const hecl::ProjectPath& outP
|
||||
paletteBuf = ReadPalette(pngRead, info, paletteSize);
|
||||
break;
|
||||
default:
|
||||
Log.report(logvisor::Error, FMT_STRING(_SYS_STR("unsupported color type in '{}'")), inPath.getAbsolutePath());
|
||||
Log.report(logvisor::Error, FMT_STRING("unsupported color type in '{}'"), inPath.getAbsolutePath());
|
||||
png_destroy_read_struct(&pngRead, &info, nullptr);
|
||||
return false;
|
||||
}
|
||||
@@ -1474,7 +1474,7 @@ bool TXTR::CookPC(const hecl::ProjectPath& inPath, const hecl::ProjectPath& outP
|
||||
bufOut.reset(new uint8_t[bufLen]);
|
||||
|
||||
if (setjmp(png_jmpbuf(pngRead))) {
|
||||
Log.report(logvisor::Fatal, FMT_STRING(_SYS_STR("unable to read image in '{}'")), inPath.getAbsolutePath());
|
||||
Log.report(logvisor::Fatal, FMT_STRING("unable to read image in '{}'"), inPath.getAbsolutePath());
|
||||
png_destroy_read_struct(&pngRead, &info, nullptr);
|
||||
return false;
|
||||
}
|
||||
@@ -1595,7 +1595,7 @@ bool TXTR::CookPC(const hecl::ProjectPath& inPath, const hecl::ProjectPath& outP
|
||||
/* Do write out */
|
||||
athena::io::FileWriter outf(outPath.getAbsolutePath(), true, false);
|
||||
if (outf.hasError()) {
|
||||
Log.report(logvisor::Error, FMT_STRING(_SYS_STR("Unable to open '{}' for writing")), outPath.getAbsolutePath());
|
||||
Log.report(logvisor::Error, FMT_STRING("Unable to open '{}' for writing"), outPath.getAbsolutePath());
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user