OverviewFilesCommitsIssuesDocsReleasesPeers

hyper-tps / scenes / test / _probe_hotspot_shot.gd

80 lines · gd ref:
extends SceneTree
## Probe: hotspot faces on screen — walls 0.12 / 0.25 / 0.5 m tall and a 0.25 m pillar,
## every face on the composed industrial sheet, all fitted with uv_op("hotspot").
##   HYPERTPS_DAEMON_TCP=127.0.0.1:1 "$HYPER_TPS_GODOT" --path . --script res://scenes/test/_probe_hotspot_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


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) -> Array:
	return [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:
		var level: Node = _map.get_node("DCLevel")
		var persist: Node = _map.get("_persist")
		var keet: Node = root.get_node_or_null("/root/KeetService")
		if keet != null:
			keet.current_member_id = "probe"
		var gs: Node = root.get_node_or_null("/root/GameState")
		if gs != null:
			gs.route("world:level:*", 1, "peer")
		var ft: Array = []
		for k in 6:
			ft.append({"tex": "composed/industrial", "mode": 1})
		var ids: Array[int] = []
		for spec: Array in [[Vector3(-3, 0, -5), Vector3(0, 0.12, -4.6)], [Vector3(-3, 0.3, -5), Vector3(0, 0.55, -4.6)],
				[Vector3(-3, 0.75, -5), Vector3(0, 1.25, -4.6)], [Vector3(0.6, 0, -5), Vector3(0.85, 2.5, -4.75)]]:
			var dot: String = persist.record("brush.create", {"planes": _box(spec[0], spec[1]), "proj": [],
				"material_id": 1, "level_id": 0, "sky": false, "face_tex": ft})
			persist.refold()
			ids.append(level.brush_by_key(dot))
		_map._process(0.0)
		_map.select_brushes(PackedInt32Array(ids))
		var n: int = _map.uv_op("hotspot")
		print("PROBE hotspot faces: %d" % n)
		_map.select_brushes(PackedInt32Array())
		var cam := Camera3D.new()
		cam.fov = 60
		root.add_child(cam)
		cam.global_transform = Transform3D(Basis.looking_at(Vector3(0.05, -0.15, -1).normalized(), Vector3.UP), Vector3(-0.9, 1.3, -1.6))
		cam.make_current()
	elif _n == 50:
		root.get_texture().get_image().save_png(_out.path_join("hotspot.png"))
		print("PROBE saved")
		return true
	return false