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