yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
tile16_proposal_generator.h
Go to the documentation of this file.
1#ifndef YAZE_CLI_SERVICE_TILE16_PROPOSAL_GENERATOR_H_
2#define YAZE_CLI_SERVICE_TILE16_PROPOSAL_GENERATOR_H_
3
4#include <chrono>
5#include <string>
6#include <vector>
7
8#include "absl/status/status.h"
9#include "absl/status/statusor.h"
10#include "app/gfx/bitmap.h"
11#include "app/rom.h"
12
13namespace yaze {
14namespace cli {
15
20 int map_id; // Overworld map ID
21 int x; // Tile16 X coordinate
22 int y; // Tile16 Y coordinate
23 uint16_t old_tile; // Original tile16 ID (for rollback)
24 uint16_t new_tile; // New tile16 ID to apply
25
26 std::string ToString() const;
27};
28
37 std::string id; // Unique proposal ID (UUID-like)
38 std::string prompt; // Original user prompt
39 std::vector<Tile16Change> changes; // List of tile changes
40 std::string reasoning; // AI's explanation
41 std::string ai_service; // "gemini", "ollama", "mock"
42 std::chrono::system_clock::time_point created_at; // Timestamp
43
44 // Proposal state
45 enum class Status {
46 PENDING, // Generated but not reviewed
47 ACCEPTED, // User accepted, changes applied
48 REJECTED, // User rejected, changes discarded
49 APPLIED // Successfully applied to ROM
50 };
52
53 std::string ToJson() const;
54 static absl::StatusOr<Tile16Proposal> FromJson(const std::string& json);
55};
56
64 public:
66
67 // Allow testing of private methods
69
79 absl::StatusOr<Tile16Proposal> GenerateFromCommands(
80 const std::string& prompt,
81 const std::vector<std::string>& commands,
82 const std::string& ai_service,
83 Rom* rom);
84
95 absl::Status ApplyProposal(const Tile16Proposal& proposal, Rom* rom);
96
107 absl::StatusOr<gfx::Bitmap> GenerateDiff(
108 const Tile16Proposal& proposal,
109 Rom* before_rom,
110 Rom* after_rom);
111
119 absl::Status SaveProposal(const Tile16Proposal& proposal,
120 const std::string& path);
121
128 absl::StatusOr<Tile16Proposal> LoadProposal(const std::string& path);
129
130 private:
136 absl::StatusOr<Tile16Change> ParseSetTileCommand(
137 const std::string& command,
138 Rom* rom);
139
145 absl::StatusOr<std::vector<Tile16Change>> ParseSetAreaCommand(
146 const std::string& command,
147 Rom* rom);
148
155 absl::StatusOr<std::vector<Tile16Change>> ParseReplaceTileCommand(
156 const std::string& command,
157 Rom* rom);
158
162 std::string GenerateProposalId() const;
163};
164
165} // namespace cli
166} // namespace yaze
167
168#endif // YAZE_CLI_SERVICE_TILE16_PROPOSAL_GENERATOR_H_
169
The Rom class is used to load, save, and modify Rom data.
Definition rom.h:71
Generates and manages tile16 editing proposals.
std::string GenerateProposalId() const
Generate a unique proposal ID.
absl::StatusOr< Tile16Proposal > GenerateFromCommands(const std::string &prompt, const std::vector< std::string > &commands, const std::string &ai_service, Rom *rom)
Generate a tile16 proposal from an AI-generated command list.
absl::StatusOr< Tile16Proposal > LoadProposal(const std::string &path)
Load a proposal from a JSON file.
absl::StatusOr< std::vector< Tile16Change > > ParseReplaceTileCommand(const std::string &command, Rom *rom)
Parse a "overworld replace-tile" command into multiple Tile16Changes.
absl::StatusOr< gfx::Bitmap > GenerateDiff(const Tile16Proposal &proposal, Rom *before_rom, Rom *after_rom)
Generate a visual diff bitmap for a proposal.
absl::Status ApplyProposal(const Tile16Proposal &proposal, Rom *rom)
Apply a proposal to a ROM (typically a sandbox).
absl::Status SaveProposal(const Tile16Proposal &proposal, const std::string &path)
Save a proposal to a JSON file for later review.
absl::StatusOr< std::vector< Tile16Change > > ParseSetAreaCommand(const std::string &command, Rom *rom)
Parse a "overworld set-area" command into multiple Tile16Changes.
absl::StatusOr< Tile16Change > ParseSetTileCommand(const std::string &command, Rom *rom)
Parse a single "overworld set-tile" command into a Tile16Change.
Main namespace for the application.
Represents a single tile16 change in a proposal.
Represents a proposal for tile16 edits on the overworld.
std::chrono::system_clock::time_point created_at
std::vector< Tile16Change > changes
static absl::StatusOr< Tile16Proposal > FromJson(const std::string &json)