86 lines
3.4 KiB
GDScript
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()
|