Files
pomchronicles/scripts/game_manager.gd
2025-11-19 14:42:59 -05:00

154 lines
4.9 KiB
GDScript

extends Node
var player_data : Adventurer = null
var player : Player = null
var panel : GamePanel = null
var player_profile : Window = null
var quest_log : QuestLog = null
var menu : GameMenu = null
var open : bool = false
var end_shift_confirmation : ConfirmationDialog
var end_shift_confirm_template = preload("res://templates/end_shift_confirmation.tscn")
var player_profile_template = preload("res://templates/player_profile_window.tscn")
var last_screenshot : Image
var shifts : Array[float] = []
var current_shift = -1
func _ready() -> void:
player_data = Adventurer.new()
Quest.load_quest_list()
DisplayServer.register_additional_output(self)
end_shift_confirmation = end_shift_confirm_template.instantiate()
add_child(end_shift_confirmation)
func _process(delta: float) -> void:
if open:
if Input.is_action_just_pressed("profile"):
toggle_player_profile()
if Input.is_action_just_pressed("switch modes"):
confirm_end_shift()
if Input.is_action_just_pressed("test"):
test_save()
func add_quest_progress_bar(quest : Quest) -> void:
panel.add_quest_progress_bar(quest)
func confirm_end_shift() -> void:
end_shift_confirmation.popup_centered()
func setup_visitor_ui(spawner: VisitorSpawner)-> void:
if panel:
panel.connect_visitor_spawner(spawner)
func toggle_player_profile():
if player_profile != null:
player_profile.queue_free()
player_profile = null
else:
player_profile = player_profile_template.instantiate()
add_child(player_profile)
player_profile.setup(player.data)
func start_shift(shift_num) -> void:
current_shift = shift_num
panel.reset_timer(shifts[shift_num])
func end_shift() -> void:
take_screenshot()
open = !open
start_shift(wrap(current_shift+1, 0, len(shifts)))
if player_profile != null:
toggle_player_profile()
panel.switch_panel(open)
var window = get_window()
window.mode = Window.MODE_WINDOWED
var size = DisplayServer.screen_get_size()
window.content_scale_size = Vector2i(415,700)
var wsize = window.get_size_with_decorations()
#window.position = Vector2i(size.x - 345, 25)
window.transparent = true
window.transparent_bg = true
DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_BORDERLESS, true)
DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_TRANSPARENT, true)
#window.per
Guild.hall.process_mode = Node.PROCESS_MODE_DISABLED
Guild.hall.visible = false
menu.hide()
panel.get_parent().global_position = Vector2i(5,5)
window.size = Vector2i(415,700)
panel.populate_quest_views()
panel.populate_quest_bars()
func notice(msg : String, time : float = 1) -> void:
panel.notice(msg, time)
func calculate_kill_exp(killer : QuestSprite, killed : QuestSprite) -> int:
return clamp(1, (killed.level - killer.level) * 5, 100)
func take_screenshot() -> void:
last_screenshot = get_viewport().get_texture().get_image()
func test_save() -> void:
if open:
take_screenshot()
var save_dict = {
"savetime": Time.get_datetime_string_from_system(),
"screenshot": last_screenshot.save_png_to_buffer().hex_encode()
}
#Save the guild data
save_dict["guildname"] = Guild.name
save_dict["guildlevel"] = Guild.level
#Save the player data
if player:
save_dict.player = player.save()
#Save the employee data
#Save the adventurer data
var members = Guild.save_members()
if len(members) > 0:
save_dict.members = members
#Save the quest data
var quests = Guild.save_quests()
if len(quests) > 0:
save_dict.quests = quests
var save_file = FileAccess.open("user://savefile.save", FileAccess.WRITE)
save_file.store_line(JSON.stringify(save_dict, "\t"))
func get_savefile_data(filename : String) -> Dictionary:
var load_file = FileAccess.open("user://" + filename, FileAccess.READ)
var json = JSON.new()
var json_string = load_file.get_as_text()
var parse_result = json.parse(json_string)
if not parse_result == OK:
printerr("JSON Parse Error: ", json.get_error_message(), " in ", json_string, " at line ", json.get_error_line())
return {}
var image = Image.new()
var ss : String = json.data.screenshot
#print(ss.data)
image.load_png_from_buffer(ss.hex_decode())
var data_dict = json.data.duplicate_deep()
return data_dict
func test_load(filename : String) -> void:
var load_file = FileAccess.open("user://" + filename, FileAccess.READ)
var json = JSON.new()
var json_string = load_file.get_line()
var parse_result = json.parse_string(json_string)
if not parse_result == OK:
printerr("JSON Parse Error: ", json.get_error_message(), " in ", json_string, " at line ", json.get_error_line())
return
func switch_scenes(scene_name : String) -> void:
get_tree().change_scene_to_file("res://scenes/" + scene_name + ".tscn")
func switch_dialogue(timeline_name : String, label : String) -> void:
Dialogic.start("res://dialogic/timelines/" + timeline_name + ".dtl", label)
func save_quests(save_dict : Dictionary) -> void:
var lst = []
for quest in Guild.quests:
lst.append(quest.save_dict())
save_dict.quests = lst