Skip to content
Orbdale

Orbdale Terrain · OrbdaleTerrainCore 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("OrbdaleTerrainCore"); 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:

  1. 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;

  2. 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;

  3. 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

NameTypeDefaultMeaning
RevisionFRevision0

The publish that made the change, counted on this machine (streaming publishes included); readers see it from that snapshot on.

Sequint64_t0

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.

EditTilesFTileRange—

Edit tiles, inclusive.

MinFWorldXY—

The world rectangle EditTiles covers, metres: its lower corner.

MaxFWorldXY—

Its upper corner (the far edge of EditTiles.Max), metres.

CauseEChangeCauseEChangeCause::Stream

Why the publish happened.

WhatEGroundChangeWhatEGroundChangeWhat::None

What may have changed.

Levelsuint16_t0

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.