载入中...
搜索中...
未找到
Brush.h
浏览该文件的文档.
1#pragma once
2
3#include "editor/TileBuffer.h"
4
5#include <string>
6#include <vector>
7
8namespace eve::editor {
9
14class Brush {
15public:
17
18 void setTool(const std::string &tool);
19 std::string getTool() const { return tool_; }
20
21 void setSize(int size);
22 int getSize() const { return size_; }
23
24 void setShape(const std::string &shape);
25 std::string getShape() const { return shape_; }
26
27 void setTile(int gid);
28 int getTile() const { return tile_; }
29
30 void setEraseTile(int gid);
31 int getEraseTile() const { return eraseTile_; }
32
33 void setStampSize(int width, int height);
34 int getStampWidth() const { return stampW_; }
35 int getStampHeight() const { return stampH_; }
36 void setStampTile(int lx, int ly, int gid);
37 int getStampTile(int lx, int ly) const;
38 void clearStamp();
39
41 int paintAt(TileBuffer *buffer, int tx, int ty);
42 int eraseAt(TileBuffer *buffer, int tx, int ty);
43 int floodFill(TileBuffer *buffer, int tx, int ty);
44 int paintLine(TileBuffer *buffer, int x0, int y0, int x1, int y1);
45 int paintRect(TileBuffer *buffer, int x0, int y0, int x1, int y1, bool filled);
46
48 int previewAt(TileBuffer *buffer, int tx, int ty);
49 int previewLine(TileBuffer *buffer, int x0, int y0, int x1, int y1);
50 int previewRect(TileBuffer *buffer, int x0, int y0, int x1, int y1, bool filled);
51
52 int getPreviewCount() const { return static_cast<int>(preview_.size()); }
53 int getPreviewX(int index) const;
54 int getPreviewY(int index) const;
55 int getPreviewGid(int index) const;
56
57 int getChangeCount() const { return static_cast<int>(changes_.size()); }
58 int getChangeX(int index) const;
59 int getChangeY(int index) const;
60 int getChangeOldGid(int index) const;
61 int getChangeNewGid(int index) const;
62
63private:
64 struct Cell {
65 int x = 0;
66 int y = 0;
67 int gid = 0;
68 int oldGid = 0;
69 };
70
71 void clearChanges();
72 void clearPreview();
73 void collectBrushCells(int tx, int ty, std::vector<std::pair<int, int>> &out) const;
74 void collectLineCells(int x0, int y0, int x1, int y1, std::vector<std::pair<int, int>> &out) const;
75 void collectRectCells(int x0, int y0, int x1, int y1, bool filled,
76 std::vector<std::pair<int, int>> &out) const;
77 int applyCells(TileBuffer *buffer, const std::vector<std::pair<int, int>> &cells, int gid);
78 int applyStamp(TileBuffer *buffer, int tx, int ty);
79 int previewCells(TileBuffer *buffer, const std::vector<std::pair<int, int>> &cells, int gid);
80 bool validChange(int index) const;
81 bool validPreview(int index) const;
82
83 std::string tool_ = "paint";
84 std::string shape_ = "square";
85 int size_ = 1;
86 int tile_ = 1;
87 int eraseTile_ = 0;
88 int stampW_ = 0;
89 int stampH_ = 0;
90 std::vector<int> stamp_;
91
92 std::vector<Cell> changes_;
93 std::vector<Cell> preview_;
94};
95
96} // namespace eve::editor
int y
Definition Grass.cpp:135
float height
Definition Grass.cpp:235
int x
Definition Grass.cpp:135
int width
Unity GridBrushBase-inspired tile brush. Operates on TileBuffer; exposes preview + change list for UI...
Definition Brush.h:14
int getPreviewX(int index) const
Definition Brush.cpp:304
void setSize(int size)
Definition Brush.cpp:22
void setTool(const std::string &tool)
Definition Brush.cpp:14
int getPreviewGid(int index) const
Definition Brush.cpp:312
int paintLine(TileBuffer *buffer, int x0, int y0, int x1, int y1)
Definition Brush.cpp:243
int previewAt(TileBuffer *buffer, int tx, int ty)
Fill preview buffer without mutating target.
Definition Brush.cpp:257
void setStampTile(int lx, int ly, int gid)
Definition Brush.cpp:45
int getPreviewCount() const
Definition Brush.h:52
int eraseAt(TileBuffer *buffer, int tx, int ty)
Definition Brush.cpp:201
int previewRect(TileBuffer *buffer, int x0, int y0, int x1, int y1, bool filled)
Definition Brush.cpp:290
int paintAt(TileBuffer *buffer, int tx, int ty)
Apply current tool at / between cells. Returns cells changed.
Definition Brush.cpp:192
int paintRect(TileBuffer *buffer, int x0, int y0, int x1, int y1, bool filled)
Definition Brush.cpp:250
int getEraseTile() const
Definition Brush.h:31
void setTile(int gid)
Definition Brush.cpp:34
int previewLine(TileBuffer *buffer, int x0, int y0, int x1, int y1)
Definition Brush.cpp:283
int getChangeNewGid(int index) const
Definition Brush.cpp:328
int getChangeX(int index) const
Definition Brush.cpp:316
int getTile() const
Definition Brush.h:28
void setEraseTile(int gid)
Definition Brush.cpp:36
int getStampTile(int lx, int ly) const
Definition Brush.cpp:52
int getChangeY(int index) const
Definition Brush.cpp:320
std::string getShape() const
Definition Brush.h:25
int getStampWidth() const
Definition Brush.h:34
int getChangeOldGid(int index) const
Definition Brush.cpp:324
void setShape(const std::string &shape)
Definition Brush.cpp:27
int getSize() const
Definition Brush.h:22
int getPreviewY(int index) const
Definition Brush.cpp:308
void clearStamp()
Definition Brush.cpp:59
int floodFill(TileBuffer *buffer, int tx, int ty)
Definition Brush.cpp:207
int getChangeCount() const
Definition Brush.h:57
void setStampSize(int width, int height)
Definition Brush.cpp:38
std::string getTool() const
Definition Brush.h:19
int getStampHeight() const
Definition Brush.h:35
Independent GID grid for map brushes (no hard dependency on map.TileLayer).
Definition TileBuffer.h:9