OverviewFilesCommitsIssuesDocsReleasesPeers

hyper-tps / scenes / test / _probe_selection_shot.gd

96 lines · gd ref:
extends SceneTree
## Probe: what the selection looks like on screen (outlines vs the old wash).
## Two textured boxes on map_flat, one in front of the other; shot 1 = both selected
## (front active), shot 2 = one face selected.
##   HYPERTPS_DAEMON_TCP=127.0.0.1:1 "$HYPER_TPS_GODOT" --path . --script res://scenes/test/_probe_selection_shot.gd -- --out DIR

const ProbeWindow := preload("res://scenes/test/probe_window.gd")
const SIZE := Vector2i(1600, 900)

var _out := "/tmp"
var _ws := ""
var _next_i3 := 0
var _ready_frames := 0
var _n := 0
var _map: Node
var _level: Node
var _a := -1
var _b := -1


func _initialize() -> void:
	var args := OS.get_cmdline_user_args()
	var i := args.find("--out")
	if i >= 0 and i + 1 < args.size():
		_out = args[i + 1]
	DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
	DisplayServer.window_set_size(SIZE)
	_ws = ProbeWindow.free_workspace()
	_map = (load("res://scenes/maps/map_flat.tscn") as PackedScene).instantiate()
	root.add_child(_map)


func _box(lo: Vector3, hi: Vector3) -> PackedFloat32Array:
	return PackedFloat32Array([1, 0, 0, hi.x, -1, 0, 0, -lo.x, 0, 1, 0, hi.y, 0, -1, 0, -lo.y, 0, 0, 1, hi.z, 0, 0, -1, -lo.z])


func _process(_d: float) -> bool:
	if _ready_frames < 20:
		if _ws != "" and _ready_frames == 0 and Time.get_ticks_msec() >= _next_i3:
			_next_i3 = Time.get_ticks_msec() + 1000
			ProbeWindow.move_to(_ws, SIZE)
		if ProbeWindow.drawing(root):
			_ready_frames += 1
		elif Time.get_ticks_msec() > 30000:
			print("PROBE FAIL window never drew")
			quit(1)
			return true
		return false
	_n += 1
	if _n == 10:
		_level = _map.get_node("DCLevel")
		var ft: Array = []
		for k in 6:
			ft.append({"tex": "ambientcg/Bricks105", "mode": 1})
		_a = _level.add_brush(_box(Vector3(-3, 0, -6), Vector3(1, 3, -5)), 1, PackedInt32Array(), 0, false, "shot-a", false, "", ft)
		_b = _level.add_brush(_box(Vector3(-1, 0, -3), Vector3(1.5, 1.6, -2)), 1, PackedInt32Array(), 0, false, "shot-b", false, "", ft)
		_level.rebuild()
		var cam := Camera3D.new()
		cam.fov = 70
		root.add_child(cam)
		cam.global_transform = Transform3D(Basis.looking_at(Vector3(-0.15, -0.25, -1).normalized(), Vector3.UP), Vector3(1.2, 2.2, 2.5))
		cam.make_current()
		root.get_node("/root/GameMode").set_mode("build")
		_map.select_brushes(PackedInt32Array([_a, _b]))
		_map.set("_sel_keys", _level.get_brush(_b).get("plane_keys", PackedStringArray()))
		_map.set("_sel_kind", "brush")
		_map._update_face_highlight()
		_map._update_element_highlight()
	elif _n == 40:
		root.get_texture().get_image().save_png(_out.path_join("sel_brush.png"))
		if OS.get_cmdline_user_args().has("--move"):
			# Mid-move: the FRONT box lifted into its proxy and dragged 40 steps on x.
			_map.select_brushes(PackedInt32Array([_b]))
			var op := MoveOperator.new()
			op.map = _map
			op.level = _level
			_map.add_child(op)
			_map.call("_ensure_ops").activate(op)
			op.set("_steps", 40)
			op.update_preview()
			_n = 60
			return false
		var keys: PackedStringArray = _level.get_brush(_a).get("plane_keys", PackedStringArray())
		_map.set("_sel_brushes", [_a] as Array[int])
		_map.set("_sel_brush", _a)
		_map.set("_sel_kind", "face")
		_map.set("_sel_keys", PackedStringArray([keys[4]]))   # +z face of the back box
		_map._update_face_highlight()
		_map._update_element_highlight()
	elif _n == 70:
		root.get_texture().get_image().save_png(_out.path_join(
			"move_mid.png" if OS.get_cmdline_user_args().has("--move") else "sel_face.png"))
		print("PROBE saved")
		return true
	return false