## Dumps ProcNodesBridge::evaluate over a fixed grid, as raw float bits.
## The only instrument that can see that function: it is a method on a
## godot_cpp class, so nothing outside the engine reaches it.
extends SceneTree
func _init() -> void:
var args := OS.get_cmdline_user_args()
var out_path: String = args[0] if args.size() > 0 else "/tmp/pn_eval.bin"
var gen := DCTerrainGeneratorProcNodes.new()
var g := ProcNodeGraph.new()
var noise := g.add_node(GradientNoiseNode.new())
g.get_node(noise).set_input_default(1, 3.0)
g.get_node(noise).set_input_default(2, 3)
g.get_node(noise).set_input_default(3, 0.1)
var ero := g.add_node(ErosionNoiseNode.new())
g.get_node(ero).set_input_default(1, 5.0)
g.get_node(ero).set_input_default(2, 0.15)
g.get_node(ero).set_input_default(3, 0.6)
g.get_node(ero).set_input_default(4, 0.7)
g.get_node(ero).set_input_default(5, 7)
g.get_node(ero).set_input_default(6, 0.5)
g.connect_sockets(noise, 0, ero, 7)
g.connect_sockets(noise, 1, ero, 8)
gen.set_graph(g)
gen.set_terrain_height(21000.0)
gen.set_floor_y(-10900.0)
gen.set_ceiling_y(10900.0)
var t := DCTerrain.new()
t.set_generator(gen)
var f := FileAccess.open(out_path, FileAccess.WRITE)
var n := 0
for ix in range(-8, 9):
for iz in range(-8, 9):
for iy in range(-4, 5):
var p := Vector3(ix * 137.0, iy * 900.0, iz * 211.0)
f.store_float(t.sample_density(p))
n += 1
f.close()
print("PN_EVAL_PROBE wrote ", n, " samples -> ", out_path)
quit()