载入中...
搜索中...
未找到
Procgen.h
浏览该文件的文档.
1#pragma once
2
3#include "common/Module.h"
4#include "procgen/Grid2D.h"
5#include "procgen/MeshBuild.h"
7#include "procgen/Palette.h"
8#include "procgen/Params.h"
13
14#include <string>
15#include <vector>
16
17namespace eve::graphics {
18class Graphics;
19class Texture;
20class Mesh;
21} // namespace eve::graphics
22
23namespace eve::image {
24class ImageData;
25} // namespace eve::image
26
27namespace eve::procgen {
28class PbrTextureSet;
29
37class Procgen : public Module {
38public:
40 Procgen();
41 ~Procgen() override = default;
42
45 Grid2D *newGrid(int width, int height);
46
47 // --- Phase A: maps ---
48 Grid2D *generate(const std::string &algorithmId, Params *params);
49 bool generateTo(const std::string &algorithmId, Params *params, OutputSpec *output);
50 bool applyToLayer(Grid2D *grid, const std::string &palette, map::TileLayer *layer);
51
52 void setPaletteGid(const std::string &palette, const std::string &semantic, int gid);
53 int getPaletteGid(const std::string &palette, const std::string &semantic) const;
54
55 int getAlgorithmCount() const;
56 std::string getAlgorithmId(int index) const;
57 bool hasAlgorithm(const std::string &algorithmId) const;
58
63 bool autotileGrid(Grid2D *grid);
64
66 uint32_t randomSeed();
67
68 std::string lastError() const;
69 std::string gridToJson(Grid2D *grid) const;
70
71 // --- Phase B: textures ---
73 image::ImageData *generateImage(const std::string &recipeId, Params *params);
75 image::ImageData *generateNormalImage(const std::string &recipeId, Params *params);
80 graphics::Texture *generateTexture(const std::string &recipeId, Params *params,
82
83 int getTextureRecipeCount() const;
84 std::string getTextureRecipeId(int index) const;
85 bool hasTextureRecipe(const std::string &recipeId) const;
86
87 // --- Phase E: dynamic clouds + cloud shadows ---
93 float cloudCoverageAt(CloudField *field, float x, float z, float time);
95 float cloudShadowFactor(CloudShadow *shadow, float x, float z, float time);
97 void sampleCloud(CloudField *field, float *out, int w, int h, float time, float x0, float z0,
98 float extent);
99 void sampleCloudShadow(CloudShadow *shadow, float *out, int w, int h, float time, float x0,
100 float z0, float extent);
107 PbrTextureSet *generatePbrMaterial(const std::string &recipeId, Params *params);
108
109 int getPbrRecipeCount() const;
110 std::string getPbrRecipeId(int index) const;
111 bool hasPbrRecipe(const std::string &recipeId) const;
112
113 // --- Mesh recipes (Marching Cubes, …) ---
115 MeshBuild *buildMesh(const std::string &recipeId, Params *params);
117 graphics::Mesh *generateMesh(const std::string &recipeId, Params *params,
118 graphics::Graphics *gfx);
119
120 int getMeshRecipeCount() const;
121 std::string getMeshRecipeId(int index) const;
122 bool hasMeshRecipe(const std::string &recipeId) const;
123
124 // --- Phase D: terrain height sampling ---
132 bool heightmapToGrid(Heightmap *heightmap, Params *params, Grid2D *out);
133
134 PaletteTable &palettes() { return palettes_; }
135
136private:
137 bool runGenerate(const std::string &algorithmId, const Params &params, Grid2D &out);
138
139 PaletteTable palettes_;
140 mutable std::string lastError_;
141 mutable std::vector<std::string> algorithmIdsCache_;
142 mutable std::vector<std::string> textureRecipeIdsCache_;
143 mutable std::vector<std::string> pbrRecipeIdsCache_;
144 mutable std::vector<std::string> meshRecipeIdsCache_;
145};
146
147} // namespace eve::procgen
int z
Definition Grass.cpp:135
float height
Definition Grass.cpp:235
int x
Definition Grass.cpp:135
int h
int w
int width
TileLayer * layer
uint32_t semantic
Definition WfcSimple.cpp:15
GPU mesh handle (+ optional CPU morph targets).
Definition Mesh.h:18
GPU texture created via Graphics::newTexture. Owns GPU resources through an opaque backend handle.
Definition Texture.h:17
Represents raw pixel data.
Definition ImageData.h:26
ECS tile layer entity. Script mutates tile GIDs / tileset / draw; TileRenderSystem batch-draws atlas ...
Definition TileLayer.h:30
Deterministic, seamlessly-tiling, time-animated procedural cloud field.
Definition CloudField.h:17
Cloud shadows cast onto the ground plane.
Definition CloudShadow.h:21
Intermediate 2D generation result. cells store semantic ids (see Semantic.h), not tile GIDs — convert...
Definition Grid2D.h:16
In-memory terrain heightmap: a dense float grid (row-major, index = y * width + x) materialized from ...
Definition Heightmap.h:19
CPU triangle mesh from procedural mesh recipes (e.g. marching cubes). Positions/normals are xyz-packe...
Definition MeshBuild.h:14
Configurable generation sink. target: "grid" | "tilelayer" | "json"
Definition OutputSpec.h:15
Named palette: semantic name -> tile GID. Unmapped semantics become GID 0.
Definition Palette.h:16
Generation parameters. Algorithm-specific keys live in values as strings (no overloads; typed setters...
Definition Params.h:13
Procedural generation module. Phase A: runtime maps (semantic Grid2D → TileLayer)....
Definition Procgen.h:37
int getTextureRecipeCount() const
Definition Procgen.cpp:210
CloudField * newCloudField()
New deterministic, tiling, time-animated cloud field (caller owns).
Definition Procgen.cpp:230
bool hasTextureRecipe(const std::string &recipeId) const
Definition Procgen.cpp:225
Grid2D * generate(const std::string &algorithmId, Params *params)
Definition Procgen.cpp:72
void sampleCloud(CloudField *field, float *out, int w, int h, float time, float x0, float z0, float extent)
Definition Procgen.cpp:252
float cloudCoverageAt(CloudField *field, float x, float z, float time)
Cloud coverage at world (x, z) and time (via a CloudField).
Definition Procgen.cpp:234
void setPaletteGid(const std::string &palette, const std::string &semantic, int gid)
Definition Procgen.cpp:122
void sampleCloudShadow(CloudShadow *shadow, float *out, int w, int h, float time, float x0, float z0, float extent)
Definition Procgen.cpp:262
graphics::Texture * generateTexture(const std::string &recipeId, Params *params, graphics::Graphics *gfx)
Upload recipe to GPU. repeatU/V follow params "seamless" (default on). Caller owns Texture*.
Definition Procgen.cpp:195
bool applyToLayer(Grid2D *grid, const std::string &palette, map::TileLayer *layer)
Definition Procgen.cpp:113
image::ImageData * generateImage(const std::string &recipeId, Params *params)
RGBA8 ImageData (caller owns). Pixel-friendly recipes: tex.soil/stone/marble/water/sky_cloud.
Definition Procgen.cpp:162
Params * newParams()
Definition Procgen.cpp:53
std::string getAlgorithmId(int index) const
Definition Procgen.cpp:135
bool heightmapToGrid(Heightmap *heightmap, Params *params, Grid2D *out)
Classify a heightmap into a semantic Grid2D using params bands (waterMax…).
Definition Procgen.cpp:371
Heightmap * generateHeightmap(Params *params)
Build a sampler from params (seed/scale/octaves/…) and materialize it (caller owns).
Definition Procgen.cpp:361
Heightmap * newHeightmap(int width, int height)
Empty in-memory heightmap (caller owns).
Definition Procgen.cpp:357
Grid2D * newGrid(int width, int height)
Definition Procgen.cpp:56
image::ImageData * generateNormalImage(const std::string &recipeId, Params *params)
Normal map derived from albedo luminance (caller owns).
Definition Procgen.cpp:175
bool generateTo(const std::string &algorithmId, Params *params, OutputSpec *output)
Definition Procgen.cpp:85
CloudShadow * newCloudShadow()
New sun projection over a cloud field → ground shadows (caller owns).
Definition Procgen.cpp:232
OutputSpec * newOutput()
Definition Procgen.cpp:54
std::string getMeshRecipeId(int index) const
Definition Procgen.cpp:341
bool hasPbrRecipe(const std::string &recipeId) const
Definition Procgen.cpp:299
int getMeshRecipeCount() const
Definition Procgen.cpp:335
bool hasAlgorithm(const std::string &algorithmId) const
Definition Procgen.cpp:141
int getPaletteGid(const std::string &palette, const std::string &semantic) const
Definition Procgen.cpp:126
std::string getPbrRecipeId(int index) const
Definition Procgen.cpp:290
float cloudShadowFactor(CloudShadow *shadow, float x, float z, float time)
Light multiplier in [0,1] from a CloudShadow at world (x, z) and time.
Definition Procgen.cpp:243
~Procgen() override=default
int getPbrRecipeCount() const
Definition Procgen.cpp:284
int getAlgorithmCount() const
Definition Procgen.cpp:130
uint32_t randomSeed()
Fresh non-zero seed for regenerating a level.
Definition Procgen.cpp:153
graphics::Mesh * generateMesh(const std::string &recipeId, Params *params, graphics::Graphics *gfx)
Build + upload to GPU Mesh (owned by Graphics).
Definition Procgen.cpp:320
bool hasMeshRecipe(const std::string &recipeId) const
Definition Procgen.cpp:350
PaletteTable & palettes()
Definition Procgen.h:134
std::string gridToJson(Grid2D *grid) const
Definition Procgen.cpp:157
MeshBuild * buildMesh(const std::string &recipeId, Params *params)
CPU mesh (caller owns). Recipes: mesh.marchingcubes, mesh.hexplanet.
Definition Procgen.cpp:304
std::string lastError() const
Definition Procgen.cpp:155
PbrTextureSet * generatePbrMaterial(const std::string &recipeId, Params *params)
Full metallic-roughness PBR set (albedo/normal/roughness/metallic/height/ao) derived from a single di...
Definition Procgen.cpp:272
std::string getTextureRecipeId(int index) const
Definition Procgen.cpp:216
TerrainSampler * newTerrainSampler()
Sampling function over continuous map coordinates (caller owns).
Definition Procgen.cpp:355
bool autotileGrid(Grid2D *grid)
Post-process a generated grid: fill each wall cell's detail with an 8-bit neighbour mask (autotile di...
Definition Procgen.cpp:145
Deterministic terrain height sampling (Red Blob Games / Perlin fBm recipe).
卡牌游戏 UI 工具模块:工厂 + 脚本绑定入口。 功能参考 ycarowr/UiCard:扇形手牌布局、抽牌/洗牌、悬浮放大、拖拽到落牌区、 敌方手牌(背面/偷看)、费用不足置灰,以及可实时调节的布局...
Definition AnimTrail.h:6
Full metallic-roughness PBR map set. All maps are caller-owned; call destroy() (or delete each pointe...
Definition PbrMaterial.h:24