Method WaitForStableGroundAt
- Namespace
- GrindFest
- Assembly
- GrindFest.dll
WaitForStableGroundAt(Vector3, int, float)
Wait until the terrain at this position has STOPPED MOVING - not merely until it exists.
protected IEnumerator WaitForStableGroundAt(Vector3 worldPos, int stableSamples = 3, float timeout = 3)
Parameters
Returns
Remarks
MapMagic switches a tile's LOD asynchronously and its own IsGenerating() deliberately does not
report that: TerrainTile.cs:71 carries the author's note that switchLodCoroutine
"shouldn't be added to coroutines list (otherwise IsGenerating return true)". So the collider under a
spot can still be replaced after every "terrain is ready" gate has passed, and whatever is
resting on it falls through the gap.
Measured 2026-09-20 in a WebGL player: a planter pot placed on ground y=11.37 was 27 m lower 0.8 s later, and at the suite's 3x timeScale 0.8 s is 2.4 game-seconds - i.e. exactly free fall, nothing stopped it. The same build passed the test on other runs, which is the signature of a swap that happens only sometimes.
Best-effort, deliberately short: the gate cannot prevent the swap, only avoid placing INTO one, and the real protection is PlaceItemOnGround(ItemBehaviour, Vector3, string) parking the item kinematic. Measured 2026-09-20 in a full WebGL run: it timed out twice in four farming placements (the ground under that spot genuinely keeps moving), and 10 s each was 20 s of a run whose budget is already tight - hence the 3 s.