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/core/bitmap.h"
11#include "rom/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, const std::vector<std::string>& commands,
81 const std::string& ai_service, Rom* rom);
82
93 absl::Status ApplyProposal(const Tile16Proposal& proposal, Rom* rom);
94
105 absl::StatusOr<gfx::Bitmap> GenerateDiff(const Tile16Proposal& proposal,
106 Rom* before_rom, Rom* after_rom);
107
115 absl::Status SaveProposal(const Tile16Proposal& proposal,
116 const std::string& path);
117
124 absl::StatusOr<Tile16Proposal> LoadProposal(const std::string& path);
125
126 private:
132 absl::StatusOr<Tile16Change> ParseSetTileCommand(const std::string& command,
133 Rom* rom);
134
141 absl::StatusOr<std::vector<Tile16Change>> ParseSetAreaCommand(
142 const std::string& command, Rom* rom);
143
152 absl::StatusOr<std::vector<Tile16Change>> ParseReplaceTileCommand(
153 const std::string& command, Rom* rom);
154
158 std::string GenerateProposalId() const;
159};
160
161} // namespace cli
162} // namespace yaze
163
164#endif // YAZE_CLI_SERVICE_TILE16_PROPOSAL_GENERATOR_H_
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Definition rom.h:24
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.
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)