extends Control
## Test run editor.
##
## Tests can be created and modified visually, and saved as JSON
## files into [member TESTS_DIR].
var models: Array[Mesh] = [
preload("res://assets/models/bench.obj"),
preload("res://assets/models/cube.obj"),
preload("res://assets/models/cylinder.obj"),
preload("res://assets/models/monkey.obj"),
preload("res://assets/models/plane.obj")
]
@onready var name_edit: LineEdit = %NameEdit
@onready var channel_count_spin_box: SpinBox = %ChannelCountSpinBox
@onready var tests_option_button: OptionButton = %TestsOptionButton
@onready var model_option_button: OptionButton = %ModelOptionButton
@onready var mesh_instance: MeshInstance3D = %MeshInstance
const TESTS_DIR = "res://tests/tests/"
var test := Test.new()
func _ready() -> void:
reload_test_list()
for model in models:
model_option_button.add_item(model.resource_path.get_file().get_basename().to_pascal_case())
model_option_button.set_item_metadata(model_option_button.item_count - 1, model)
func reload_test_list():
tests_option_button.clear()
for test_file in DirAccess.get_files_at(TESTS_DIR):
var found_test := load(TESTS_DIR.path_join(test_file)) as Test
tests_option_button.add_item(found_test.name)
tests_option_button.set_item_metadata(
tests_option_button.item_count - 1, found_test)
tests_option_button.selected = -1
func _on_save_button_pressed() -> void:
if test.name.is_empty():
return
var _err := ResourceSaver.save(test,
TESTS_DIR.path_join("%s.json" % test.name.to_snake_case()))
reload_test_list()
func _on_tests_option_button_item_selected(index: int) -> void:
var test_file: String = tests_option_button.get_item_metadata(index)
var data: Test = load(TESTS_DIR.path_join(test_file))
load_data(data)
func load_data(data: Test) -> void:
name_edit.text = data.name
channel_count_spin_box.value = data.channels
func _on_new_button_pressed() -> void:
channel_count_spin_box.value = 1
name_edit.clear()
tests_option_button.selected = -1
func _on_painted_model_container_stroke_added(from: Vector2, to: Vector2) -> void:
test.steps.append(PaintStep.new(from, to))
func _on_model_option_button_item_selected(index: int) -> void:
var mesh: Mesh = model_option_button.get_item_metadata(index)
mesh_instance.mesh = mesh
func _on_name_edit_text_changed(new_text: String) -> void:
test.name = new_text