MagicNStuff/source/addons/lightmap_probe_grid/UI.gd

90 lines
2.3 KiB
GDScript

@tool
extends Node
@export var probes_x: SpinBox
@export var probes_y: SpinBox
@export var probes_z: SpinBox
@export var planned_probes: RichTextLabel
@export var generate_button: Button
@export var far_distance: SpinBox
@export var object_size: SpinBox
var root_node: Node
var probe_grid: LightmapProbeGrid
func _ready() -> void:
root_node = EditorInterface.get_edited_scene_root()
if EditorInterface.get_selection().get_selected_nodes().size() == 1:
probe_grid = EditorInterface.get_selection().get_selected_nodes()[0] as LightmapProbeGrid
else:
return
# connecting signals
if not probe_grid.probes_changed.is_connected(_get_probes):
probe_grid.probes_changed.connect(_get_probes)
if not probe_grid.probes_changed.is_connected(planned_probes_text):
probe_grid.probes_changed.connect(planned_probes_text)
# initializing values
far_distance.value = probe_grid.far_distance
object_size.value = probe_grid.object_size
_get_probes()
planned_probes_text()
planned_probes.tooltip_text = "Maximum is %s" % probe_grid.max_probes
func planned_probes_text() -> void:
var total: int = probe_grid.planned_probes
var current: int = probe_grid.current_probes
var max_probes: int = probe_grid.max_probes
if total <= max_probes:
planned_probes.text = "Probes Planned/Current: " + str(total) + " / " + str(current)
generate_button.disabled = false
else:
planned_probes.text = "[color=red]Planned Probes: %s [/color] \
\nWarning: Max number of probes is %s" % [total, max_probes]
generate_button.disabled = true
func _set_probes_number(_value: float) -> void:
var number_of_probes: Vector3i = Vector3i.ONE
number_of_probes.x = int(probes_x.value)
number_of_probes.y = int(probes_y.value)
number_of_probes.z = int(probes_z.value)
probe_grid.probes_number = number_of_probes
func _on_generate_probes_pressed() -> void:
probe_grid.generate_probes()
func _get_probes() -> void:
var number: Vector3i = probe_grid.probes_number
probes_x.value = number.x
probes_y.value = number.y
probes_z.value = number.z
func _on_cut_by_mask_pressed() -> void:
probe_grid.cut_obstructed()
func _cut_far_probes():
probe_grid.cut_far()
func _set_far_distance(value):
probe_grid.far_distance = value
func _cut_inside():
probe_grid.cut_inside()
func _set_object_size(value):
probe_grid.object_size = value