2018-10-07 03:42:33 +00:00
|
|
|
#pragma once
|
2015-09-24 07:47:30 +00:00
|
|
|
|
2016-03-04 23:04:53 +00:00
|
|
|
#include <athena/FileWriter.hpp>
|
2018-06-29 20:21:36 +00:00
|
|
|
#include "DataSpec/DNACommon/DNACommon.hpp"
|
2015-09-24 07:47:30 +00:00
|
|
|
#include "DNAMP1.hpp"
|
|
|
|
|
2018-12-08 05:30:43 +00:00
|
|
|
namespace DataSpec::DNAMP1 {
|
|
|
|
struct SCAN : BigDNA {
|
|
|
|
AT_DECL_DNA_YAML
|
|
|
|
Value<atUint32> version;
|
|
|
|
Value<atUint32> magic;
|
|
|
|
UniqueID32 frame;
|
|
|
|
UniqueID32 string;
|
2015-09-24 07:47:30 +00:00
|
|
|
|
2018-12-08 05:30:43 +00:00
|
|
|
enum class ScanSpeed : atUint32 { Normal, Slow };
|
|
|
|
Value<ScanSpeed> scanSpeed;
|
2015-09-24 07:47:30 +00:00
|
|
|
|
2018-12-08 05:30:43 +00:00
|
|
|
enum class Category : atUint32 { None, SpacePirateData, ChozoLore, Creatures, Research };
|
2015-09-24 07:47:30 +00:00
|
|
|
|
2018-12-08 05:30:43 +00:00
|
|
|
Value<Category> category;
|
2015-09-24 07:47:30 +00:00
|
|
|
|
2018-12-08 05:30:43 +00:00
|
|
|
Value<bool> isImportant;
|
2015-09-24 07:47:30 +00:00
|
|
|
|
2018-12-08 05:30:43 +00:00
|
|
|
struct Texture : BigDNA {
|
|
|
|
AT_DECL_EXPLICIT_DNA_YAML
|
|
|
|
UniqueID32 texture;
|
|
|
|
Value<float> appearanceRange;
|
|
|
|
enum class Position : atInt32 {
|
|
|
|
Pane0,
|
|
|
|
Pane1,
|
|
|
|
Pane2,
|
|
|
|
Pane3,
|
|
|
|
Pane01,
|
|
|
|
Pane12,
|
|
|
|
Pane23,
|
|
|
|
Pane012,
|
|
|
|
Pane123,
|
|
|
|
Pane0123,
|
|
|
|
Pane4,
|
|
|
|
Pane5,
|
|
|
|
Pane6,
|
|
|
|
Pane7,
|
|
|
|
Pane45,
|
|
|
|
Pane56,
|
|
|
|
Pane67,
|
|
|
|
Pane456,
|
|
|
|
Pane567,
|
|
|
|
Pane4567,
|
|
|
|
Invalid = -1
|
2015-09-24 07:47:30 +00:00
|
|
|
};
|
2018-12-08 05:30:43 +00:00
|
|
|
Value<Position> position;
|
|
|
|
Value<atUint32> width; // width of animation cell
|
|
|
|
Value<atUint32> height; // height of animation cell
|
|
|
|
Value<float> interval; // 0.0 - 1.0
|
|
|
|
Value<float> fadeDuration; // 0.0 - 1.0
|
|
|
|
};
|
2015-09-24 07:47:30 +00:00
|
|
|
|
2018-12-08 05:30:43 +00:00
|
|
|
Texture textures[4];
|
2015-09-24 07:47:30 +00:00
|
|
|
|
2018-12-08 05:30:43 +00:00
|
|
|
static bool Extract(PAKEntryReadStream& rs, const hecl::ProjectPath& outPath) {
|
|
|
|
SCAN scan;
|
|
|
|
scan.read(rs);
|
|
|
|
athena::io::FileWriter writer(outPath.getAbsolutePath());
|
|
|
|
athena::io::ToYAMLStream(scan, writer);
|
|
|
|
return true;
|
|
|
|
}
|
2015-10-27 00:19:03 +00:00
|
|
|
|
2018-12-08 05:30:43 +00:00
|
|
|
static bool Cook(const SCAN& scan, const hecl::ProjectPath& outPath) {
|
|
|
|
athena::io::FileWriter ws(outPath.getAbsolutePath());
|
|
|
|
scan.write(ws);
|
|
|
|
return true;
|
|
|
|
}
|
2016-01-05 00:48:10 +00:00
|
|
|
|
2018-12-08 05:30:43 +00:00
|
|
|
static Category GetCategory(const hecl::ProjectPath& inPath) {
|
|
|
|
SCAN scan;
|
|
|
|
athena::io::FileReader reader(inPath.getAbsolutePath());
|
|
|
|
if (reader.hasError())
|
|
|
|
return Category::None;
|
|
|
|
if (!athena::io::FromYAMLStream(scan, reader))
|
|
|
|
return Category::None;
|
|
|
|
return scan.category;
|
|
|
|
}
|
2016-10-02 22:41:36 +00:00
|
|
|
|
2018-12-08 05:30:43 +00:00
|
|
|
static void Name(const SpecBase& dataSpec, PAKEntryReadStream& rs, PAKRouter<PAKBridge>& pakRouter,
|
|
|
|
PAK::Entry& entry) {
|
|
|
|
SCAN scan;
|
|
|
|
scan.read(rs);
|
2019-07-20 04:27:21 +00:00
|
|
|
if (scan.string.isValid()) {
|
2018-12-08 05:30:43 +00:00
|
|
|
PAK::Entry* ent = (PAK::Entry*)pakRouter.lookupEntry(scan.string);
|
2019-07-20 04:27:21 +00:00
|
|
|
ent->name = fmt::format(fmt("SCAN_{}_strg"), entry.id);
|
2015-10-27 00:19:03 +00:00
|
|
|
}
|
2018-12-08 05:30:43 +00:00
|
|
|
for (int i = 0; i < 4; ++i) {
|
|
|
|
const Texture& tex = scan.textures[i];
|
2019-07-20 04:27:21 +00:00
|
|
|
if (tex.texture.isValid()) {
|
2018-12-08 05:30:43 +00:00
|
|
|
PAK::Entry* ent = (PAK::Entry*)pakRouter.lookupEntry(tex.texture);
|
2019-07-20 04:27:21 +00:00
|
|
|
ent->name = fmt::format(fmt("SCAN_{}_tex{}"), entry.id, i + 1);
|
2018-12-08 05:30:43 +00:00
|
|
|
}
|
2017-01-31 11:21:45 +00:00
|
|
|
}
|
2018-12-08 05:30:43 +00:00
|
|
|
}
|
2018-02-22 07:24:51 +00:00
|
|
|
|
2019-08-15 02:20:37 +00:00
|
|
|
void gatherDependencies(std::vector<hecl::ProjectPath>& pathsOut) const {
|
2018-12-08 05:30:43 +00:00
|
|
|
g_curSpec->flattenDependencies(frame, pathsOut);
|
|
|
|
g_curSpec->flattenDependencies(string, pathsOut);
|
|
|
|
for (int i = 0; i < 4; ++i)
|
|
|
|
g_curSpec->flattenDependencies(textures[i].texture, pathsOut);
|
|
|
|
}
|
|
|
|
};
|
2015-09-24 07:47:30 +00:00
|
|
|
|
2018-12-08 05:30:43 +00:00
|
|
|
} // namespace DataSpec::DNAMP1
|