mirror of https://github.com/AxioDL/metaforce.git
42 lines
1.2 KiB
C++
42 lines
1.2 KiB
C++
#include "athena/IStreamReader.hpp"
|
|
#include "athena/IStreamWriter.hpp"
|
|
#include "athena/FileWriter.hpp"
|
|
#include "DGRP.hpp"
|
|
|
|
namespace DataSpec::DNADGRP
|
|
{
|
|
|
|
template <class IDType>
|
|
bool ExtractDGRP(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath)
|
|
{
|
|
athena::io::FileWriter writer(outPath.getAbsolutePath());
|
|
if (writer.isOpen())
|
|
{
|
|
DGRP<IDType> dgrp;
|
|
dgrp.read(rs);
|
|
athena::io::ToYAMLStream(dgrp, writer);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
template bool ExtractDGRP<UniqueID32>(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath);
|
|
template bool ExtractDGRP<UniqueID64>(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath);
|
|
|
|
template <class IDType>
|
|
bool WriteDGRP(const DGRP<IDType>& dgrp, const hecl::ProjectPath& outPath)
|
|
{
|
|
athena::io::FileWriter w(outPath.getAbsolutePath(), true, false);
|
|
if (w.hasError())
|
|
return false;
|
|
dgrp.write(w);
|
|
int64_t rem = w.position() % 32;
|
|
if (rem)
|
|
for (int64_t i=0 ; i<32-rem ; ++i)
|
|
w.writeUByte(0xff);
|
|
return true;
|
|
}
|
|
template bool WriteDGRP<UniqueID32>(const DGRP<UniqueID32>& dgrp, const hecl::ProjectPath& outPath);
|
|
template bool WriteDGRP<UniqueID64>(const DGRP<UniqueID64>& dgrp, const hecl::ProjectPath& outPath);
|
|
|
|
}
|