99 lines
3.1 KiB
GDScript
99 lines
3.1 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()
|
|
apply_train_colors()
|
|
|
|
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
|
|
|
|
func apply_train_colors() -> void:
|
|
if not save_data.train_color_1.is_empty():
|
|
var mat1: ShaderMaterial = load("res://tgcc/train/Color1_train.tres")
|
|
if mat1:
|
|
mat1.set_shader_parameter("albedo_color", Color(save_data.train_color_1))
|
|
if not save_data.train_color_2.is_empty():
|
|
var mat2: ShaderMaterial = load("res://tgcc/train/Color2_train.tres")
|
|
if mat2:
|
|
mat2.set_shader_parameter("albedo_color", Color(save_data.train_color_2))
|
|
|
|
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()
|