载入中...
搜索中...
未找到
PixelWorld.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
5#include "common/Result.h"
6#include "common/Time.h"
8
9#include <cstddef>
10#include <cstdint>
11#include <functional>
12#include <memory>
13#include <span>
14#include <vector>
15
16namespace eve::pixelworld {
17
18class PixelWorldControlService;
19
20inline constexpr int kPixelChunkSize = 64;
21inline constexpr std::uint8_t kPixelSleepHysteresisTicks = 3;
22
24struct PixelCell {
26 std::int16_t temperature = 20;
27 std::uint8_t lifetime = 0;
29 std::uint16_t thermalRemainder = 0;
30
32 friend bool operator==(const PixelCell&, const PixelCell&) = default;
33};
34
36struct StepStats {
38 std::uint32_t chunksVisited = 0;
39 std::uint32_t cellsVisited = 0;
40 std::uint32_t cellsChanged = 0;
41 std::uint32_t cellsMoved = 0;
42 std::uint32_t temperatureTransfers = 0;
43 std::uint64_t thermalEnergyTransferred = 0;
44 std::uint64_t thermalEnergyClamped = 0;
45 std::uint32_t phaseChanges = 0;
46 std::uint32_t reactions = 0;
47 std::uint32_t parallelTasks = 0;
48 std::uint32_t chunksReclaimed = 0;
49};
50
59public:
61 virtual ~PixelWorkScheduler() = default;
63 virtual void parallelFor(std::size_t workItems,
65 const std::function<void(std::size_t)>& body) = 0;
67 [[nodiscard]] virtual std::size_t workerCount() const noexcept = 0;
68};
69
78 int x = 0;
79 int y = 0;
80 std::uint64_t revision = 0;
81 bool removed = false;
82 std::vector<PixelCell> cells;
83
85 friend bool operator==(const PixelChunkSnapshot&, const PixelChunkSnapshot&) = default;
86};
87
90 std::uint64_t catalogFingerprint = 0;
91 std::uint64_t sourceSeed = 0;
92 std::uint64_t sourceRevision = 0;
94 std::uint64_t sourceLastEditSequence = 0;
96 bool fullResync = false;
97 std::vector<PixelChunkSnapshot> chunks;
98
100 friend bool operator==(const PixelChunkBatch&, const PixelChunkBatch&) = default;
101};
102
105 int minX = 0;
106 int minY = 0;
107 int maxX = -1;
108 int maxY = -1;
109
111 friend bool operator==(const PixelChunkRegion&, const PixelChunkRegion&) = default;
112};
113
116 int x = 0;
117 int y = 0;
118 std::uint64_t revision = 0;
119 std::uint32_t nonAirCells = 0;
120 std::uint32_t mobileCells = 0;
121 std::int16_t minimumTemperature = 20;
122 std::int16_t maximumTemperature = 20;
123 std::uint8_t idleTicks = 0;
124 bool active = false;
125};
126
129 std::uint64_t revisionBefore = 0;
130 std::uint64_t revisionAfter = 0;
131 std::uint32_t chunksReplaced = 0;
132 std::uint32_t chunksRemoved = 0;
133 std::uint64_t worldEpoch = 0;
134};
135
138 std::uint64_t fingerprintBefore = 0;
139 std::uint64_t fingerprintAfter = 0;
140 std::uint64_t revisionBefore = 0;
141 std::uint64_t revisionAfter = 0;
142 std::uint64_t worldEpoch = 0;
143 std::uint32_t chunksRebuilt = 0;
144 bool replayHistoryInvalidated = false;
145};
146
148enum class PixelEditKind : std::uint8_t { PaintCircle, HeatCircle, Explosion };
149
156 std::uint64_t sequence = 0;
157 PixelEditKind kind = PixelEditKind::PaintCircle;
158 int centerX = 0;
159 int centerY = 0;
160 int radius = 0;
161 MaterialId material = MaterialId::Air;
162 int strength = 0;
163 std::int16_t temperatureDelta = 0;
164};
165
168 std::uint64_t sequence = 0;
169 std::uint64_t revisionBefore = 0;
170 std::uint64_t revisionAfter = 0;
171 std::uint32_t cellsChanged = 0;
172 std::uint32_t cellsRemoved = 0;
173 std::uint32_t cellsHeated = 0;
174};
175
178 int minX = 0;
179 int minY = 0;
180 int maxX = -1;
181 int maxY = -1;
182};
183
186 std::uint64_t world = 0;
187 std::uint64_t epoch = 0;
189 friend bool operator==(const PixelWorldLink&, const PixelWorldLink&) = default;
190};
191
200 std::uint64_t id = 0;
201 int originX = 0;
202 int originY = 0;
203 int width = 0;
204 int height = 0;
205 std::uint32_t solidCellCount = 0;
206 std::vector<PixelCell> cells;
207};
208
211 std::uint64_t fragmentId = 0;
212 std::uint64_t revisionBefore = 0;
213 std::uint64_t revisionAfter = 0;
214 std::uint32_t cellsPlaced = 0;
215};
216
225public:
227 explicit PixelWorld(std::uint64_t seed = 1);
229 PixelWorld(std::uint64_t seed, MaterialCatalog catalog);
231 ~PixelWorld();
233 PixelWorld(PixelWorld&&) noexcept;
235 PixelWorld& operator=(PixelWorld&&) noexcept;
236 PixelWorld(const PixelWorld&) = delete;
237 PixelWorld& operator=(const PixelWorld&) = delete;
238
240 PixelCell getCell(int x, int y) const noexcept;
242 int getMaterial(int x, int y) const noexcept;
244 bool isSolidMaterial(MaterialId material) const noexcept;
246 std::uint32_t materialDisplayRgba(MaterialId material) const noexcept;
253 [[nodiscard]] eve::Result<PixelCatalogReloadReceipt> reloadMaterialCatalog(
254 MaterialCatalog catalog, std::uint64_t expectedFingerprint);
256 void setCell(int x, int y, PixelCell cell);
258 void setMaterial(int x, int y, std::string_view material);
260 [[nodiscard]] eve::Result<void> setMaterialChecked(int x, int y, std::string_view material);
262 std::size_t paintCircle(int centerX, int centerY, int radius, std::string_view material);
264 [[nodiscard]] eve::Result<std::size_t> paintCircleChecked(int centerX, int centerY, int radius,
265 std::string_view material);
271 [[nodiscard]] eve::Result<PixelEditReceipt> applyEdit(const PixelEditCommand& command);
273 PixelEditReceipt explode(int centerX, int centerY, int radius, int strength,
274 std::int16_t temperatureDelta);
283 [[nodiscard]] eve::Result<std::vector<PixelFragment>> extractUnsupportedFragments(
284 PixelRegion region, int supportY, std::uint32_t minimumCells = 1);
290 [[nodiscard]] eve::Result<PixelFragmentRasterReceipt> rasterizeFragment(
291 const PixelFragment& fragment, int originX, int originY);
293 PixelWorldLink worldLink() const noexcept;
295 void clear() noexcept;
296
301 [[nodiscard]] eve::Result<StepStats> advance(eve::SimulationTick tick);
307 [[nodiscard]] eve::Result<StepStats> advanceScheduled(eve::SimulationTick tick,
308 PixelWorkScheduler& scheduler);
310 StepStats step();
311
313 void setPaused(bool paused) noexcept;
315 bool isPaused() const noexcept;
316
318 std::uint64_t seed() const noexcept;
320 std::uint64_t revision() const noexcept;
322 std::uint64_t tickValue() const noexcept;
324 std::uint64_t lastEditSequence() const noexcept;
326 int chunkCount() const noexcept;
328 int activeChunkCount() const noexcept;
330 std::uint64_t materialCatalogFingerprint() const noexcept;
331
337 std::vector<PixelChunkSnapshot> snapshotChangedChunks(std::uint64_t sinceRevision) const;
338
345 [[nodiscard]] eve::Result<std::vector<PixelChunkSnapshot>> snapshotChunksInRegion(
346 PixelChunkRegion region, std::uint64_t sinceRevision = 0) const;
347
349 [[nodiscard]] eve::Result<std::vector<PixelChunkDiagnostic>> chunkDiagnostics(
350 PixelChunkRegion region) const;
351
360 [[nodiscard]] eve::Result<PixelChunkApplyReceipt> applyChunkBatch(
361 const PixelChunkBatch& batch, std::uint64_t expectedRevision);
362
364 [[nodiscard]] eve::Result<std::vector<std::byte>> saveSnapshot() const;
370 [[nodiscard]] eve::Result<void> restoreSnapshot(std::span<const std::byte> bytes);
371
372private:
374 eve::Result<StepStats> advanceImpl(eve::SimulationTick tick, PixelWorkScheduler* scheduler);
375 struct Impl;
376 std::unique_ptr<Impl> impl_;
377};
378
379} // namespace eve::pixelworld
bool & active
float y
Definition AnimClip.cpp:738
float x
Definition AnimClip.cpp:738
#define EVENGINE_API_FOUNDATION
每个链接组(link group)各自的导出宏。
Definition Export.h:106
std::uint32_t height
std::uint32_t width
TokenKind kind
std::uint64_t bytes
uint64_t epoch
Definition OnnxGpgpu.cpp:28
std::unique_ptr< gpgpu::Sequence > sequence
Definition OnnxGpgpu.cpp:43
World3D * world
std::int16_t maximumTemperature
std::uint8_t idleTicks
std::uint64_t revision
std::int16_t minimumTemperature
float radius
std::uint32_t seed
Definition PointSet.cpp:807
Material * material
Move-only, checked operation results for the common layer.
int removed
Cell cell
SimulationTick tick
Common time values and an injectable deterministic simulation clock.
float step
Definition TreeMesh.cpp:314
std::string body
Move-only operation result carrying either a value or Status.
Definition Result.h:155
static constexpr StrongUint64 zero() noexcept
Returns the zero value for this strong type.
Owning immutable material and reaction table used by one PixelWorld.
Synchronous executor for owning PixelWorld candidate buffers.
Definition PixelWorld.h:58
virtual void parallelFor(std::size_t workItems, const std::function< void(std::size_t)> &body)=0
Execute every index in [0, workItems) exactly once and synchronously join.
virtual std::size_t workerCount() const noexcept=0
Observable worker capacity used for diagnostics only.
virtual ~PixelWorkScheduler()=default
Releases PixelWorkScheduler resources.
Main-thread-affine control surface shared by editor, CLI and MCP adapters.
Sparse, chunked, deterministic 2D falling-material world.
Definition PixelWorld.h:224
PixelWorld & operator=(const PixelWorld &)=delete
PixelWorld(const PixelWorld &)=delete
MaterialId
Compact stable material identifier stored in each authoritative cell.
constexpr std::uint8_t kPixelSleepHysteresisTicks
Definition PixelWorld.h:21
PixelEditKind
Canonical deterministic edit operation admitted at a Tick boundary.
Definition PixelWorld.h:148
constexpr int kPixelChunkSize
Definition PixelWorld.h:20
Build metadata (engine git commit, build time, third-party version).
Definition Build.cpp:16
Receipt for one transactional compatible material Catalog hot reload.
Definition PixelWorld.h:137
Compact authoritative state for one simulated world pixel.
Definition PixelWorld.h:24
friend bool operator==(const PixelCell &, const PixelCell &)=default
Operator ==.
std::uint16_t thermalRemainder
Canonical sub-degree thermal energy in [0, material heatCapacity).
Definition PixelWorld.h:29
Receipt for one all-or-nothing authoritative Chunk batch application.
Definition PixelWorld.h:128
Owning authoritative Chunk correction with source world metadata.
Definition PixelWorld.h:89
friend bool operator==(const PixelChunkBatch &, const PixelChunkBatch &)=default
Operator ==.
std::vector< PixelChunkSnapshot > chunks
Definition PixelWorld.h:97
Read-only per-Chunk simulation diagnostics for tooling and overlays.
Definition PixelWorld.h:115
Inclusive finite rectangle expressed in Chunk coordinates.
Definition PixelWorld.h:104
friend bool operator==(const PixelChunkRegion &, const PixelChunkRegion &)=default
Operator ==.
Owning, immutable projection of one authoritative simulation chunk.
Definition PixelWorld.h:77
std::vector< PixelCell > cells
Definition PixelWorld.h:82
friend bool operator==(const PixelChunkSnapshot &, const PixelChunkSnapshot &)=default
Operator ==.
Owning replayable edit command. Sequence must be exactly previous + 1.
Definition PixelWorld.h:155
Deterministic receipt for one atomically accepted edit command.
Definition PixelWorld.h:167
Receipt for one all-or-nothing fragment rasterization.
Definition PixelWorld.h:210
Owning material bitmap detached atomically from a PixelWorld.
Definition PixelWorld.h:198
std::vector< PixelCell > cells
Definition PixelWorld.h:206
Finite inclusive world-space rectangle used by structural queries.
Definition PixelWorld.h:177
Counters produced by one deterministic simulation step.
Definition PixelWorld.h:36
std::uint64_t thermalEnergyTransferred
Definition PixelWorld.h:43
std::uint32_t temperatureTransfers
Definition PixelWorld.h:42
std::uint32_t parallelTasks
Definition PixelWorld.h:47
eve::SimulationTick tick
Definition PixelWorld.h:37
std::uint32_t cellsVisited
Definition PixelWorld.h:39
std::uint32_t chunksVisited
Definition PixelWorld.h:38
std::uint32_t chunksReclaimed
Definition PixelWorld.h:48
std::uint32_t cellsChanged
Definition PixelWorld.h:40
std::uint32_t phaseChanges
Definition PixelWorld.h:45
std::uint64_t thermalEnergyClamped
Definition PixelWorld.h:44