terrain_reload/terrain_unload release one map's height field, survey, photograph and patch bounds and generate another at any TERRAIN_HALF; scatter_clear_all (with streams), actor_clear_all, col_reset and mesh_free empty the scene; water_body_add/water_bodies_clear draw several still-water planes with one reflecting; terrain_sea separates the coast's sea level from the carved lake's, and grass keeps off both. Fixes CDLOD patch bounds for TERRAIN_HALF != 4096 and water_init leaking a mesh and program per call. examples/rendering/reload.ludic. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1.3 KiB
1.3 KiB
bump: minor type: feat ludic.render3d: replace the world at run time — a game can swap its terrain, scatter, colliders, actors and water for another map's without restarting.
terrain_reload(dem, emin, emax, base, ox, oz, ortho, half)releases the current map's height field, survey, photograph and patch bounds and generates another at anyTERRAIN_HALF;terrain_unload()is the release on its own.scatter_clear_all()(withstream_clear_all()),actor_clear_all()andcol_reset()empty the scene for the next map;mesh_free()releases a mesh's GL objects.- Water bodies —
water_body_add(level, cx, cz, ex, ez, reflect)andwater_bodies_clear()draw several still-water planes at their own levels; the first that reflects gets the planar reflection.water_initstill means one reflecting plane. - Fix: the terrain's patch quadtree placed patches at a fixed 32 m leaf, so any
TERRAIN_HALFother than 4096 put patch bounds in the wrong place; leaves now scale with the map. - Fix:
water_initbuilt a new mesh and compiled a new program on every call. terrain_sea(level)separates the sea's level (the coast, the strand, the shoreline, forest and scree shading) from the carved lake's, so a lake can sit above the sea. Unset, the sea is the lake's level as before.