Added a dynamic layout system where UI elements can be moved about on a tiled grid.
This commit is contained in:
1 parent
ea6ba54666
commit
26c29df4ad
34 files changed
+1269
No files matched your search
@@ -0,0 +1,31 @@
|
||||
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": "Reserved for depth, pressure and water temperature.", "scene": preload("res://components/layout_slot.tscn"), "size": Vector2i(6, 5), "minimum": Vector2i(4, 3), "reference": Vector2(360, 240), "fill": true},
|
||||
"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
|
||||
Reference in new issue
Block a user