Files
car-os/settings/display/display_settings.gd
T
2026-07-04 18:22:23 -06:00

86 lines
3.4 KiB
GDScript

extends Control
var sphere_mesh = SphereMesh.new()
var quad_mesh = QuadMesh.new()
@export var circle_size_control: PackedScene
@export var rect_size_control: PackedScene
var size_control_instance: Node
var screen_bound_mesh: MeshInstance2D
var current_mode: int
var mode_container: HBoxContainer
var save_container: HBoxContainer
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
DisplayData.WINDOW_SIZE = Vector2(DisplayServer.window_get_size())
DisplayData.WINDOW_CENTER = DisplayData.WINDOW_SIZE / 2
screen_bound_mesh = get_node("ScreenBounds")
mode_container = get_node("ModeSelect")
var mode_container_size = mode_container.size
var mode_container_position = Vector2(DisplayData.WINDOW_CENTER.x - mode_container_size.x/2, DisplayData.WINDOW_CENTER.y - mode_container_size.y)
mode_container.position = mode_container_position
save_container = get_node("SaveSelect")
var save_container_size = save_container.size
var save_container_position = Vector2(DisplayData.WINDOW_CENTER.x - save_container_size.x/2, DisplayData.WINDOW_CENTER.y + save_container_size.y * 4)
save_container.position = save_container_position
func update():
current_mode = DisplayData.DISPLAY_MODE_IDX
if current_mode == 0:
_on_circle_selected()
screen_bound_mesh.mesh.radius = DisplayData.DISPLAY_PARAMETERS[0]
screen_bound_mesh.mesh.height = DisplayData.DISPLAY_PARAMETERS[1]
else:
_on_rectangle_selected()
screen_bound_mesh.mesh.size = Vector2(DisplayData.DISPLAY_PARAMETERS[0], DisplayData.DISPLAY_PARAMETERS[1])
func _on_circle_selected() -> void:
if size_control_instance != null:
remove_child(size_control_instance)
size_control_instance.queue_free()
screen_bound_mesh.mesh = sphere_mesh
screen_bound_mesh.mesh.radius = 0.5 * min(DisplayData.WINDOW_SIZE.x, DisplayData.WINDOW_SIZE.y)
screen_bound_mesh.mesh.height = 2 * screen_bound_mesh.mesh.radius
screen_bound_mesh.position = DisplayData.WINDOW_CENTER
size_control_instance = circle_size_control.instantiate()
size_control_instance.set_mesh(screen_bound_mesh.mesh)
var container_size = size_control_instance.get_node("HBoxContainer").size
var container_position = Vector2(DisplayData.WINDOW_CENTER.x - container_size.x/2, DisplayData.WINDOW_CENTER.y + container_size.y/2)
add_child(size_control_instance)
size_control_instance.position = container_position
current_mode = 0
func _on_rectangle_selected() -> void:
if size_control_instance != null:
remove_child(size_control_instance)
size_control_instance.queue_free()
screen_bound_mesh.mesh = quad_mesh
screen_bound_mesh.mesh.size = DisplayData.WINDOW_SIZE
screen_bound_mesh.position = DisplayData.WINDOW_CENTER
size_control_instance = rect_size_control.instantiate()
size_control_instance.set_mesh(screen_bound_mesh.mesh)
var container_size = size_control_instance.size
var container_position = Vector2(DisplayData.WINDOW_CENTER.x - 90, DisplayData.WINDOW_CENTER.y + 36)
add_child(size_control_instance)
size_control_instance.position = container_position
current_mode = 1
func _on_save_pressed() -> void:
var current_bounds = []
if current_mode == 0:
current_bounds = [screen_bound_mesh.mesh.radius, screen_bound_mesh.mesh.height]
else:
current_bounds = [screen_bound_mesh.mesh.size.x, screen_bound_mesh.mesh.size.y]
SettingSignals.display_settings_saved.emit(current_mode, current_bounds)
SettingSignals.display_settings_closed.emit()
func _on_cancel_pressed() -> void:
SettingSignals.display_settings_closed.emit()