yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
sprite_catalog.h
Go to the documentation of this file.
1#ifndef YAZE_ZELDA3_SPRITE_SPRITE_CATALOG_H_
2#define YAZE_ZELDA3_SPRITE_SPRITE_CATALOG_H_
3
4#include <string>
5#include <vector>
6
7#include "absl/status/statusor.h"
8#include "absl/strings/string_view.h"
9
10namespace yaze::zelda3 {
11
13 std::string role;
14 std::string path; // Relative to the explicitly configured source root.
15 std::string label;
16 std::string adapter = "literal_v1";
17};
18
20 std::string key;
21 std::string name;
23 std::vector<SpriteSourceBinding> sources;
24};
25
27 std::string key;
28 std::string name;
29 int main_id = 0;
30 std::string fallback_variant;
31 std::vector<SpriteSourceBinding> sources;
32 std::vector<SpriteCatalogVariant> variants;
33};
34
36 // Always preserve the caller's raw value, including unknown/invalid values.
37 int raw_subtype = 0;
38 const SpriteCatalogVariant* variant = nullptr;
39 bool used_fallback = false;
40 std::string explanation;
41};
42
43// Metadata only: no ROM dependency, registration writes, or generated code.
44// Instances belong to a project/session, never the global sprite-name provider.
46 public:
47 static absl::StatusOr<SpriteCatalog> Parse(absl::string_view json);
48 static absl::StatusOr<SpriteCatalog> Load(const std::string& path);
49
50 const std::vector<SpriteCatalogFamily>& families() const { return families_; }
51 const SpriteCatalogFamily* FindFamily(int main_id) const;
52 SpriteCatalogResolution Resolve(int main_id, int raw_subtype) const;
53
54 private:
55 std::vector<SpriteCatalogFamily> families_;
56};
57
59 std::string content; // Exact bytes used for source-drift hashes.
60 std::string path;
61 std::vector<std::string> lines;
62 int label_line = 0; // One-based; a missing/ambiguous label is an error.
63};
64
65// Reads one explicitly selected binding. No recursive scan or per-frame I/O.
66// Absolute paths, traversal, and symlinks escaping source_root are rejected.
67absl::StatusOr<SpriteSourceDocument> ReadSpriteSourceFile(
68 const std::string& source_root, const std::string& relative_path);
69
70absl::StatusOr<SpriteSourceDocument> ReadSpriteSource(
71 const std::string& source_root, const SpriteSourceBinding& binding);
72
73} // namespace yaze::zelda3
74#endif // YAZE_ZELDA3_SPRITE_SPRITE_CATALOG_H_
const std::vector< SpriteCatalogFamily > & families() const
static absl::StatusOr< SpriteCatalog > Load(const std::string &path)
static absl::StatusOr< SpriteCatalog > Parse(absl::string_view json)
const SpriteCatalogFamily * FindFamily(int main_id) const
SpriteCatalogResolution Resolve(int main_id, int raw_subtype) const
std::vector< SpriteCatalogFamily > families_
Zelda 3 specific classes and functions.
nlohmann::json json
absl::StatusOr< SpriteSourceDocument > ReadSpriteSource(const std::string &source_root, const SpriteSourceBinding &binding)
absl::StatusOr< SpriteSourceDocument > ReadSpriteSourceFile(const std::string &source_root, const std::string &relative_path)
std::vector< SpriteSourceBinding > sources
std::vector< SpriteCatalogVariant > variants
const SpriteCatalogVariant * variant
std::vector< SpriteSourceBinding > sources
std::vector< std::string > lines