101 lines
3.8 KiB
GDScript
101 lines
3.8 KiB
GDScript
extends Node
|
|||
|
|
|
||
|
|
var DISPLAY_SETTINGS_FILE = "user://display_settings.txt"
|
||
|
|
var WIDGET_SETTINGS_FILE = "user://widget_settings.txt"
|
||
|
|
|
||
|
|
var settings_menu_scene: Node
|
||
|
|
var settings_menu_button: Node
|
||
|
|
|
||
|
|
|
||
|
|
# Called when the node enters the scene tree for the first time.
|
||
|
|
func _ready() -> void:
|
||
|
|
|
||
|
|
SettingSignals.display_settings_saved.connect(_on_display_settings_saved)
|
||
|
|
SettingSignals.settings_closed.connect(_on_settings_closed)
|
||
|
|
|
||
|
|
DisplayData.WINDOW_SIZE = Vector2(DisplayServer.window_get_size())
|
||
|
|
DisplayData.WINDOW_CENTER = DisplayData.WINDOW_SIZE / 2
|
||
|
|
|
||
|
|
settings_menu_button = get_node("OpenSettings")
|
||
|
|
settings_menu_scene = get_node("SettingsMenu")
|
||
|
|
remove_child(settings_menu_scene)
|
||
|
|
_try_load_settings()
|
||
|
|
_set_settings_button_position()
|
||
|
|
|
||
|
|
func _try_load_settings():
|
||
|
|
_try_load_display_settings()
|
||
|
|
_try_load_widget_settings()
|
||
|
|
|
||
|
|
func _try_load_display_settings():
|
||
|
|
if not FileAccess.file_exists(DISPLAY_SETTINGS_FILE):
|
||
|
|
_use_default_settings()
|
||
|
|
_on_settings_opened()
|
||
|
|
_set_settings_button_position()
|
||
|
|
return
|
||
|
|
var settings_file = FileAccess.open(DISPLAY_SETTINGS_FILE, FileAccess.READ)
|
||
|
|
DisplayData.DISPLAY_MODE_IDX = int(settings_file.get_line())
|
||
|
|
DisplayData.DISPLAY_PARAMETERS = []
|
||
|
|
var str_bound_parameters = settings_file.get_csv_line()
|
||
|
|
for val in str_bound_parameters:
|
||
|
|
DisplayData.DISPLAY_PARAMETERS.append(float(val))
|
||
|
|
_set_settings_button_position()
|
||
|
|
|
||
|
|
func _use_default_settings():
|
||
|
|
DisplayData.DISPLAY_MODE_IDX = 0
|
||
|
|
var radius = min(DisplayData.WINDOW_SIZE.x, DisplayData.WINDOW_SIZE.y) / 2
|
||
|
|
DisplayData.DISPLAY_PARAMETERS = [radius, radius*2]
|
||
|
|
|
||
|
|
func _try_load_widget_settings():
|
||
|
|
pass
|
||
|
|
|
||
|
|
func _on_display_settings_saved(new_display_mode: int, new_display_bounds: Array):
|
||
|
|
DisplayData.DISPLAY_MODE_IDX = new_display_mode
|
||
|
|
DisplayData.DISPLAY_PARAMETERS = new_display_bounds
|
||
|
|
var settings_file = FileAccess.open(DISPLAY_SETTINGS_FILE, FileAccess.WRITE)
|
||
|
|
settings_file.store_line(str(DisplayData.DISPLAY_MODE_IDX))
|
||
|
|
settings_file.store_line(str(DisplayData.DISPLAY_PARAMETERS[0])+','+str(DisplayData.DISPLAY_PARAMETERS[1]))
|
||
|
|
settings_file.close()
|
||
|
|
|
||
|
|
func _on_settings_closed():
|
||
|
|
remove_child(settings_menu_scene)
|
||
|
|
add_child(settings_menu_button)
|
||
|
|
_set_settings_button_position()
|
||
|
|
|
||
|
|
func _on_settings_opened():
|
||
|
|
SettingSignals.settings_opened.emit()
|
||
|
|
remove_child(settings_menu_button)
|
||
|
|
add_child(settings_menu_scene)
|
||
|
|
_set_settings_menu_position()
|
||
|
|
|
||
|
|
func _set_settings_button_position():
|
||
|
|
var corner = Vector2(0, 0)
|
||
|
|
var button_position = Vector2(0, 0)
|
||
|
|
if DisplayData.DISPLAY_MODE_IDX == 0:
|
||
|
|
corner = DisplayData.WINDOW_CENTER + (DisplayData.BR_CORNER * DisplayData.DISPLAY_PARAMETERS[0])
|
||
|
|
button_position = corner - (DisplayData.BR_CORNER * max(settings_menu_button.size.x, settings_menu_button.size.y))
|
||
|
|
else:
|
||
|
|
corner = DisplayData.WINDOW_CENTER + Vector2(DisplayData.DISPLAY_PARAMETERS[0]/2, DisplayData.DISPLAY_PARAMETERS[1]/2)
|
||
|
|
button_position = corner - settings_menu_button.size
|
||
|
|
settings_menu_button.position = button_position
|
||
|
|
|
||
|
|
func _set_settings_menu_position():
|
||
|
|
var scene_size = settings_menu_scene.get_node("Panel").size
|
||
|
|
settings_menu_scene.get_node("Panel").position = DisplayData.WINDOW_CENTER - scene_size/2
|
||
|
|
|
||
|
|
func check_in_bounds(center: Vector2, width: float, height: float):
|
||
|
|
if DisplayData.DISPLAY_MODE_IDX == 0:
|
||
|
|
return _check_in_circle(center, width, height)
|
||
|
|
else:
|
||
|
|
return _check_in_rect(center, width, height)
|
||
|
|
|
||
|
|
func _check_in_circle(center: Vector2, width: float, height: float):
|
||
|
|
return ((center - DisplayData.WINDOW_CENTER).length() + max(width, height)/2) < DisplayData.DISPLAY_PARAMETERS[0]
|
||
|
|
|
||
|
|
func _check_in_rect(center: Vector2, width: float, height: float):
|
||
|
|
var rel_center = center - DisplayData.WINDOW_CENTER
|
||
|
|
if abs(rel_center.x) + width / 2 >= DisplayData.DISPLAY_PARAMETERS[0] / 2:
|
||
|
|
return false
|
||
|
|
if abs(rel_center.y) + height / 2 >= DisplayData.DISPLAY_PARAMETERS[1] / 2:
|
||
|
|
return false
|
||
|
|
return true
|