Code reorganizing

This commit is contained in:
Maurane
2026-02-24 18:01:23 +01:00
parent 450d372775
commit a9698155fa
52 changed files with 1458 additions and 679 deletions
+18
View File
@@ -0,0 +1,18 @@
[gd_scene load_steps=5 format=3 uid="uid://buoev4bra11fe"]
[ext_resource type="Script" uid="uid://c6kqjqj6cs4wa" path="res://Scenes/main/main.gd" id="1_xvxb3"]
[ext_resource type="PackedScene" uid="uid://cahspuhi43bx7" path="res://Scenes/title_screen/title_screen.tscn" id="2_uea07"]
[ext_resource type="PackedScene" uid="uid://chytk2cctjk3x" path="res://Scenes/screening_desk/screening_desk.tscn" id="3_2vfcy"]
[ext_resource type="PackedScene" uid="uid://igkl2384rxt1" path="res://Scenes/text_screen/text_screens.tscn" id="4_vno88"]
[node name="MainHub" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_xvxb3")
TitleScreen = ExtResource("2_uea07")
ScreeningDesk = ExtResource("3_2vfcy")
TextScreens = ExtResource("4_vno88")
+62
View File
@@ -0,0 +1,62 @@
extends Node
var is_transitioning : bool = false
var day_count : int = 1
var floor_count : int = -1
var patient_count : int = 1
var diagnoses_quota : int = 1
var daily_patient_limit : int = 3
var patient_list = ["42", "43", "44", "45", "46", "47", "48", "49", "50", "51"]
var patients_seen: Array[String]
var patient_id
var interfloor_dialogue = load("res://Dialogues/interfloor.dialogue")
var directives = "\n[center][font_size=22]INSTRUCTIONS[/font_size][/center]
\n\n[font_size=18][color=forest_green]RELEASE[/color] HUMANS, [color=red]TERMINATE[/color] ABNORMALS
\n\nIF A SUBJECT HAS [color=dark_orange]SYMPTOMS[/color] IT SHOULDN'T HAVE,
\n [color=red]IT IS NOT HUMAN[/color]
\n\nREFER TO THE [color=royal_blue]MANUAL[/color] FOR [color=dark_orange]SYMPTOMS[/color] DETAILS
\n\nMAKE ENOUGH [color=green_yellow]ACCURATE DIAGNOSES[/color] IN A ROW
\nTO GET TO THE NEXT FLOOR[/font_size]"
var release_messages: Array[String]
var terminate_messages: Array[String]
var buttons_activated: bool = true
#Signals for screening desk
signal console_message
signal response_chosen(DialogueResponse)
signal clear_patient
signal color_change
signal character_label_color_change
signal start_balloon
signal release_display
signal terminate_display
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
release_messages.resize(3)
terminate_messages.resize(3)
release_messages[0] = Globals.colorize("- ASSESSMENT MADE -\n\n- LOADING RELEASE PROTOCOL... -", "green_yellow")
release_messages[1] = Globals.colorize("- RELEASING SUBJECT -", "green_yellow")
release_messages[2] = "EVALUATION RECORDED" + "\n\nPATIENT STATUS: " + Globals.colorize("HUMAN", "green") + "\n\nUPDATING DATABASE...\n\n" + Globals.colorize("INITIATING RELEASE SEQUENCE", "green_yellow")
terminate_messages[0] = Globals.colorize("- ASSESSMENT MADE -\n\n- LOADING TERMINATION PROTOCOL... -", "orange_red")
terminate_messages[1] = Globals.colorize("- TERMINATING SUBJECT -", "orange_red")
terminate_messages[2] = "EVALUATION RECORDED" + "\n\nPATIENT STATUS: " + Globals.colorize("ABNORMAL", "red") + "\n\nUPDATING DATABASE...\n\n" + Globals.colorize("INITIATING TERMINATION SEQUENCE", "orange_red")
pass
#Gets the current time and day of the year
func get_save_date() -> String:
var dt = Time.get_datetime_dict_from_system()
return "%02d/%02d/%04d, %02d:%02d" % [
dt.month, dt.day, dt.year,
dt.hour, dt.minute
]
#Colorizes a message in BBCode
func colorize(message:String, color: String) -> String:
var colorized_message : String
colorized_message = "[color=" + color + "]" + message + "[/color]"
return colorized_message
+1
View File
@@ -0,0 +1 @@
uid://ea5lvcj6nhqg
+311
View File
@@ -0,0 +1,311 @@
extends Control
@export var TitleScreen: PackedScene
@export var ScreeningDesk: PackedScene
@export var TextScreens: PackedScene
var balloon: Node
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
#Adding Scenes
var title_screen = TitleScreen.instantiate()
var screening_desk = ScreeningDesk.instantiate()
var text_screens = TextScreens.instantiate()
add_child(title_screen)
add_child(screening_desk)
add_child(text_screens)
#Naming Scenes
title_screen.name = "TitleScreen"
screening_desk.name = "ScreeningDesk"
text_screens.name = "TextScreens"
#Showing TitleScreen
title_screen.show()
#Connecting Signals
title_screen.connect("new_game_pressed", self._on_new_game_pressed)
UI.connect("save_slot_pressed", self._on_save_slot_pressed)
UI.connect("load_slot_pressed", self._on_load_slot_pressed)
UI.connect("main_menu_pressed", self._on_main_menu_pressed)
UI.connect("text_value_changed", self._on_text_value_changed)
UI.connect("auto_value_changed", self._on_auto_value_changed)
Globals.character_label_color_change.connect(self._on_character_label_color_change)
Globals.start_balloon.connect(self.start_balloon)
#Updating Save/Load Slots Information based on Existing Saves
update_slots()
#Sorting patients by floor
Patient.sort_patients()
# Starts a new game
func _on_new_game_pressed():
#Setting/Resetting game parameters
Globals.day_count = 1
Globals.floor_count = -1
Globals.patient_count = 0
Globals.diagnoses_quota = 1
Globals.daily_patient_limit = 6
Globals.patients_seen.clear()
$ScreeningDesk.journal_layer.update_journal(-1)
# DISABLED FOR NOW SINCE THERE'S NO INTRO ANYMORE
#Offering to skip the introduction
#var choice_text = "Do you wish to skip the introduction ?"
#UI.ask_confirmation(start_day, play_intro, choice_text)
start_day()
#Plays the entire introduction
func play_intro():
#PART IN PROGRESS
#Starting the day
start_day()
#Starts the day
func start_day():
#Hiding Menu for cinematic impact
UI.get_node("UI/UpperContainer").hide()
#Transitioning to day screen
$TextScreens/Day.text = "[center]DAY " + str(Globals.day_count) + "[/center]"
var scenes_to_hide: Array[Node] = [$TitleScreen]
var scenes_to_show: Array[Node] = [$TextScreens, $TextScreens/Day]
TransitionScreen.transition("big", scenes_to_hide, scenes_to_show)
await TransitionScreen.transition_finished
await get_tree().create_timer(1.0).timeout
#Setting up new patient
$ScreeningDesk.accurate_diagnoses = 0 #Resetting accurate_diagnoses value at the day's beginning
$ScreeningDesk.middle_screen.update(Globals.day_count, Globals.floor_count, $ScreeningDesk.accurate_diagnoses, Globals.diagnoses_quota)
#Transitioning to the screening desk
scenes_to_hide = scenes_to_show
scenes_to_show = [$ScreeningDesk, UI, UI.get_node("UI/UpperContainer")]
TransitionScreen.transition("big", scenes_to_hide, scenes_to_show)
await TransitionScreen.transition_finished
#Supervisor Dialogue
$ScreeningDesk.supervisor.dialogue("interfloor_" + str(-Globals.floor_count-1))
await $ScreeningDesk.supervisor.dialogue_finished
$ScreeningDesk.console_screen.display(Globals.directives)
$ScreeningDesk.new_patient()
#Saves game state on the selected save slot
func save_game(save_slot_number:int):
#Setting up save data
var save_data = {
"day_count": Globals.day_count,
"floor_count": Globals.floor_count,
"patient_count": Globals.patient_count,
"diagnoses_quota": Globals.diagnoses_quota,
"daily_patient_limit": Globals.daily_patient_limit,
"patient_list": Globals.patient_list,
"patient_id": Globals.patient_id,
"patients_seen": Globals.patients_seen,
"save_date": Globals.get_save_date()
}
#Creating save file
var file = FileAccess.open("res://Saves/save_" + str(save_slot_number) + ".json", FileAccess.WRITE)
if file:
var json_string = JSON.stringify(save_data)
print(json_string)
file.store_string(json_string)
file.close()
print("Game saved successfully!")
else:
print("Failed to open file for saving.")
#Updating save/load slots information
var save_slot_path = "UI/Save/MarginContainer/VBoxContainer/SaveSlot" + str(save_slot_number)
var load_slot_path = "UI/Load/MarginContainer/VBoxContainer/LoadSlot" + str(save_slot_number)
var save_slot = UI.get_node(save_slot_path)
var load_slot = UI.get_node(load_slot_path)
save_slot.text = "DAY " + str(save_data["day_count"]) + ", PATIENT " + str(save_data["patient_count"]) + "\nSAVE DATE : " + str(save_data["save_date"])
load_slot.text = save_slot.text
#Loads save file from the selected load slot
func load_game(load_slot_number:int):
#CLearing balloon
clear_balloon()
#Hiding loading menus and masks
TransitionScreen.mask.visible = false
UI.get_node("UI/Menu").hide()
UI.get_node("UI/UpperContainer").hide()
UI.get_node("UI/Load").hide()
#Opening save file
var file = FileAccess.open("res://Saves/save_" + str(load_slot_number) + ".json", FileAccess.READ)
if file:
var json_string = file.get_as_text()
file.close()
var load_data = JSON.parse_string(json_string)
if typeof(load_data) == 27: #Checks if loaded data is a Dictionary
print(load_data)
Globals.day_count = load_data["day_count"]
Globals.patient_count = load_data["patient_count"]
Globals.diagnoses_quota = load_data["diagnoses_quota"]
Globals.daily_patient_limit = load_data["daily_patient_limit"]
Globals.patient_list = load_data["patient_list"]
Globals.patient_id = load_data["patient_id"]
Globals.patients_seen = load_data["patients_seen"]
else:
print("Failed to parse Loading Data.")
#Transitioning to loaded Save
var scenes_to_hide = [$TitleScreen, $Bedroom, $TextScreens, $TextScreens/Day, $ScreeningDesk.patient_controls, $ScreeningDesk.end_of_day_controls, $ScreeningDesk.patient_texture, $ScreeningDesk.panel_container, $ScreeningDesk.face_zoom] + $ScreeningDesk.margin_container.get_children()
var scenes_to_show = [$ScreeningDesk, $ScreeningDesk.alone_controls, UI.get_node("UI/UpperContainer")]
TransitionScreen.transition("big", scenes_to_hide, scenes_to_show)
await TransitionScreen.transition_finished
$ScreeningDesk.new_patient()
func _on_save_slot_pressed(save_slot):
save_game(save_slot)
func _on_load_slot_pressed(load_slot):
load_game(load_slot)
func _on_main_menu_pressed():
#Removing mask
TransitionScreen.mask.visible = false
#Clearing balloon
clear_balloon()
#Hiding menus
UI.get_node("UI/Menu").hide()
UI.get_node("UI/UpperContainer").hide()
#Going back to main menu
var scenes_to_hide = [$ScreeningDesk, $TextScreens, $TextScreens/Day]
var scenes_to_show = [$TitleScreen]
TransitionScreen.transition("big", scenes_to_hide, scenes_to_show)
await TransitionScreen.transition_finished
#Updates Save/Load Slots based on Existing Saves
func update_slots():
#Loops over the 4 save/load slots
for save_number in range(1, 5):
#Retrieves save and load slots
var save_slot_path = "UI/Save/MarginContainer/VBoxContainer/SaveSlot" + str(save_number)
var load_slot_path = "UI/Load/MarginContainer/VBoxContainer/LoadSlot" + str(save_number)
var save_slot = UI.get_node(save_slot_path)
var load_slot = UI.get_node(load_slot_path)
#Retrieves save path
var save_path = "res://Saves/save_" + str(save_number) + ".json"
if FileAccess.file_exists(save_path):
var file = FileAccess.open(save_path, FileAccess.READ) #Loads the save if it exists
var json_string = file.get_as_text()
file.close()
var load_data = JSON.parse_string(json_string)
if typeof(load_data) == 27: #Checks if loaded data is a Dictionary
#Updates save and load slots texts
print(load_data)
save_slot.text = "DAY " + str(load_data["day_count"]) + ", PATIENT " + str(load_data["patient_count"]) + "\nSAVE DATE : " + str(load_data["save_date"])
load_slot.text = save_slot.text
else:
print("Failed to parse Loading Data.")
#Starts a balloon dialogue
func start_balloon(balloon_type:String, patient_type:String, dialogue_resource: Resource, start_title: String):
#Clearing previous balloon
clear_balloon()
#Instantiating a custom balloon
var Balloon: Resource = load("res://Dialogues/balloon_" + balloon_type + ".tscn")
balloon = Balloon.instantiate()
get_tree().current_scene.add_child(balloon)
#Connects emotion signals if needed
match patient_type:
"patient":
DialogueManager.got_dialogue.connect($ScreeningDesk.patient._change_emotion)
DialogueManager.got_dialogue.connect($ScreeningDesk.computer._recording_text)
"supervisor":
DialogueManager.got_dialogue.connect($ScreeningDesk.supervisor._change_emotion)
#Applies text settings to the balloon
balloon.dialogue_label.seconds_per_step = UI.text_speed
#balloon.dialogue_line.time = UI.auto_speed
#Starts dialogue
balloon.start(dialogue_resource, start_title)
#Clearing balloon
func clear_balloon():
#Clearing Previous Balloon
if is_instance_valid(balloon):
balloon.queue_free()
#Disconnecting emotion signals
for function in [$ScreeningDesk.patient._change_emotion,
$ScreeningDesk.computer._recording_text,
$ScreeningDesk.supervisor._change_emotion]:
if DialogueManager.is_connected("got_dialogue", function):
DialogueManager.disconnect("got_dialogue", function)
#Changes text_speed value
func _on_text_value_changed():
if is_instance_valid(balloon):
balloon.dialogue_label.seconds_per_step = UI.text_speed
#Changes auto_speed value
func _on_auto_value_changed():
if is_instance_valid(balloon):
#balloon.dialogue_line.time = UI.auto_speed
pass
#Changes CharacterLabel color
func _on_character_label_color_change(color: Color):
var label = balloon.get_node("Balloon/Panel/Dialogue/VBoxContainer/CharacterLabel")
label.add_theme_color_override("default_color", color)
+1
View File
@@ -0,0 +1 @@
uid://c6kqjqj6cs4wa