mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-05-13 11:51:21 +00:00
Avoids indirect inclusions where applicable and includes the necessary headers as used by the interface. This way, it prevents code from failing to compile due to changes in other header inclusions.
46 lines
1.1 KiB
C++
46 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include <vector>
|
|
|
|
#include "DataSpec/DNACommon/DNACommon.hpp"
|
|
#include "DataSpec/DNACommon/PAK.hpp"
|
|
|
|
namespace DataSpec::DNADGRP {
|
|
|
|
template <class IDType>
|
|
struct AT_SPECIALIZE_PARMS(DataSpec::UniqueID32, DataSpec::UniqueID64) DGRP : BigDNA {
|
|
AT_DECL_DNA_YAML
|
|
Value<atUint32> dependCount;
|
|
struct ObjectTag : BigDNA {
|
|
AT_DECL_DNA_YAML
|
|
DNAFourCC type;
|
|
Value<IDType> id;
|
|
|
|
bool validate() const {
|
|
if (!id.isValid())
|
|
return false;
|
|
hecl::ProjectPath path = UniqueIDBridge::TranslatePakIdToPath(id);
|
|
return path && !path.isNone();
|
|
}
|
|
};
|
|
|
|
Vector<ObjectTag, AT_DNA_COUNT(dependCount)> depends;
|
|
|
|
void validateDeps() {
|
|
std::vector<ObjectTag> newDeps;
|
|
newDeps.reserve(depends.size());
|
|
for (const ObjectTag& tag : depends)
|
|
if (tag.validate())
|
|
newDeps.push_back(tag);
|
|
depends = std::move(newDeps);
|
|
dependCount = atUint32(depends.size());
|
|
}
|
|
};
|
|
|
|
template <class IDType>
|
|
bool ExtractDGRP(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath);
|
|
template <class IDType>
|
|
bool WriteDGRP(const DGRP<IDType>& dgrp, const hecl::ProjectPath& outPath);
|
|
|
|
} // namespace DataSpec::DNADGRP
|