32 lines
2.5 KiB
GDScript
32 lines
2.5 KiB
GDScript
extends RefCounted
|
|
|
|
const ITEM = preload("res://components/layout_item.tscn")
|
|
const ENTRIES = {
|
|
"camera": {"title": "Camera", "description": "16:9 video surface with a stream header.", "scene": preload("res://components/camera_layout_slot.tscn"), "size": Vector2i(16, 10), "minimum": Vector2i(8, 5), "reference": Vector2(960, 600)},
|
|
"vehicle": {"title": "Vehicle status", "description": "Mode, faults, electrical readings and internal temperature.", "scene": preload("res://components/vehicle_status_panel.tscn"), "size": Vector2i(10, 8), "minimum": Vector2i(6, 4), "reference": Vector2(600, 440)},
|
|
"motion": {"title": "Motion", "description": "Attitude, heading, acceleration and angular momentum.", "scene": preload("res://components/motion_panel.tscn"), "size": Vector2i(10, 7), "minimum": Vector2i(6, 4), "reference": Vector2(600, 410), "background": NodePath("Content/Background")},
|
|
"environment": {"title": "Environment", "description": "Depth with a shallow-expanded scale, outside pressure and water temperature.", "scene": preload("res://components/environment_panel.tscn"), "size": Vector2i(6, 5), "minimum": Vector2i(4, 3), "reference": Vector2(360, 240)},
|
|
"link": {"title": "Link", "description": "Connection state, traffic utilization and packet loss.", "scene": preload("res://components/link_panel.tscn"), "size": Vector2i(6, 4), "minimum": Vector2i(4, 3), "reference": Vector2(360, 240)},
|
|
"videovr": {"title": "Video / VR", "description": "Reserved for latency, headset connection and resolution.", "scene": preload("res://components/layout_slot.tscn"), "size": Vector2i(12, 8), "minimum": Vector2i(6, 4), "reference": Vector2(600, 400), "fill": true},
|
|
"operatortools": {"title": "Operator tools", "description": "Reserved for recording, manipulator controls and terminal.", "scene": preload("res://components/layout_slot.tscn"), "size": Vector2i(10, 6), "minimum": Vector2i(6, 4), "reference": Vector2(600, 400), "fill": true},
|
|
}
|
|
|
|
static func create_item(element_type: String, id: String, rect: Rect2i) -> Control:
|
|
var entry: Dictionary = ENTRIES[element_type]
|
|
var item = ITEM.instantiate()
|
|
item.name = id
|
|
item.panel_id = id
|
|
item.element_type = element_type
|
|
item.cell_rect = rect
|
|
item.minimum_cells = entry.minimum
|
|
item.reference_size = entry.reference
|
|
item.fill_allocation = entry.get("fill", false)
|
|
item.background_path = entry.get("background", NodePath(""))
|
|
var content = entry.scene.instantiate()
|
|
content.name = "Content"
|
|
if item.fill_allocation:
|
|
content.title = entry.title.to_upper()
|
|
content.description = entry.description
|
|
item.add_child(content)
|
|
return item
|