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