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
23
24namespace porytiles {
25
32 public:
34 gsl::not_null<DomainConfig *> domain_config,
35 gsl::not_null<InfraConfig *> infra_config,
36 std::filesystem::path project_root,
37 gsl::not_null<const Schema *> schema,
38 gsl::not_null<const ProviderMap *> providers,
39 gsl::not_null<const TextFormatter *> format,
40 gsl::not_null<const UserDiagnostics *> diag,
41 gsl::not_null<PngRgbaImageSaver *> png_rgba_saver,
42 gsl::not_null<PngIndexedImageSaver *> png_indexed_saver,
43 gsl::not_null<FilePaletteSaver *> palette_saver,
44 gsl::not_null<const AnimJsonParser *> anim_json_parser,
45 gsl::not_null<const AnimCodeGenerator *> anim_code_generator)
46 : domain_config_{domain_config}, infra_config_{infra_config}, project_root_{std::move(project_root)},
47 schema_{schema}, providers_{providers}, format_{format}, diag_{diag}, png_rgba_saver_{png_rgba_saver},
48 png_indexed_saver_{png_indexed_saver}, palette_saver_{palette_saver}, anim_json_parser_{anim_json_parser},
49 anim_code_generator_{anim_code_generator}, metadata_provider_{project_root_, format, diag},
50 metadata_writer_{project_root_, format}
51 {
52 }
53
54 [[nodiscard]] ChainableResult<void> begin_transaction() override;
55
56 [[nodiscard]] ChainableResult<void> commit() override;
57
58 [[nodiscard]] ChainableResult<void> rollback() override;
59
60 // Porymap artifacts
61 [[nodiscard]] ChainableResult<void> write_metatiles_bin(const ArtifactKey &dest_key, const Tileset &src) override;
62
63 [[nodiscard]] ChainableResult<void>
64 write_metatile_attributes_bin(const ArtifactKey &dest_key, const Tileset &src) override;
65
66 [[nodiscard]] ChainableResult<void> write_tiles_png(const ArtifactKey &dest_key, const Tileset &src) override;
67
68 [[nodiscard]] ChainableResult<void>
69 write_porymap_palette_n(const ArtifactKey &dest_key, const Tileset &src, std::size_t index) override;
70
72 const ArtifactKey &dest_key,
73 const Tileset &src,
74 const std::string &anim_name,
75 const std::string &frame_name) override;
76
77 [[nodiscard]] ChainableResult<void>
78 write_porymap_anim_params(const ArtifactKey &dest_key, const Tileset &src) override;
79
80 // Porytiles artifacts
81 [[nodiscard]] ChainableResult<void> write_bottom_png(const ArtifactKey &dest_key, const Tileset &src) override;
82
83 [[nodiscard]] ChainableResult<void> write_middle_png(const ArtifactKey &dest_key, const Tileset &src) override;
84
85 [[nodiscard]] ChainableResult<void> write_top_png(const ArtifactKey &dest_key, const Tileset &src) override;
86
87 [[nodiscard]] ChainableResult<void> write_attributes_csv(const ArtifactKey &dest_key, const Tileset &src) override;
88
89 [[nodiscard]] ChainableResult<void>
90 write_porytiles_palette_n(const ArtifactKey &dest_key, const Tileset &src, std::size_t index) override;
91
93 const ArtifactKey &dest_key,
94 const Tileset &src,
95 const std::string &anim_name,
96 const std::string &frame_name) override;
97
98 [[nodiscard]] ChainableResult<void>
99 write_porytiles_anim_params(const ArtifactKey &dest_key, const Tileset &src) override;
100
101 private:
107 struct StagedDirectory {
108 std::filesystem::path staging_path;
109 std::filesystem::path dest_path;
110 };
111
112 DomainConfig *domain_config_;
113 InfraConfig *infra_config_;
114 std::filesystem::path project_root_;
115 const Schema *schema_;
116 const ProviderMap *providers_;
117 std::filesystem::path transaction_root_;
118 const TextFormatter *format_;
119 const UserDiagnostics *diag_;
120 PngRgbaImageSaver *png_rgba_saver_;
121 PngIndexedImageSaver *png_indexed_saver_;
122 FilePaletteSaver *palette_saver_;
123 const AnimJsonParser *anim_json_parser_;
124 const AnimCodeGenerator *anim_code_generator_;
125 ProjectTilesetMetadataProvider metadata_provider_;
126 ProjectTilesetMetadataWriter metadata_writer_;
127
129 std::map<std::filesystem::path, StagedDirectory> staged_directories_;
131 std::vector<std::pair<std::filesystem::path, std::filesystem::path>> staged_special_files_;
132};
133
134} // namespace porytiles
A type-safe wrapper for artifact keys.
A result type that maintains a chainable sequence of errors for debugging and error reporting.
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_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, gsl::not_null< const Schema * > schema, gsl::not_null< const ProviderMap * > providers, 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< FilePaletteSaver * > palette_saver, gsl::not_null< const AnimJsonParser * > anim_json_parser, gsl::not_null< const AnimCodeGenerator * > anim_code_generator)
ChainableResult< void > write_porytiles_palette_n(const ArtifactKey &dest_key, const Tileset &src, std::size_t index) override
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_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_porymap_palette_n(const ArtifactKey &dest_key, const Tileset &src, std::size_t index) override
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 writing tileset artifacts from a Tileset object to a backing store.
A complete tileset containing both Porytiles and Porymap components.
Definition tileset.hpp:12
std::map< std::string, std::unique_ptr< EnumMapProvider >, std::less<> > ProviderMap
Maps schema field names to the provider that names that field's values.