载入中...
搜索中...
未找到
LevelEditorModule.cpp
浏览该文件的文档.
2
8
9#include <simplesquirrel/simplesquirrel.hpp>
10
11#include <cstdint>
12#include <functional>
13#include <utility>
14
16
18
19std::unique_ptr<level_editing::TileBuffer> LevelEditorModule::newTileBuffer(int width, int height) const {
20 return std::make_unique<level_editing::TileBuffer>(width, height);
21}
22
23std::unique_ptr<level_editing::Brush> LevelEditorModule::newBrush() const {
24 return std::make_unique<level_editing::Brush>();
25}
26
27std::unique_ptr<level_editing::EditorHistory> LevelEditorModule::newHistory() const {
28 return std::make_unique<level_editing::EditorHistory>();
29}
30
31std::unique_ptr<level_editing::TileBufferTarget> LevelEditorModule::newTarget(std::string id,
33 return std::make_unique<level_editing::TileBufferTarget>(std::move(id), buffer);
34}
35
39
40void LevelEditorModule::expose(ssq::Table& table) {
41 auto buffer = table.addClass<level_editing::TileBuffer>(
42 "TileBuffer", std::function<level_editing::TileBuffer*()>([]() { return nullptr; }), true);
43 buffer.addFunc("getWidth", &level_editing::TileBuffer::getWidth);
44 buffer.addFunc("getHeight", &level_editing::TileBuffer::getHeight);
45 buffer.addFunc("resize", &level_editing::TileBuffer::resize);
48 buffer.addFunc("setGid", &level_editing::TileBuffer::setGid);
49 buffer.addFunc("getGid", &level_editing::TileBuffer::getGid);
51
52 auto brush = table.addClass<level_editing::Brush>(
53 "Brush", std::function<level_editing::Brush*()>([]() { return nullptr; }), true);
54 brush.addFunc("setTool", &level_editing::Brush::setTool);
55 brush.addFunc("getTool", &level_editing::Brush::getTool);
56 brush.addFunc("setSize", &level_editing::Brush::setSize);
57 brush.addFunc("getSize", &level_editing::Brush::getSize);
58 brush.addFunc("setShape", &level_editing::Brush::setShape);
59 brush.addFunc("getShape", &level_editing::Brush::getShape);
60 brush.addFunc("setTile", &level_editing::Brush::setTile);
61 brush.addFunc("getTile", &level_editing::Brush::getTile);
62 brush.addFunc("setEraseTile", &level_editing::Brush::setEraseTile);
63 brush.addFunc("getEraseTile", &level_editing::Brush::getEraseTile);
64 brush.addFunc("setStampSize", &level_editing::Brush::setStampSize);
65 brush.addFunc("getStampWidth", &level_editing::Brush::getStampWidth);
66 brush.addFunc("getStampHeight", &level_editing::Brush::getStampHeight);
67 brush.addFunc("setStampTile", &level_editing::Brush::setStampTile);
68 brush.addFunc("getStampTile", &level_editing::Brush::getStampTile);
69 brush.addFunc("clearStamp", &level_editing::Brush::clearStamp);
70 brush.addFunc("paintAt", &level_editing::Brush::paintAt);
71 brush.addFunc("eraseAt", &level_editing::Brush::eraseAt);
72 brush.addFunc("floodFill", &level_editing::Brush::floodFill);
73 brush.addFunc("paintLine", &level_editing::Brush::paintLine);
74 brush.addFunc("paintRect", &level_editing::Brush::paintRect);
75 brush.addFunc("previewAt", &level_editing::Brush::previewAt);
76 brush.addFunc("previewLine", &level_editing::Brush::previewLine);
77 brush.addFunc("previewRect", &level_editing::Brush::previewRect);
78 brush.addFunc("getPreviewCount", &level_editing::Brush::getPreviewCount);
79 brush.addFunc("getPreviewX", &level_editing::Brush::getPreviewX);
80 brush.addFunc("getPreviewY", &level_editing::Brush::getPreviewY);
81 brush.addFunc("getPreviewGid", &level_editing::Brush::getPreviewGid);
82 brush.addFunc("getChangeCount", &level_editing::Brush::getChangeCount);
83 brush.addFunc("getChangeX", &level_editing::Brush::getChangeX);
84 brush.addFunc("getChangeY", &level_editing::Brush::getChangeY);
85 brush.addFunc("getChangeOldGid", &level_editing::Brush::getChangeOldGid);
86 brush.addFunc("getChangeNewGid", &level_editing::Brush::getChangeNewGid);
87
88 auto history = table.addClass<level_editing::EditorHistory>(
89 "EditorHistory", std::function<level_editing::EditorHistory*()>([]() { return nullptr; }), true);
90 history.addFunc("clear", &level_editing::EditorHistory::clear);
91 history.addFunc("push", &level_editing::EditorHistory::push);
92 history.addFunc("beginGroup", &level_editing::EditorHistory::beginGroup);
93 history.addFunc("recordTile", &level_editing::EditorHistory::recordTile);
94 history.addFunc("endGroup", &level_editing::EditorHistory::endGroup);
95 history.addFunc("isGrouping", &level_editing::EditorHistory::isGrouping);
96 history.addFunc("canUndo", &level_editing::EditorHistory::canUndo);
97 history.addFunc("canRedo", &level_editing::EditorHistory::canRedo);
98 history.addFunc("getUndoCount", &level_editing::EditorHistory::getUndoCount);
99 history.addFunc("getRedoCount", &level_editing::EditorHistory::getRedoCount);
100 history.addFunc("undo", &level_editing::EditorHistory::undo);
101 history.addFunc("redo", &level_editing::EditorHistory::redo);
102 history.addFunc("applyLastToBuffer", &level_editing::EditorHistory::applyLastToBuffer);
103 history.addFunc("getLastActionName", &level_editing::EditorHistory::getLastActionName);
104 history.addFunc("getLastActionKind", &level_editing::EditorHistory::getLastActionKind);
105 history.addFunc("getLastPayload", &level_editing::EditorHistory::getLastPayload);
106 history.addFunc("getLastTileCount", &level_editing::EditorHistory::getLastTileCount);
107 history.addFunc("getLastTileX", &level_editing::EditorHistory::getLastTileX);
108 history.addFunc("getLastTileY", &level_editing::EditorHistory::getLastTileY);
109 history.addFunc("getLastTileOldGid", &level_editing::EditorHistory::getLastTileOldGid);
110 history.addFunc("getLastTileNewGid", &level_editing::EditorHistory::getLastTileNewGid);
111
112 auto target = table.addClass<level_editing::TileBufferTarget>(
113 "TileBufferTarget", std::function<level_editing::TileBufferTarget*()>([]() { return nullptr; }), true);
114 target.addFunc("getTargetId", [](level_editing::TileBufferTarget* self) {
115 return self ? self->targetId().value() : std::string{};
116 });
117 target.addFunc("getRevision", [](level_editing::TileBufferTarget* self) {
118 return self ? static_cast<std::int64_t>(self->revision()) : std::int64_t{0};
119 });
121 target.addFunc("getHeight", &level_editing::TileBufferTarget::height);
124 target.addFunc("clearDirtyRegion", &level_editing::TileBufferTarget::clearDirtyRegion);
125
126 auto module = table.addClass(name, LevelEditorModule::create, false);
127 expose(module);
128}
129
130void LevelEditorModule::expose(ssq::Class& cls) {
131 cls.addFunc("newTileBuffer", [](LevelEditorModule* self, int width, int height) {
132 return self->newTileBuffer(width, height).release();
133 });
134 cls.addFunc("newBrush", [](LevelEditorModule* self) { return self->newBrush().release(); });
135 cls.addFunc("newHistory", [](LevelEditorModule* self) { return self->newHistory().release(); });
136 cls.addFunc("createTarget", [](LevelEditorModule* self, const std::string& id, level_editing::TileBuffer* buffer) {
137 return self->newTarget(id, buffer).release();
138 });
139 cls.addFunc("bind", &LevelEditorModule::bind);
140}
141
142} // namespace eve::level_editor
LogicalId target
double value
HSQOBJECT cls
Definition ECS.cpp:21
std::uint32_t height
std::uint32_t width
#define Module_IMPL(ModuleName, newExpr)
Definition Module.h:26
std::unique_ptr< gpgpu::GpuBuffer > buffer
Definition OnnxGpgpu.cpp:26
std::function< eve::Result< void >()> release
Definition Procgen.cpp:86
std::string string
std::optional< InteractionSession > session
Definition Tactics.cpp:39
virtual void clearDirtyRegion()=0
Clears dirty region.
Hosts interchangeable editor tools and routes their lifecycle/input.
Unity GridBrushBase-inspired tile brush. Operates on TileBuffer; exposes preview + change list for UI...
Definition Brush.h:16
void setEraseTile(int gid)
Sets the erase tile.
Definition Brush.cpp:36
void clearStamp()
Clears stamp.
Definition Brush.cpp:59
int paintRect(TileBuffer *buffer, int x0, int y0, int x1, int y1, bool filled)
Paint rect.
Definition Brush.cpp:250
int getStampTile(int lx, int ly) const
Returns the stamp tile.
Definition Brush.cpp:52
int paintLine(TileBuffer *buffer, int x0, int y0, int x1, int y1)
Paint line.
Definition Brush.cpp:243
int getChangeY(int index) const
Returns the change y.
Definition Brush.cpp:320
int getChangeNewGid(int index) const
Returns the change new gid.
Definition Brush.cpp:328
int getTile() const
Returns the tile.
Definition Brush.h:39
std::string getTool() const
Returns the tool.
Definition Brush.h:24
int previewAt(TileBuffer *buffer, int tx, int ty)
Fill preview buffer without mutating target.
Definition Brush.cpp:257
void setSize(int size)
Sets the size.
Definition Brush.cpp:22
void setStampSize(int width, int height)
Sets the stamp size.
Definition Brush.cpp:38
int getSize() const
Returns the size.
Definition Brush.h:29
int getStampHeight() const
Returns the stamp height.
Definition Brush.h:51
int floodFill(TileBuffer *buffer, int tx, int ty)
Flood fill.
Definition Brush.cpp:207
void setStampTile(int lx, int ly, int gid)
Sets the stamp tile.
Definition Brush.cpp:45
void setShape(const std::string &shape)
Sets the shape.
Definition Brush.cpp:27
int getChangeX(int index) const
Returns the change x.
Definition Brush.cpp:316
int previewLine(TileBuffer *buffer, int x0, int y0, int x1, int y1)
Preview line.
Definition Brush.cpp:283
int getPreviewX(int index) const
Returns the preview x.
Definition Brush.cpp:304
int paintAt(TileBuffer *buffer, int tx, int ty)
Apply current tool at / between cells. Returns cells changed.
Definition Brush.cpp:192
int eraseAt(TileBuffer *buffer, int tx, int ty)
Erases at.
Definition Brush.cpp:201
void setTile(int gid)
Sets the tile.
Definition Brush.cpp:34
int getEraseTile() const
Returns the erase tile.
Definition Brush.h:44
int getPreviewCount() const
Returns the preview count.
Definition Brush.h:78
int getChangeOldGid(int index) const
Returns the change old gid.
Definition Brush.cpp:324
std::string getShape() const
Returns the shape.
Definition Brush.h:34
int previewRect(TileBuffer *buffer, int x0, int y0, int x1, int y1, bool filled)
Preview rect.
Definition Brush.cpp:290
int getPreviewGid(int index) const
Returns the preview gid.
Definition Brush.cpp:312
int getChangeCount() const
Returns the change count.
Definition Brush.h:87
void setTool(const std::string &tool)
Sets the tool.
Definition Brush.cpp:14
int getPreviewY(int index) const
Returns the preview y.
Definition Brush.cpp:308
int getStampWidth() const
Returns the stamp width.
Definition Brush.h:49
bool redo()
Compatibility-only boolean projection of redoAction().
int getUndoCount() const
Returns the undo count.
std::string getLastPayload() const
Returns the last payload.
std::string getLastActionKind() const
Returns the last action kind.
int getLastTileCount() const
Returns the last tile count.
int getLastTileY(int index) const
Returns the last tile y.
void beginGroup(const std::string &name)
Begins group.
void push(const std::string &name, const std::string &payload)
Pushes .
bool undo()
Compatibility-only boolean projection of undoAction().
bool applyLastToBuffer(TileBuffer *buffer)
Compatibility-only nullable pointer projection of applyLastToBufferChecked().
int getLastTileNewGid(int index) const
Returns the last tile new gid.
void recordTile(int x, int y, int oldGid, int newGid)
Record tile.
int getLastTileOldGid(int index) const
Returns the last tile old gid.
int getRedoCount() const
Returns the redo count.
int getLastTileX(int index) const
Returns the last tile x.
bool isGrouping() const
True when grouping.
std::string getLastActionName() const
Returns the last action name.
Non-owning IIntFieldTarget adapter for TileBuffer.
int readInt(int x, int y) const override
Reads int.
FieldWriteStatus writeInt(int x, int y, int value) override
Writes int.
int height() const override
Height.
int width() const override
Width.
Independent GID grid for map brushes (no hard dependency on map.TileLayer).
Definition TileBuffer.h:11
void setGid(int x, int y, int gid)
Sets the gid.
int getWidth() const
Returns the width.
Definition TileBuffer.h:17
void resize(int width, int height)
Resize.
bool containsCell(int x, int y) const
Return whether a cell belongs to this buffer.
int getHeight() const
Returns the height.
Definition TileBuffer.h:19
int getGid(int x, int y) const
Returns the gid.
Script composition adapter for tile-oriented level authoring.
std::unique_ptr< level_editing::TileBufferTarget > newTarget(std::string id, level_editing::TileBuffer *buffer) const
Create a non-owning editable target over a tile buffer.
std::unique_ptr< level_editing::EditorHistory > newHistory() const
Create a tile-aware undo history. @ownership Transfers unique ownership to the caller.
void bind(editor::EditorSession *session, level_editing::TileBufferTarget *target) const
Bind a borrowed tile target to a borrowed editor session.
std::unique_ptr< level_editing::Brush > newBrush() const
Create a tile brush. @ownership Transfers unique ownership to the caller.
std::unique_ptr< level_editing::TileBuffer > newTileBuffer(int width, int height) const
Create an independent GID grid. @ownership Transfers unique ownership to the caller.
std::unordered_map< std::string, SkillDefinition > & table()
Definition Skill.cpp:65