Files
tgcc/core/game_state/game_state.gd
2026-06-18 19:59:07 +00:00

88 lines
2.7 KiB
GDScript

extends Node
@warning_ignore("unused_signal")
signal on_game_paused
@warning_ignore("unused_signal")
signal on_game_resumed
@warning_ignore("unused_signal")
signal on_photo_highlighted(teture: Texture)
@warning_ignore("unused_signal")
signal on_enable_photo_mode_request
@warning_ignore("unused_signal")
signal on_disable_photo_mode_request
@warning_ignore("unused_signal")
signal on_photo_taken_prepare
@warning_ignore("unused_signal")
signal on_photo_taken_started
@warning_ignore("unused_signal")
signal on_photo_taken_making
@warning_ignore("unused_signal")
signal on_photo_taken_finished
@warning_ignore("unused_signal")
signal on_photo_mode_black_screen_disappeared
const SAVE_PATH: String = "user://savegame.json"
var save_data: SaveGameData = SaveGameData.new()
var is_loaded: bool = false
func _ready() -> void:
load_game()
apply_video_settings()
func apply_video_settings() -> void:
get_viewport().use_taa = save_data.anti_aliasing
var msaa_mode = Viewport.MSAA_2X if save_data.anti_aliasing else Viewport.MSAA_DISABLED
get_viewport().msaa_3d = msaa_mode
get_viewport().msaa_2d = msaa_mode
match save_data.window_mode_index:
0:
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN)
1:
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN)
2:
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_BORDERLESS, false)
if save_data.window_mode_index == 2 and save_data.resolution_x > 0 and save_data.resolution_y > 0:
DisplayServer.window_set_size(Vector2i(save_data.resolution_x, save_data.resolution_y))
# Optional: center the window if resized
var screen_center = DisplayServer.screen_get_position() + DisplayServer.screen_get_size() / 2
var window_size = DisplayServer.window_get_size()
DisplayServer.window_set_position(screen_center - window_size / 2)
func save_game() -> void:
var save_file = FileAccess.open(SAVE_PATH, FileAccess.WRITE)
var json_string = JSON.stringify(save_data.to_dictionary())
save_file.store_line(json_string)
func load_game() -> void:
if not FileAccess.file_exists(SAVE_PATH):
save_data = SaveGameData.new()
is_loaded = true
return
var file = FileAccess.open(SAVE_PATH, FileAccess.READ)
var json_string = file.get_as_text()
var json = JSON.new()
var parse_result = json.parse(json_string)
save_data = SaveGameData.new()
if parse_result == OK and json.data is Dictionary:
save_data = SaveGameData.from_dictionary(json.data)
is_loaded = true
func pause_game() -> void:
get_tree().paused = true
func resume_game() -> void:
get_tree().paused = false
func quit_game() -> void:
SceneManager.quit_game()