Porytiles
Loading...
Searching...
No Matches
project_tileset_artifact_writer.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <map>
4#include <vector>
5
6#include "gsl/pointers"
7
25
26namespace porytiles {
27
36 public:
38 gsl::not_null<DomainConfig *> domain_config,
39 gsl::not_null<InfraConfig *> infra_config,
40 std::filesystem::path project_root,
41 BaseGame base_game,
42 std::size_t metatile_attr_size,
43 gsl::not_null<const TextFormatter *> format,
44 gsl::not_null<const UserDiagnostics *> diag,
45 gsl::not_null<PngRgbaImageSaver *> png_rgba_saver,
46 gsl::not_null<PngIndexedImageSaver *> png_indexed_saver,
47 gsl::not_null<FilePalSaver *> pal_saver,
48 gsl::not_null<const AnimJsonParser *> anim_json_parser,
49 gsl::not_null<const AnimCodeGenerator *> anim_code_generator,
50 gsl::not_null<const BehaviorMapProvider *> behavior_map,
51 const TerrainTypeMapProvider *terrain_map = nullptr,
52 const EncounterTypeMapProvider *encounter_map = nullptr)
53 : domain_config_{domain_config}, infra_config_{infra_config}, project_root_{std::move(project_root)},
54 base_game_{base_game}, metatile_attr_size_{metatile_attr_size}, format_{format}, diag_{diag},
55 png_rgba_saver_{png_rgba_saver}, png_indexed_saver_{png_indexed_saver}, pal_saver_{pal_saver},
56 anim_json_parser_{anim_json_parser}, anim_code_generator_{anim_code_generator}, behavior_map_{behavior_map},
57 terrain_map_{terrain_map}, encounter_map_{encounter_map}, metadata_provider_{project_root_, format, diag},
58 metadata_writer_{project_root_, format}
59 {
60 }
61
62 [[nodiscard]] ChainableResult<void> begin_transaction() override;
63
64 [[nodiscard]] ChainableResult<void> commit() override;
65
66 [[nodiscard]] ChainableResult<void> rollback() override;
67
68 /*
69 * Porymap artifacts
70 */
71 [[nodiscard]] ChainableResult<void> write_metatiles_bin(const ArtifactKey &dest_key, const Tileset &src) override;
72
73 [[nodiscard]] ChainableResult<void>
74 write_metatile_attributes_bin(const ArtifactKey &dest_key, const Tileset &src) override;
75
76 [[nodiscard]] ChainableResult<void> write_tiles_png(const ArtifactKey &dest_key, const Tileset &src) override;
77
78 [[nodiscard]] ChainableResult<void>
79 write_porymap_pal_n(const ArtifactKey &dest_key, const Tileset &src, std::size_t index) override;
80
82 const ArtifactKey &dest_key,
83 const Tileset &src,
84 const std::string &anim_name,
85 const std::string &frame_name) override;
86
87 [[nodiscard]] ChainableResult<void>
88 write_porymap_anim_params(const ArtifactKey &dest_key, const Tileset &src) override;
89
90 /*
91 * Porytiles artifacts
92 */
93 [[nodiscard]] ChainableResult<void> write_bottom_png(const ArtifactKey &dest_key, const Tileset &src) override;
94
95 [[nodiscard]] ChainableResult<void> write_middle_png(const ArtifactKey &dest_key, const Tileset &src) override;
96
97 [[nodiscard]] ChainableResult<void> write_top_png(const ArtifactKey &dest_key, const Tileset &src) override;
98
99 [[nodiscard]] ChainableResult<void> write_attributes_csv(const ArtifactKey &dest_key, const Tileset &src) override;
100
101 [[nodiscard]] ChainableResult<void>
102 write_porytiles_pal_n(const ArtifactKey &dest_key, const Tileset &src, std::size_t index) override;
103
105 const ArtifactKey &dest_key,
106 const Tileset &src,
107 const std::string &anim_name,
108 const std::string &frame_name) override;
109
110 [[nodiscard]] ChainableResult<void>
111 write_porytiles_anim_params(const ArtifactKey &dest_key, const Tileset &src) override;
112
113 private:
121 struct StagedDirectory {
122 std::filesystem::path staging_path;
123 std::filesystem::path dest_path;
124 };
125
126 DomainConfig *domain_config_;
127 InfraConfig *infra_config_;
128 std::filesystem::path project_root_;
129 const BaseGame base_game_;
130 const std::size_t metatile_attr_size_;
131 std::filesystem::path transaction_root_;
132 const TextFormatter *format_;
133 const UserDiagnostics *diag_;
134 PngRgbaImageSaver *png_rgba_saver_;
135 PngIndexedImageSaver *png_indexed_saver_;
136 FilePalSaver *pal_saver_;
137 const AnimJsonParser *anim_json_parser_;
138 const AnimCodeGenerator *anim_code_generator_;
139 const BehaviorMapProvider *behavior_map_;
140 const TerrainTypeMapProvider *terrain_map_;
141 const EncounterTypeMapProvider *encounter_map_;
142 ProjectTilesetMetadataProvider metadata_provider_;
143 ProjectTilesetMetadataWriter metadata_writer_;
144
146 std::map<std::filesystem::path, StagedDirectory> staged_directories_;
148 std::vector<std::pair<std::filesystem::path, std::filesystem::path>> staged_special_files_;
149};
150
151} // namespace porytiles
A type-safe wrapper for artifact keys.
A result type that maintains a chainable sequence of errors for debugging and error reporting.
Abstract interface for providing two-way metatile encounter type mappings.
Provides a filesystem-based implementation for TilesetArtifactWriter.
ChainableResult< void > write_porymap_anim_params(const ArtifactKey &dest_key, const Tileset &src) override
Writes the animation parameters to the Porymap component backing store.
ChainableResult< void > write_porymap_pal_n(const ArtifactKey &dest_key, const Tileset &src, std::size_t index) override
ChainableResult< void > write_metatiles_bin(const ArtifactKey &dest_key, const Tileset &src) override
ChainableResult< void > write_top_png(const ArtifactKey &dest_key, const Tileset &src) override
ChainableResult< void > begin_transaction() override
Begins a new transaction for atomic write operations.
ChainableResult< void > write_porytiles_anim_params(const ArtifactKey &dest_key, const Tileset &src) override
Writes animation parameters to the Porytiles component backing store.
ChainableResult< void > write_tiles_png(const ArtifactKey &dest_key, const Tileset &src) override
ProjectTilesetArtifactWriter(gsl::not_null< DomainConfig * > domain_config, gsl::not_null< InfraConfig * > infra_config, std::filesystem::path project_root, BaseGame base_game, std::size_t metatile_attr_size, gsl::not_null< const TextFormatter * > format, gsl::not_null< const UserDiagnostics * > diag, gsl::not_null< PngRgbaImageSaver * > png_rgba_saver, gsl::not_null< PngIndexedImageSaver * > png_indexed_saver, gsl::not_null< FilePalSaver * > pal_saver, gsl::not_null< const AnimJsonParser * > anim_json_parser, gsl::not_null< const AnimCodeGenerator * > anim_code_generator, gsl::not_null< const BehaviorMapProvider * > behavior_map, const TerrainTypeMapProvider *terrain_map=nullptr, const EncounterTypeMapProvider *encounter_map=nullptr)
ChainableResult< void > write_bottom_png(const ArtifactKey &dest_key, const Tileset &src) override
ChainableResult< void > commit() override
Commits all buffered write operations in the current transaction.
ChainableResult< void > write_middle_png(const ArtifactKey &dest_key, const Tileset &src) override
ChainableResult< void > write_porymap_anim_frame(const ArtifactKey &dest_key, const Tileset &src, const std::string &anim_name, const std::string &frame_name) override
ChainableResult< void > write_porytiles_pal_n(const ArtifactKey &dest_key, const Tileset &src, std::size_t index) override
ChainableResult< void > write_metatile_attributes_bin(const ArtifactKey &dest_key, const Tileset &src) override
ChainableResult< void > rollback() override
Rolls back all buffered write operations in the current transaction.
ChainableResult< void > write_porytiles_anim_frame(const ArtifactKey &dest_key, const Tileset &src, const std::string &anim_name, const std::string &frame_name) override
ChainableResult< void > write_attributes_csv(const ArtifactKey &dest_key, const Tileset &src) override
Abstract interface for providing two-way metatile terrain type mappings.
Abstract interface for writing tileset artifacts from a Tileset object to a backing store.
A complete tileset containing both Porytiles and Porymap components.
Definition tileset.hpp:14
BaseGame
Identifies the target base game for a decompilation project.
Definition base_game.hpp:20