yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
tile_painting_manager.h
Go to the documentation of this file.
1#ifndef YAZE_APP_EDITOR_OVERWORLD_PAINTING_TILE_PAINTING_MANAGER_H
2#define YAZE_APP_EDITOR_OVERWORLD_PAINTING_TILE_PAINTING_MANAGER_H
3
4#include <array>
5#include <functional>
6#include <vector>
7
10#include "app/gfx/core/bitmap.h"
13#include "imgui/imgui.h"
14#include "rom/rom.h"
16
17namespace yaze {
18namespace editor {
19
20class Tile16Editor;
21
28 std::array<gfx::Bitmap, zelda3::kExpandedMapCount>* maps_bmp = nullptr;
30 int* current_tile16 = nullptr;
31 std::vector<int>* selected_tile16_ids = nullptr;
32 int* current_map = nullptr;
33 int* current_world = nullptr;
35 Rom* rom = nullptr;
37};
38
41 std::function<void(int map_id, int world, int x, int y, int old_tile_id)>
43 std::function<void()> finalize_paint_operation;
44 std::function<void(int map_index)> refresh_overworld_map_on_demand;
45 std::function<void()> scroll_blockset_to_current_tile;
47 std::function<void(int tile_id)> request_tile16_selection;
51 std::function<void(int map_id)> select_map_for_editing;
52};
53
59 public:
61 const TilePaintingCallbacks& callbacks);
62
65
68
70 const TileBrush* selection_brush() const;
71
74 absl::Status PasteBrush(const TileBrush& brush);
75
77 void RenderUpdatedMapBitmap(const ImVec2& click_position,
78 const std::vector<uint8_t>& tile_data);
79
82
84 void ToggleBrushTool();
85
87 void ActivateFillTool();
88
91 const gfx::Bitmap& map_brush_preview(int map_id) const {
92 return map_brush_previews_.at(map_id);
93 }
94
95 private:
96 struct TilePosition {
97 int x;
98 int y;
99 };
100 using ChangedMaps = std::array<bool, zelda3::kNumOverworldMaps>;
101
103 bool IsValidTile(TilePosition position) const;
104 std::vector<std::vector<uint16_t>>& WorldTiles() const;
105 void CaptureSelection();
106 // Draws `brush` at `anchor` with each destination map's own graphics and
107 // palette. `mark_selection` also moves the canvas selection rectangle.
108 void DrawBrushPreview(const TileBrush& brush, TilePosition anchor,
109 bool mark_selection, int alpha);
110 // Pixels of `tile_id` as `map_id` draws it (its own tile16 blockset);
111 // falls back to the shared blockset when that map has none built.
112 std::vector<uint8_t> Tile16PixelsForMap(int map_id, int tile_id) const;
113 void PaintPattern(const TileBrush& brush, TilePosition anchor, int width,
114 int height, bool finalize = true);
115 bool PaintTile(TilePosition position, int tile_id, ChangedMaps& changed_maps);
116 void RenderMapTile(int map_id, TilePosition position,
117 const std::vector<uint8_t>& tile_data);
118
125 std::array<gfx::Bitmap, zelda3::kNumOverworldMaps> map_brush_previews_;
126};
127
128} // namespace editor
129} // namespace yaze
130
131#endif // YAZE_APP_EDITOR_OVERWORLD_PAINTING_TILE_PAINTING_MANAGER_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:49
ImGui façade for Tile16 editing; domain state lives in Tile16EditSession.
Manages tile painting, fill, selection, and eyedropper operations.
std::vector< uint8_t > Tile16PixelsForMap(int map_id, int tile_id) const
bool PaintTile(TilePosition position, int tile_id, ChangedMaps &changed_maps)
void CheckForSelectRectangle()
Draw and create the tile16 IDs that are currently selected.
bool IsValidTile(TilePosition position) const
std::array< gfx::Bitmap, zelda3::kNumOverworldMaps > map_brush_previews_
void CheckForOverworldEdits()
Main entry point: check for tile edits (paint, fill, stamp).
void RenderUpdatedMapBitmap(const ImVec2 &click_position, const std::vector< uint8_t > &tile_data)
Update bitmap pixels after a single tile paint.
const gfx::Bitmap & map_brush_preview(int map_id) const
bool PickTile16FromHoveredCanvas()
Eyedropper: pick the tile16 under the hovered canvas position.
void RenderMapTile(int map_id, TilePosition position, const std::vector< uint8_t > &tile_data)
void ActivateFillTool()
Toggle FILL_TILE mode on/off.
absl::Status PasteBrush(const TileBrush &brush)
const TileBrush * selection_brush() const
The captured selection, independent of its source or preview position.
void ToggleBrushTool()
Toggle between DRAW_TILE and MOUSE modes.
void DrawBrushPreview(const TileBrush &brush, TilePosition anchor, bool mark_selection, int alpha)
std::vector< std::vector< uint16_t > > & WorldTiles() const
std::array< bool, zelda3::kNumOverworldMaps > ChangedMaps
TilePaintingManager(const TilePaintingDependencies &deps, const TilePaintingCallbacks &callbacks)
void PaintPattern(const TileBrush &brush, TilePosition anchor, int width, int height, bool finalize=true)
Represents a bitmap image optimized for SNES ROM hacking.
Definition bitmap.h:70
uint8_t at(int i) const
Definition bitmap.h:412
Modern, robust canvas for drawing and manipulating graphics.
Definition canvas.h:64
Callbacks for undo integration and map refresh.
std::function< void(int tile_id)> request_tile16_selection
When set, eyedropper routes here (guarded RequestTileSwitch path).
std::function< void(int map_index)> refresh_overworld_map_on_demand
std::function< void()> scroll_blockset_to_current_tile
std::function< void()> finalize_paint_operation
std::function< void(int map_id)> select_map_for_editing
std::function< void(int map_id, int world, int x, int y, int old_tile_id)> create_undo_point
Shared state for the tile painting system.
std::array< gfx::Bitmap, zelda3::kExpandedMapCount > * maps_bmp
Tilemap structure for SNES tile-based graphics management.
Definition tilemap.h:118