Orrery Terrain · OrreryTerrainCore module · struct
Native::
FGroundChange
One entry of the ground change journal: a rectangle of edit tiles whose ground, or the answers about it, may have changed in one publish.
Declaration
struct FGroundChange- Header
#include "Native/GroundJournal.h"- Module
PublicDependencyModuleNames.Add("OrreryTerrainCore");in your module’s Build.cs.- Stability
- Stable: changes within a major version only add.
- Thread
- Every reader pulls the same entries with its own cursor: any thread through FGroundQuery::ChangesSince, the far field through FTerrainWorld::FarChanges. (the header’s rule)
Description
One publish adds, in this order:
when its changed range (the listeners' range) is not empty, one entry over that range with Levels 0 and What by its cause, or for a sculpt publish by what it moved (
EGroundChangeWhat); a sculpt publish that moved nothing the bits name (a paint that put back the values a tile held) adds none;when it changed the feature stack (FTerrainWorld::Commit, Apply or ApplyFeatureOps, so Cause Commit or Undo), one entry with What = Features and Levels 0 over the edit tiles of every feature its ops inserted, replaced (before and after) or removed, batters included (FFeatureFootprint::EditTiles), even when no post moved: a plate flush with the ground still changes what stands on it;
while far data is on (FTerrainWorld::SetFarData), at most kFarJournalMaxPerPublish far entries (Levels != 0, What = Heights), by ascending Y, then X, of each rectangle's first tile.
A load adds nothing: it resets the journal. Entries are immutable once published.
Not saved, not hashed (StateHash) and not replicated: every machine keeps its own.
Properties
| Name | Type | Default | Meaning |
|---|---|---|---|
Revision | FRevision | 0 | The publish that made the change, counted on this machine (streaming publishes included); readers see it from that snapshot on. |
Seq | uint64_ | 0 | The server log position of the record behind the change, to key on across machines: the newest record the publish includes (FTerrainWorld::SetRecordSeq when its snapshot was taken). 0 for local causes (Stream, residency) and while not networked. |
Edit | FTile | — | Edit tiles, inclusive. |
Min | FWorld | — | The world rectangle EditTiles covers, metres: its lower corner. |
Max | FWorld | — | Its upper corner (the far edge of EditTiles.Max), metres. |
Cause | EChange | EChange | Why the publish happened. |
What | EGround | EGround | What may have changed. |
Levels | uint16_ | 0 | The far levels whose composed posts (FGroundQuery::CopyFarTile) may have changed, FarLevelBit per level; 0 for an entry that does not change the far ground. A sculpt or a feature changes every level (kFarAllLevels); a finer overlay landing, or a tier coarsening, only the levels finer than the coarser of the two overlays, so the resident atlases (levels 5 and up) skip it and the ring takes it. |