OverviewFilesCommitsIssuesDocsReleasesPeers

hyper-tps / scenes / test / proc_nodes_zone_test.gd

64 lines · gd ref:
@tool
extends ProcGeometryNode

## RepeatZone test: MeshCube → RepeatZone(3 iters, ScaleElements 0.8)
## Expected: cube scaled 3 times = 0.8^3 = 0.512 of original size

func _ready():
	_build_graph()
	call_deferred("_apply_material")

func _apply_material():
	var mesh_child = get_node_or_null("MeshOutput")
	if mesh_child and mesh_child is MeshInstance3D:
		var mat = StandardMaterial3D.new()
		mat.albedo_color = Color(0.6, 0.3, 0.2)
		mat.roughness = 0.7
		mesh_child.material_override = mat

func _build_graph():
	var g = ProcNodeGraph.new()

	# 0: Cube (initial geometry)
	var cube = MeshCubeNode.new()
	g.add_node(cube)

	# 1: RepeatZoneInput
	var rz_in = RepeatZoneInputNode.new()
	rz_in.zone_id = 1
	g.add_node(rz_in)

	# 2: Iterations value
	var iters = ValueNode.new()
	iters.value = 3.0
	g.add_node(iters)

	# 3: ScaleElements (body node — scales geometry by factor)
	var scale_node = ScaleElementsNode.new()
	g.add_node(scale_node)

	# 4: Scale factor
	var scale_val = ValueNode.new()
	scale_val.value = 0.8
	g.add_node(scale_val)

	# 5: RepeatZoneOutput
	var rz_out = RepeatZoneOutputNode.new()
	rz_out.zone_id = 1
	g.add_node(rz_out)

	# --- Connections ---
	# iterations → rz_in.Iterations (input 0)
	g.connect_sockets(2, 0, 1, 0)
	# cube → rz_in.Geometry (input 1)
	g.connect_sockets(0, 0, 1, 1)
	# rz_in.Geometry out (output 1) → scale.Geometry (input 0)
	g.connect_sockets(1, 1, 3, 0)
	# scale_val → scale.Factor (input 1)
	g.connect_sockets(4, 0, 3, 1)
	# scale → rz_out.Geometry (input 0)
	g.connect_sockets(3, 0, 5, 0)

	self.graph = g
	print("Zone test: RepeatZone with 3 iterations, scale 0.8 each")