63 lines
2.0 KiB
GDScript
63 lines
2.0 KiB
GDScript
extends VBoxContainer
|
|
class_name SensorApprovalController
|
|
|
|
@export var sensor_approval_scene: PackedScene
|
|
|
|
var sensor_approval_nodes = {}
|
|
|
|
var window_size: Vector2
|
|
var window_center: Vector2
|
|
|
|
var settings_open: bool = false
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready() -> void:
|
|
SettingSignals.settings_opened.connect(_on_settings_opened)
|
|
SettingSignals.settings_closed.connect(_on_settings_closed)
|
|
ServerSignals.sensor_request_received.connect(_on_sensor_request_received)
|
|
ServerSignals.sensor_approved.connect(_on_sensor_approved)
|
|
ServerSignals.sensor_declined.connect(_on_sensor_declined)
|
|
|
|
window_size = DisplayServer.window_get_size()
|
|
window_center = window_size / 2
|
|
|
|
func _on_settings_opened():
|
|
settings_open = true
|
|
for val in sensor_approval_nodes:
|
|
remove_child(sensor_approval_nodes[val])
|
|
|
|
func _on_settings_closed():
|
|
settings_open = false
|
|
for val in sensor_approval_nodes:
|
|
add_child(sensor_approval_nodes[val])
|
|
_update_container_position()
|
|
|
|
func _on_sensor_request_received(sensor_ip: String, data_provided: Array):
|
|
sensor_approval_nodes[sensor_ip] = sensor_approval_scene.instantiate()
|
|
sensor_approval_nodes[sensor_ip].set_provided_data(sensor_ip, data_provided)
|
|
if not settings_open:
|
|
add_child(sensor_approval_nodes[sensor_ip])
|
|
_update_container_position()
|
|
|
|
func _update_container_position():
|
|
for val in sensor_approval_nodes:
|
|
var container_size = sensor_approval_nodes[val].size
|
|
container_size = Vector2(container_size.x, container_size.y * sensor_approval_nodes.size())
|
|
position = window_center - (container_size/2)
|
|
return
|
|
|
|
func _on_sensor_approved(sensor_ip: String):
|
|
_remove_approval_scene(sensor_ip)
|
|
|
|
func _on_sensor_declined(sensor_ip: String):
|
|
_remove_approval_scene(sensor_ip)
|
|
|
|
func _remove_approval_scene(sensor_ip: String):
|
|
if sensor_ip not in sensor_approval_nodes:
|
|
return
|
|
remove_child(sensor_approval_nodes[sensor_ip])
|
|
sensor_approval_nodes[sensor_ip].queue_free()
|
|
sensor_approval_nodes.erase(sensor_ip)
|
|
position = window_center - (size/2)
|
|
_update_container_position()
|