Biome-aware surface rules from the vanilla rule tree
Replaces the biome-blind fillVanillaColumn heuristics with a full interpreter for the overworld surface_rule tree (already embedded in overworld.json): block/sequence/condition/bandlands rules plus all 11 condition tests (biome, steep, hole, water, temperature, y_above, stone_depth, noise_threshold, not, vertical_gradient, above_preliminary_surface). - worldgen/blockids.go: name(+Properties)→network-ID table for surface blocks (grass/sand/terracotta/mycelium/podzol/coarse_dirt/sandstone/ calcite/snow/ice/...), with snowy property variants. - worldgen/surface.go: rule-tree parser + interpreter + SurfaceContext; LoadOverworldSurfaceRule caches the seed-independent tree. - loader.go: OverworldDensity.SurfaceRule() exposes the parsed tree. - biome_lookup.go: BiomeNameAt returns the biome name for biome tests. - vanilla.go: samples the 2D climate + biome before column fill, threads the rule tree and biome name into fillVanillaColumn, and applies it top-down with stone as the default for non-matching (deeper) blocks. The above_preliminary_surface gate uses an inclusive bound so the top solid block reaches the biome dispatch. - Performance: one per-column RNG and a reused SurfaceContext keep the overhead to ~+13ms/chunk (71ms vs 58ms baseline), within the gate.
This commit is contained in:
parent
d3142e7687
commit
4dcf938a85
8 changed files with 934 additions and 26 deletions
|
|
@ -31,6 +31,13 @@ type OverworldDensity struct {
|
|||
Temperature, Humidity, Continentalness, Erosion, Weirdness, Depth DensityFunction
|
||||
}
|
||||
|
||||
// SurfaceRule returns the overworld surface rule tree, loading it on first use.
|
||||
// It does not depend on the seed. A nil rule (on error) is non-fatal: the
|
||||
// generator falls back to its default surface heuristics.
|
||||
func (od *OverworldDensity) SurfaceRule() (SurfaceRule, error) {
|
||||
return LoadOverworldSurfaceRule()
|
||||
}
|
||||
|
||||
// LoadOverworldFinalDensity builds the overworld final_density function for the
|
||||
// given world seed.
|
||||
func LoadOverworldFinalDensity(seed int64) (*OverworldDensity, error) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue