载入中...
搜索中...
未找到
DualGrid.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
5#include "common/Result.h"
6#include "map/TileLayer.h"
7
8#include <array>
9#include <cstdint>
10#include <string>
11#include <vector>
12
13namespace eve::map {
14
34 int filledGid = 0;
41 bool applyHalfOffset = true;
43 bool hideLogic = true;
49};
50
53 int width = 128;
54 int height = 64;
55 float edgeWidth = 0.08f;
56 float noiseScale = 5.f;
57 float noiseStrength = 0.08f;
58 uint32_t seed = 0;
59};
60
73 int width = 0;
74 int height = 0;
75 std::vector<float> coverage;
76 std::vector<float> signedDistance;
77
79 [[nodiscard]] float coverageAt(int mask, int x, int y) const;
81 [[nodiscard]] float signedDistanceAt(int mask, int x, int y) const;
83 [[nodiscard]] float bandAt(int mask, int x, int y, float center, float halfWidth, float softness = 0.01f) const;
84};
85
88 int width = 0;
89 int height = 0;
90 std::vector<uint8_t> pixels;
91};
92
104 const DualGridMaskConfig &config);
105
125 const DualGridRgbaImage &terrainA, const DualGridRgbaImage &terrainB, const DualGridMaskConfig &config);
126
128inline int dualGridMaskFromCorners(bool tl, bool tr, bool bl, bool br) {
129 return (tl ? 1 : 0) | (tr ? 2 : 0) | (bl ? 4 : 0) | (br ? 8 : 0);
130}
131
137
139EVENGINE_API_WORLD const std::array<int, 16> &dualGridDefaultFrameTable();
140
148EVENGINE_API_WORLD void dualGridHalfOffset(const TileLayer::Config &cfg, float &offX, float &offY);
149
151bool dualGridLogicFilled(TileLayer &logic, int tx, int ty, int filledGid);
152
158EVENGINE_API_WORLD int dualGridMaskAt(TileLayer &logic, int dx, int dy, int filledGid = 0);
159
167EVENGINE_API_WORLD bool resolveDualGrid(TileLayer *logic, TileLayer *display, const DualGridOptions &opts,
168 std::string *error = nullptr);
169
171EVENGINE_API_WORLD bool resolveDualGrid(TileLayer *logic, TileLayer *display, std::string *error = nullptr);
172
173} // namespace eve::map
float y
Definition AnimClip.cpp:738
float x
Definition AnimClip.cpp:738
int mask
#define EVENGINE_API_WORLD
Definition Export.h:109
std::uint32_t height
std::uint32_t width
float tr
std::string error
Definition Package.cpp:60
float halfWidth
Move-only, checked operation results for the common layer.
float dy
float dx
Move-only operation result carrying either a value or Status.
Definition Result.h:155
放置世界:格子占用(多通道)+ 地形语义 + 已放置建筑实例。 行为由 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:236
bool dualGridLogicFilled(TileLayer &logic, int tx, int ty, int filledGid)
Whether logic cell (tx,ty) is filled under options. Out of bounds → false.
Definition DualGrid.cpp:227
int dualGridMaskFromCorners(bool tl, bool tr, bool bl, bool br)
Pack four corner occupancy bits: TL=1, TR=2, BL=4, BR=8.
Definition DualGrid.h:128
eve::Result< DualGridRgbaImage > bakeDualGridTransitionAtlas(const DualGridRgbaImage &terrainA, const DualGridRgbaImage &terrainB, const DualGridMaskConfig &config)
Bake two ordinary same-size RGBA8 tiles into a row-major 4x4 transition atlas.
Definition DualGrid.cpp:160
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:202
const std::array< int, 16 > & dualGridDefaultFrameTable()
Copy of the default frame table (16 entries).
Definition DualGrid.cpp:195
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:244
int dualGridDefaultFrame(int mask)
Default 4x4 atlas frame index for mask 0..15. -1 means draw nothing. Matches the SpriteCook / common ...
Definition DualGrid.cpp:197
eve::Result< DualGridMaskAtlas > generateDualGridMaskAtlas(const DualGridMaskConfig &config)
Generate the complete reusable 16-frame dual-grid mask atlas.
Definition DualGrid.cpp:100
Owning CPU result containing all 16 dual-grid masks and their signed-distance fields.
Definition DualGrid.h:72
std::vector< float > coverage
Definition DualGrid.h:75
std::vector< float > signedDistance
Definition DualGrid.h:76
Deterministic settings for the reusable 16-frame procedural transition-mask atlas.
Definition DualGrid.h:52
Dual-grid autotile (Oskar Stålberg style).
Definition DualGrid.h:32
bool hideLogic
Hide the logic layer after resolve (logic stays for gameplay queries).
Definition DualGrid.h:43
int filledGid
0 = any non-zero logic GID counts as filled; else only this GID.
Definition DualGrid.h:34
bool applyHalfOffset
Apply projection-correct half-step origin offset on the display layer.
Definition DualGrid.h:41
int firstDisplayGid
GID of atlas local id 0 on the display tileset. 0 = use display->getTilesetFirstGid() (fallback 1).
Definition DualGrid.h:39
bool useDefaultFrameTable
When true, use the default SpriteCook-style 4x4 atlas frame table. When false, GID = firstDisplayGid ...
Definition DualGrid.h:48
Owning RGBA8 image used by the renderer-neutral transition-atlas baker.
Definition DualGrid.h:87
std::vector< uint8_t > pixels
Definition DualGrid.h:90