载入中...
搜索中...
未找到
Map.cpp
浏览该文件的文档.
1#include "map/Map.h"
2#include "map/DualGrid.h"
3#include "map/TileSystem.h"
4#include "map/TileConfig.h"
5#include "map/Pathfinder.h"
6#include "map/Path.h"
7#include "map/FlowField.h"
8#include "map/Fov.h"
9#include "graphics/Graphics.h"
11#include "common/Module.h"
12
13#include <simplesquirrel/simplesquirrel.hpp>
14
15namespace eve::map {
16
18
19TileLayer *Map::newLayer(int mapW, int mapH, float tileW, float tileH) {
20 return TileLayer::createLayer(mapW, mapH, tileW, tileH);
21}
22
24 if (!layer) return nullptr;
25 return new Pathfinder(layer);
26}
27
28Pathfinder *Map::newPathfinderSize(int mapW, int mapH) {
29 if (mapW <= 0 || mapH <= 0) return nullptr;
30 return new Pathfinder(mapW, mapH);
31}
32
34 if (!layer) return nullptr;
35 return new Fov(layer);
36}
37
38Fov *Map::newFovSize(int mapW, int mapH) {
39 if (mapW <= 0 || mapH <= 0) return nullptr;
40 return new Fov(mapW, mapH);
41}
42
43Fov *Map::newFovVolume(int mapW, int mapH, int depth) {
44 if (mapW <= 0 || mapH <= 0 || depth <= 0) return nullptr;
45 return new Fov(mapW, mapH, depth);
46}
47
48TileLayer *Map::newLayerFromFile(const std::string &path) {
49 std::vector<MapObject> objs;
50 auto layers = loadMapFile(path, &objs, nullptr);
51 setObjects(std::move(objs));
52 loadedLayers_ = layers;
53 return loadedLayers_.empty() ? nullptr : loadedLayers_.front();
54}
55
56int Map::loadFromFile(const std::string &path) {
57 std::vector<MapObject> objs;
58 auto layers = loadMapFile(path, &objs, nullptr);
59 setObjects(std::move(objs));
60 loadedLayers_ = std::move(layers);
61 return int(loadedLayers_.size());
62}
63
64void Map::update(float dt) {
65 (void)dt;
67}
68
70 if (!gfx) return;
71 std::vector<graphics::DrawItem2D> items;
74 graphics::RenderSystem::drawItems(*gfx, items, false);
75}
76
78
79int Map::getLayerCount() const {
80 if (ecs::current()->getManager<TileLayer>() == nullptr) return 0;
81 int n = 0;
82 auto view = ecs::View<TileLayer, TileLayer::Config>();
83 for (auto it = view.begin(); it != view.end(); ++it) ++n;
84 return n;
85}
86
87TileLayer *Map::getLayer(int index) const {
88 if (index < 0 || index >= int(loadedLayers_.size())) return nullptr;
89 return loadedLayers_[size_t(index)];
90}
91
92void Map::setObjects(std::vector<MapObject> objects) { objects_ = std::move(objects); }
93
94int Map::getObjectCount() const { return int(objects_.size()); }
95
96std::string Map::getObjectName(int i) const {
97 if (i < 0 || i >= int(objects_.size())) return {};
98 return objects_[size_t(i)].name;
99}
100
101std::string Map::getObjectType(int i) const {
102 if (i < 0 || i >= int(objects_.size())) return {};
103 return objects_[size_t(i)].type;
104}
105
106float Map::getObjectX(int i) const {
107 if (i < 0 || i >= int(objects_.size())) return 0.f;
108 return objects_[size_t(i)].x;
109}
110
111float Map::getObjectY(int i) const {
112 if (i < 0 || i >= int(objects_.size())) return 0.f;
113 return objects_[size_t(i)].y;
114}
115
116float Map::getObjectWidth(int i) const {
117 if (i < 0 || i >= int(objects_.size())) return 0.f;
118 return objects_[size_t(i)].width;
119}
120
121float Map::getObjectHeight(int i) const {
122 if (i < 0 || i >= int(objects_.size())) return 0.f;
123 return objects_[size_t(i)].height;
124}
125
126int Map::getObjectGid(int i) const {
127 if (i < 0 || i >= int(objects_.size())) return 0;
128 return int(objects_[size_t(i)].gid);
129}
130
132 DualGridOptions opts;
133 const bool ok = eve::map::resolveDualGrid(logic, display, opts, &dualGridError_);
134 return ok;
135}
136
137bool Map::resolveDualGridFilled(TileLayer *logic, TileLayer *display, int filledGid) {
138 DualGridOptions opts;
139 opts.filledGid = filledGid;
140 const bool ok = eve::map::resolveDualGrid(logic, display, opts, &dualGridError_);
141 return ok;
142}
143
144int Map::dualGridMaskAt(TileLayer *logic, int dx, int dy, int filledGid) {
145 if (!logic) return 0;
146 return eve::map::dualGridMaskAt(*logic, dx, dy, filledGid);
147}
148
149int Map::dualGridFrame(int mask) { return dualGridDefaultFrame(mask); }
150
152 if (!logic) return 0.f;
153 float ox = 0.f, oy = 0.f;
154 dualGridHalfOffset(*logic->config(), ox, oy);
155 return ox;
156}
157
159 if (!logic) return 0.f;
160 float ox = 0.f, oy = 0.f;
161 dualGridHalfOffset(*logic->config(), ox, oy);
162 return oy;
163}
164
165std::string Map::lastDualGridError() const { return dualGridError_; }
166
167void Map::expose(ssq::Table &table) {
168 auto cls = table.addClass(name, Map::create, false);
169 expose(cls);
170
171 auto layer = table.addClass<TileLayer>(
172 "TileLayer", std::function<TileLayer *()>([]() -> TileLayer * { return nullptr; }), true);
173 layer.addFunc("setOrigin", &TileLayer::setOrigin);
174 layer.addFunc("getX", &TileLayer::getX);
175 layer.addFunc("getY", &TileLayer::getY);
176 layer.addFunc("getMapWidth", &TileLayer::getMapWidth);
177 layer.addFunc("getMapHeight", &TileLayer::getMapHeight);
178 layer.addFunc("getTileWidth", &TileLayer::getTileWidth);
179 layer.addFunc("getTileHeight", &TileLayer::getTileHeight);
180 layer.addFunc("setTileSize", &TileLayer::setTileSize);
181 layer.addFunc("resize", &TileLayer::resize);
182 layer.addFunc("setTile", &TileLayer::setTile);
183 layer.addFunc("getTile", &TileLayer::getTile);
184 layer.addFunc("fill", &TileLayer::fill);
185 layer.addFunc("clear", &TileLayer::clear);
186 layer.addFunc("setTileset", &TileLayer::setTileset);
187 layer.addFunc("setTilesetTileSize", &TileLayer::setTilesetTileSize);
188 layer.addFunc("getTilesetTexture", &TileLayer::getTilesetTexture);
189 layer.addFunc("getTilesetFirstGid", &TileLayer::getTilesetFirstGid);
190 layer.addFunc("getTilesetColumns", &TileLayer::getTilesetColumns);
191 layer.addFunc("setCanvas", &TileLayer::setCanvas);
192 layer.addFunc("setCamera", &TileLayer::setCamera);
193 layer.addFunc("setLayer", &TileLayer::setLayer);
194 layer.addFunc("getLayer", &TileLayer::getLayer);
195 layer.addFunc("setVisible", &TileLayer::setVisible);
196 layer.addFunc("isVisible", &TileLayer::isVisible);
197 layer.addFunc("setTint", &TileLayer::setTint);
198 layer.addFunc("applyConfig", &TileLayer::applyConfig);
199 layer.addFunc("loadConfig", &TileLayer::loadConfig);
200 layer.addFunc("reloadConfig", &TileLayer::reloadConfig);
201 layer.addFunc("setAutoReload", &TileLayer::setAutoReload);
202 layer.addFunc("getAutoReload", &TileLayer::getAutoReload);
203 layer.addFunc("getConfigPath", &TileLayer::getConfigPath);
204 layer.addFunc("tileToWorldX", &TileLayer::tileToWorldX);
205 layer.addFunc("tileToWorldY", &TileLayer::tileToWorldY);
206 layer.addFunc("depthYAt", &TileLayer::depthYAt);
207 layer.addFunc("worldToTileX", &TileLayer::worldToTileX);
208 layer.addFunc("worldToTileY", &TileLayer::worldToTileY);
209
210 auto path = table.addClass<Path>(
211 "Path", std::function<Path *()>([]() -> Path * { return nullptr; }), true);
212 path.addFunc("getLength", &Path::getLength);
213 path.addFunc("getX", &Path::getX);
214 path.addFunc("getY", &Path::getY);
215 path.addFunc("getTotalCost", &Path::getTotalCost);
216
217 auto field = table.addClass<FlowField>(
218 "FlowField", std::function<FlowField *()>([]() -> FlowField * { return nullptr; }), true);
219 field.addFunc("getWidth", &FlowField::getWidth);
220 field.addFunc("getHeight", &FlowField::getHeight);
221 field.addFunc("getGoalX", &FlowField::getGoalX);
222 field.addFunc("getGoalY", &FlowField::getGoalY);
223 field.addFunc("costAt", &FlowField::costAt);
224 field.addFunc("nextX", &FlowField::nextX);
225 field.addFunc("nextY", &FlowField::nextY);
226 field.addFunc("isReachable", &FlowField::isReachable);
227
228 auto pf = table.addClass<Pathfinder>(
229 "Pathfinder", std::function<Pathfinder *()>([]() -> Pathfinder * { return nullptr; }), true);
230 pf.addFunc("setTopology", &Pathfinder::setTopology);
231 pf.addFunc("getTopology", &Pathfinder::getTopology);
232 pf.addFunc("setDiagonal", &Pathfinder::setDiagonal);
233 pf.addFunc("getDiagonal", &Pathfinder::getDiagonal);
234 pf.addFunc("blockGid", &Pathfinder::blockGid);
235 pf.addFunc("unblockGid", &Pathfinder::unblockGid);
236 pf.addFunc("clearBlockedGids", &Pathfinder::clearBlockedGids);
237 pf.addFunc("setBlockEmpty", &Pathfinder::setBlockEmpty);
238 pf.addFunc("getBlockEmpty", &Pathfinder::getBlockEmpty);
239 pf.addFunc("setBlocked", &Pathfinder::setBlocked);
240 pf.addFunc("isWalkable", &Pathfinder::isWalkable);
241 pf.addFunc("setCellCost", &Pathfinder::setCellCost);
242 pf.addFunc("getCellCost", &Pathfinder::getCellCost);
243 pf.addFunc("syncFromLayer", &Pathfinder::syncFromLayer);
244 pf.addFunc("findPath", &Pathfinder::findPath);
245 pf.addFunc("buildFlowField", &Pathfinder::buildFlowField);
246 pf.addFunc("followFlow", &Pathfinder::followFlow);
247 pf.addFunc("findGroupPath", &Pathfinder::findGroupPath);
248 pf.addFunc("invalidateCache", &Pathfinder::invalidateCache);
249
250 auto fov = table.addClass<Fov>("Fov", std::function<Fov *()>([]() -> Fov * { return nullptr; }),
251 true);
252 fov.addFunc("getWidth", &Fov::getWidth);
253 fov.addFunc("getHeight", &Fov::getHeight);
254 fov.addFunc("getDepth", &Fov::getDepth);
255 fov.addFunc("setMode", &Fov::setMode);
256 fov.addFunc("getMode", &Fov::getMode);
257 fov.addFunc("setAlgorithm", &Fov::setAlgorithm);
258 fov.addFunc("getAlgorithm", &Fov::getAlgorithm);
259 fov.addFunc("setRadiusMetric", &Fov::setRadiusMetric);
260 fov.addFunc("getRadiusMetric", &Fov::getRadiusMetric);
261 fov.addFunc("setTopology", &Fov::setTopology);
262 fov.addFunc("getTopology", &Fov::getTopology);
263 fov.addFunc("setCornerPeek", &Fov::setCornerPeek);
264 fov.addFunc("getCornerPeek", &Fov::getCornerPeek);
265 fov.addFunc("blockOpaqueGid", &Fov::blockOpaqueGid);
266 fov.addFunc("unblockOpaqueGid", &Fov::unblockOpaqueGid);
267 fov.addFunc("clearOpaqueGids", &Fov::clearOpaqueGids);
268 fov.addFunc("setBlockEmpty", &Fov::setBlockEmpty);
269 fov.addFunc("getBlockEmpty", &Fov::getBlockEmpty);
270 fov.addFunc("setOpaque", &Fov::setOpaque);
271 fov.addFunc("isOpaque", &Fov::isOpaque);
272 fov.addFunc("setOpaque3", &Fov::setOpaque3);
273 fov.addFunc("isOpaque3", &Fov::isOpaque3);
274 fov.addFunc("syncFromLayer", &Fov::syncFromLayer);
275 fov.addFunc("setElevation", &Fov::setElevation);
276 fov.addFunc("getElevation", &Fov::getElevation);
277 fov.addFunc("setCliffBlock", &Fov::setCliffBlock);
278 fov.addFunc("getCliffBlock", &Fov::getCliffBlock);
279 fov.addFunc("setEyeOffset", &Fov::setEyeOffset);
280 fov.addFunc("getEyeOffset", &Fov::getEyeOffset);
281 fov.addFunc("setVerticalRange", &Fov::setVerticalRange);
282 fov.addFunc("getVerticalRange", &Fov::getVerticalRange);
283 fov.addFunc("addRevealer", &Fov::addRevealer);
284 fov.addFunc("addRevealer3", &Fov::addRevealer3);
285 fov.addFunc("removeRevealer", &Fov::removeRevealer);
286 fov.addFunc("clearRevealers", &Fov::clearRevealers);
287 fov.addFunc("setRevealerPosition", &Fov::setRevealerPosition);
288 fov.addFunc("setRevealerPosition3", &Fov::setRevealerPosition3);
289 fov.addFunc("setRevealerRadius", &Fov::setRevealerRadius);
290 fov.addFunc("setRevealerFacing", &Fov::setRevealerFacing);
291 fov.addFunc("clearRevealerFacing", &Fov::clearRevealerFacing);
292 fov.addFunc("setRevealerEnabled", &Fov::setRevealerEnabled);
293 fov.addFunc("getRevealerCount", &Fov::getRevealerCount);
294 fov.addFunc("setRevealerPerception", &Fov::setRevealerPerception);
295 fov.addFunc("getRevealerPerception", &Fov::getRevealerPerception);
296 fov.addFunc("setPerceptionRadiusScale", &Fov::setPerceptionRadiusScale);
297 fov.addFunc("getPerceptionRadiusScale", &Fov::getPerceptionRadiusScale);
298 fov.addFunc("setDetectionMargin", &Fov::setDetectionMargin);
299 fov.addFunc("getDetectionMargin", &Fov::getDetectionMargin);
300 fov.addFunc("getEffectiveRadius", &Fov::getEffectiveRadius);
301 fov.addFunc("canDetect", &Fov::canDetect);
302 fov.addFunc("canDetect3", &Fov::canDetect3);
303 fov.addFunc("markDirty", &Fov::markDirty);
304 fov.addFunc("isDirty", &Fov::isDirty);
305 fov.addFunc("compute", &Fov::compute);
306 fov.addFunc("isVisible", &Fov::isVisible);
307 fov.addFunc("isExplored", &Fov::isExplored);
308 fov.addFunc("isVisible3", &Fov::isVisible3);
309 fov.addFunc("isExplored3", &Fov::isExplored3);
310 fov.addFunc("getState", &Fov::getState);
311 fov.addFunc("getState3", &Fov::getState3);
312 fov.addFunc("clearMemory", &Fov::clearMemory);
313 fov.addFunc("resetVisibleOnly", &Fov::resetVisibleOnly);
314 fov.addFunc("getMaskValue", &Fov::getMaskValue);
315 fov.addFunc("getMaskByte", &Fov::getMaskByte);
316 fov.addFunc("getMaskValue3", &Fov::getMaskValue3);
317 fov.addFunc("getMaskByte3", &Fov::getMaskByte3);
318 fov.addFunc("buildMaskTexture", &Fov::buildMaskTexture);
319 fov.addFunc("buildMaskTextureSlice", &Fov::buildMaskTextureSlice);
320}
321
322void Map::expose(ssq::Class &cls) {
323 cls.addFunc("getName", &Map::getName);
324 cls.addFunc("newLayer", &Map::newLayer);
325 cls.addFunc("newLayerFromFile", &Map::newLayerFromFile);
326 cls.addFunc("loadFromFile", &Map::loadFromFile);
327 cls.addFunc("newPathfinder", &Map::newPathfinder);
328 cls.addFunc("newPathfinderSize", &Map::newPathfinderSize);
329 cls.addFunc("newFov", &Map::newFov);
330 cls.addFunc("newFovSize", &Map::newFovSize);
331 cls.addFunc("newFovVolume", &Map::newFovVolume);
332 cls.addFunc("update", &Map::update);
333 cls.addFunc("render", &Map::render);
334 cls.addFunc("pollConfigs", &Map::pollConfigs);
335 cls.addFunc("getLayerCount", &Map::getLayerCount);
336 cls.addFunc("getLayer", &Map::getLayer);
337 cls.addFunc("getObjectCount", &Map::getObjectCount);
338 cls.addFunc("getObjectName", &Map::getObjectName);
339 cls.addFunc("getObjectType", &Map::getObjectType);
340 cls.addFunc("getObjectX", &Map::getObjectX);
341 cls.addFunc("getObjectY", &Map::getObjectY);
342 cls.addFunc("getObjectWidth", &Map::getObjectWidth);
343 cls.addFunc("getObjectHeight", &Map::getObjectHeight);
344 cls.addFunc("getObjectGid", &Map::getObjectGid);
345 cls.addFunc("resolveDualGrid", &Map::resolveDualGrid);
346 cls.addFunc("resolveDualGridFilled", &Map::resolveDualGridFilled);
347 cls.addFunc("dualGridMaskAt", &Map::dualGridMaskAt);
348 cls.addFunc("dualGridFrame", &Map::dualGridFrame);
349 cls.addFunc("dualGridOffsetX", &Map::dualGridOffsetX);
350 cls.addFunc("dualGridOffsetY", &Map::dualGridOffsetY);
351 cls.addFunc("lastDualGridError", &Map::lastDualGridError);
352}
353
354} // namespace eve::map
HSQOBJECT cls
Definition ECS.cpp:21
glm::vec3 n
Definition Grass.cpp:64
float depth
#define Module_IMPL(ModuleName, newExpr)
Definition Module.h:24
TileLayer * layer
glm::mat4 view
const char * name
Definition RockMesh.cpp:21
int tileW
int tileH
virtual std::string getName() const =0
static void collectSprites(std::vector< DrawItem2D > &out)
Append visible Renderable2D sprites into a shared queue.
static void drawItems(Graphics &gfx, std::vector< DrawItem2D > &items, bool present)
Sort and draw items. If present=true, calls gfx.present() at the end. Map::render uses present=false ...
bool isReachable(int x, int y) const
int getGoalX() const
Definition FlowField.h:22
float costAt(int x, int y) const
int getWidth() const
Definition FlowField.h:19
int getGoalY() const
Definition FlowField.h:23
int nextY(int x, int y) const
int nextX(int x, int y) const
int getHeight() const
Definition FlowField.h:20
Dynamic field-of-view / fog-of-war facade. Phase A: 2D shadowcast + multi-revealer + explored memory....
Definition Fov.h:24
void blockOpaqueGid(int gid)
Definition Fov.cpp:981
bool canDetect(int revealerId, int x, int y, float targetStealth) const
Definition Fov.cpp:1159
float getElevation(int x, int y) const
Definition Fov.cpp:1041
bool isExplored(int x, int y) const
Definition Fov.cpp:1184
bool isOpaque(int x, int y) const
Definition Fov.cpp:1020
int getVerticalRange() const
Definition Fov.cpp:1059
int getHeight() const
Definition Fov.cpp:930
std::string getRadiusMetric() const
Definition Fov.cpp:956
void setAlgorithm(const std::string &name)
"shadowcast" | "raycast" | "permissive" | "rectangle"
Definition Fov.cpp:944
float getDetectionMargin() const
Definition Fov.cpp:1152
float getEyeOffset() const
Definition Fov.cpp:1053
void setRadiusMetric(const std::string &name)
"euclidean" | "chebyshev" | "manhattan" — ignored when topology is hex (cube distance).
Definition Fov.cpp:951
float getCliffBlock() const
Definition Fov.cpp:1047
void setRevealerEnabled(int id, bool enabled)
Definition Fov.cpp:1124
void setOpaque3(int x, int y, int z, bool opaque)
Definition Fov.cpp:1025
bool isVisible3(int x, int y, int z) const
Definition Fov.cpp:1191
void setDetectionMargin(float margin)
Definition Fov.cpp:1151
void setEyeOffset(float offset)
Definition Fov.cpp:1049
bool isVisible(int x, int y) const
Definition Fov.cpp:1178
int getEffectiveRadius(int id) const
Definition Fov.cpp:1154
int getWidth() const
Definition Fov.cpp:929
void setRevealerPosition(int id, int x, int y)
Definition Fov.cpp:1087
float getRevealerPerception(int id) const
Definition Fov.cpp:1140
float getMaskValue3(int x, int y, int z) const
Definition Fov.cpp:1246
int getDepth() const
Definition Fov.cpp:931
void setBlockEmpty(bool enable)
Definition Fov.cpp:1001
std::string getMode() const
Definition Fov.cpp:942
int addRevealer(int x, int y, int radius)
Definition Fov.cpp:1061
void clearMemory()
Definition Fov.cpp:1227
std::string getState3(int x, int y, int z) const
Definition Fov.cpp:1215
float getMaskValue(int x, int y) const
Definition Fov.cpp:1234
void clearOpaqueGids()
Definition Fov.cpp:995
bool isExplored3(int x, int y, int z) const
Definition Fov.cpp:1196
int getRevealerCount() const
Definition Fov.cpp:1131
graphics::Texture * buildMaskTextureSlice(graphics::Graphics *gfx, int sliceZ) const
Definition Fov.cpp:1284
void setCliffBlock(float delta)
Definition Fov.cpp:1043
void setElevation(int x, int y, float elev)
Definition Fov.cpp:1035
std::string getTopology() const
Definition Fov.cpp:973
int addRevealer3(int x, int y, int z, int radius)
Definition Fov.cpp:1063
std::string getAlgorithm() const
Definition Fov.cpp:949
void setRevealerRadius(int id, int radius)
Definition Fov.cpp:1100
void setRevealerPosition3(int id, int x, int y, int z)
Definition Fov.cpp:1091
void setRevealerPerception(int id, float perception)
Soft RPG hooks (no hard dependency on rpg module). effectiveRadius = radius + floor(perception * perc...
Definition Fov.cpp:1133
void setRevealerFacing(int id, float facingDeg, float halfAngleDeg)
Definition Fov.cpp:1107
void removeRevealer(int id)
Definition Fov.cpp:1075
bool getCornerPeek() const
Definition Fov.cpp:979
void clearRevealers()
Definition Fov.cpp:1082
void clearRevealerFacing(int id)
Definition Fov.cpp:1116
bool isDirty() const
Definition Fov.cpp:1175
void compute()
Definition Fov.cpp:1176
void setPerceptionRadiusScale(float scale)
Definition Fov.cpp:1145
void setMode(const std::string &name)
"grid2d" (default) | "heightmap" | "volume"
Definition Fov.cpp:933
void unblockOpaqueGid(int gid)
Definition Fov.cpp:988
void markDirty()
Definition Fov.cpp:1174
int getMaskByte(int x, int y) const
Definition Fov.cpp:1240
void setVerticalRange(int range)
Definition Fov.cpp:1055
bool canDetect3(int revealerId, int x, int y, int z, float targetStealth) const
Definition Fov.cpp:1167
float getPerceptionRadiusScale() const
Definition Fov.cpp:1149
bool isOpaque3(int x, int y, int z) const
Definition Fov.cpp:1031
bool getBlockEmpty() const
Definition Fov.cpp:1007
std::string getState(int x, int y) const
Definition Fov.cpp:1202
void setCornerPeek(bool enable)
Definition Fov.cpp:975
void setOpaque(int x, int y, bool opaque)
Definition Fov.cpp:1009
graphics::Texture * buildMaskTexture(graphics::Graphics *gfx) const
Upload current 2D / slice mask as RGBA8 Texture (R=G=B=A=mask byte). Caller owns the returned Texture...
Definition Fov.cpp:1280
void resetVisibleOnly()
Definition Fov.cpp:1229
void setTopology(const std::string &name)
"ortho" (default) | "hex" | "auto" (hex if bound layer is hex/staggered).
Definition Fov.cpp:958
void syncFromLayer()
Definition Fov.cpp:1033
int getMaskByte3(int x, int y, int z) const
Definition Fov.cpp:1251
Map module — factory + script binding for 2D tilemaps. Per-frame: TileConfigSystem (hot reload) → uni...
Definition Map.h:24
std::string getObjectName(int i) const
Definition Map.cpp:96
float getObjectHeight(int i) const
Definition Map.cpp:121
TileLayer * newLayerFromFile(const std::string &path)
Load map JSON (Tiled-compatible subset or EVEngine simplified format). Creates one TileLayer per tile...
Definition Map.cpp:48
void setObjects(std::vector< MapObject > objects)
Replace object cache (used by load / hot reload).
Definition Map.cpp:92
void update(float dt)
Definition Map.cpp:64
int loadFromFile(const std::string &path)
Same as newLayerFromFile but returns how many layers were created (0 on failure).
Definition Map.cpp:56
Pathfinder * newPathfinderSize(int mapW, int mapH)
Custom grid pathfinder (no layer); fill with setBlocked / setCellCost.
Definition Map.cpp:28
TileLayer * getLayer(int index) const
Layer created by the most recent loadFromFile/newLayerFromFile call.
Definition Map.cpp:87
std::string getObjectType(int i) const
Definition Map.cpp:101
float dualGridOffsetX(TileLayer *logic)
Projection-correct half-step origin delta for a logic layer.
Definition Map.cpp:151
float dualGridOffsetY(TileLayer *logic)
Definition Map.cpp:158
bool resolveDualGridFilled(TileLayer *logic, TileLayer *display, int filledGid)
Definition Map.cpp:137
bool resolveDualGrid(TileLayer *logic, TileLayer *display)
Dual-grid resolve: paint logic (filled/empty), fill display with 15-tile autotiles on a half-offset g...
Definition Map.cpp:131
int getObjectGid(int i) const
Definition Map.cpp:126
Pathfinder * newPathfinder(TileLayer *layer)
Pathfinder bound to a TileLayer (syncs walkability from GIDs).
Definition Map.cpp:23
int getLayerCount() const
Definition Map.cpp:79
float getObjectWidth(int i) const
Definition Map.cpp:116
Fov * newFovVolume(int mapW, int mapH, int depth)
Volume FOV (W×H×D voxels); mode defaults to volume.
Definition Map.cpp:43
float getObjectX(int i) const
Definition Map.cpp:106
int dualGridFrame(int mask)
Default atlas frame for mask (-1 = empty).
Definition Map.cpp:149
TileLayer * newLayer(int mapW, int mapH, float tileW=32.f, float tileH=32.f)
Definition Map.cpp:19
Fov * newFovSize(int mapW, int mapH)
Custom grid FOV (no layer); fill with setOpaque.
Definition Map.cpp:38
int getObjectCount() const
Definition Map.cpp:94
float getObjectY(int i) const
Definition Map.cpp:111
void render(graphics::Graphics *gfx)
Definition Map.cpp:69
std::string lastDualGridError() const
Definition Map.cpp:165
int dualGridMaskAt(TileLayer *logic, int dx, int dy, int filledGid)
4-bit corner mask at display cell (dx,dy); see DualGrid.h.
Definition Map.cpp:144
Fov * newFov(TileLayer *layer)
FOV bound to a TileLayer (syncs opacity from opaque GIDs).
Definition Map.cpp:33
int pollConfigs()
Definition Map.cpp:77
float getTotalCost() const
Total path cost (A* heuristic + movement cost).
int getY(int index) const
int getLength() const
Number of waypoints (0 = empty/unreachable).
int getX(int index) const
Waypoint tile coordinates.
Pathfinding facade. Single-agent: A*. Group (same goal): Flow Field + follow. Grid/topology internals...
Definition Pathfinder.h:17
std::string getTopology() const
void invalidateCache()
Invalidate cached flow field (also called when grid dirties).
void setBlockEmpty(bool enable)
float getCellCost(int x, int y) const
Path * followFlow(FlowField *field, int sx, int sy)
FlowField * buildFlowField(int gx, int gy)
Build / reuse cached flow field toward goal. Owned by caller.
void setCellCost(int x, int y, float cost)
void setTopology(const std::string &name)
bool getBlockEmpty() const
bool isWalkable(int x, int y) const
bool getDiagonal() const
Path * findPath(int sx, int sy, int gx, int gy)
A* from (sx,sy) to (gx,gy). Returns owned Path* (may be empty if unreachable). Never returns nullptr ...
void blockGid(int gid)
void setBlocked(int x, int y, bool blocked)
Path * findGroupPath(int sx, int sy, int gx, int gy)
Group helper: ensure field for goal, then follow from start. Equivalent to buildFlowField + followFlo...
void unblockGid(int gid)
void setDiagonal(bool enable)
ECS tile layer entity. Script mutates tile GIDs / tileset / draw; TileRenderSystem batch-draws atlas ...
Definition TileLayer.h:30
std::string getConfigPath()
Path of the bound config file.
void clear()
Clears the layer to empty.
Definition TileLayer.cpp:69
float getTileWidth()
Tile size in pixels.
Definition TileLayer.cpp:35
graphics::Texture * getTilesetTexture()
Bound tileset accessors.
Definition TileLayer.cpp:92
void setOrigin(float x, float y)
World origin of the layer (pixels).
Definition TileLayer.cpp:25
bool loadConfig(const std::string &path)
Loads a config file and binds it for hot reload.
int worldToTileX(float wx, float wy)
void setTile(int tx, int ty, int gid)
Tile GID access; 0 = empty.
Definition TileLayer.cpp:52
void setAutoReload(bool enable)
Enables/disables automatic config hot reload.
void setTileset(graphics::Texture *texture, int firstGid, int columns, int margin=0, int spacing=0)
Binds the atlas texture and tile table.
Definition TileLayer.cpp:71
void resize(int mapW, int mapH)
Resizes the tile grid (existing GIDs preserved where possible).
Definition TileLayer.cpp:44
bool applyConfig(const std::string &json)
Applies a map JSON config (Config + Tiles + Tileset + Draw).
void setTilesetTileSize(int tileW, int tileH)
Tile size in pixels of the bound tileset.
Definition TileLayer.cpp:86
void setLayer(int layer)
Draw order layer / visibility / tint.
Definition TileLayer.cpp:99
int worldToTileY(float wx, float wy)
void setCamera(graphics::Camera2D *camera)
Definition TileLayer.cpp:97
int getTile(int tx, int ty)
Definition TileLayer.cpp:58
bool reloadConfig()
Re-reads the bound config file (hot reload).
static TileLayer * createLayer(int mapW, int mapH, float tileW=32.f, float tileH=32.f)
Definition TileLayer.cpp:12
float tileToWorldX(int tx, int ty)
Scalar conversion helpers.
float depthYAt(int tx, int ty)
void setTileSize(float tileW, float tileH)
Definition TileLayer.cpp:38
void setCanvas(graphics::Canvas *canvas)
Draw target canvas / camera.
Definition TileLayer.cpp:96
void setVisible(bool visible)
float tileToWorldY(int tx, int ty)
void fill(int gid)
Fills the whole layer with one GID.
Definition TileLayer.cpp:64
int getMapWidth()
Map dimensions in tiles.
Definition TileLayer.cpp:33
void setTint(float r, float g, float b, float a=1.f)
static void collect(std::vector< graphics::DrawItem2D > &out)
Append non-empty visible tiles into a shared 2D draw queue.
放置世界:格子占用(多通道)+ 地形语义 + 已放置建筑实例。 行为由 PlacementSystem 提供;本类暴露便于脚本绑定的薄封装方法。 坐标换算统一走 eve::grid(支持 rectang...
int dualGridMaskAt(TileLayer &logic, int dx, int dy, int filledGid)
4-bit corner mask for display cell (dx,dy) on a (logicW+1)×(logicH+1) grid. Samples logic (dx-1,...
Definition DualGrid.cpp:72
int dualGridDefaultFrame(int mask)
Default 4x4 atlas frame index for mask 0..15. -1 means draw nothing. Matches the SpriteCook / common ...
Definition DualGrid.cpp:33
std::vector< TileLayer * > loadMapFile(const std::string &path, std::vector< MapObject > *objects, std::string *error)
void dualGridHalfOffset(const TileLayer::Config &cfg, float &offX, float &offY)
Half-step origin delta for the display layer (added to logic origin). Orthogonal: (-tileW/2,...
Definition DualGrid.cpp:38
bool resolveDualGrid(TileLayer *logic, TileLayer *display, const DualGridOptions &opts, std::string *error)
Resolve logic → display dual-grid tiles. Resizes display to (logicW+1)×(logicH+1),...
Definition DualGrid.cpp:80
Dual-grid autotile (Oskar Stålberg style).
Definition DualGrid.h:28
int filledGid
0 = any non-zero logic GID counts as filled; else only this GID.
Definition DualGrid.h:30