initial commit
This commit is contained in:
+100
@@ -0,0 +1,100 @@
|
||||
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
|
||||
Reference in New Issue
Block a user