From 309bbcac5e9ef166756272739266330490e4135a Mon Sep 17 00:00:00 2001 From: rendo Date: Wed, 18 Feb 2026 10:44:36 +0500 Subject: [PATCH] Save --- project.godot | 1 + scenes/lab_menu.tscn | 9 +++++++++ scenes/tool_generator.gd | 2 +- src/lab_runtime.gd | 26 ++++++++++++++++++++++++++ src/lab_runtime.gd.uid | 1 + src/reaction_registry.gd | 2 +- src/resources/lab/lab_work.gd | 1 + src/ui/lab_tabs.gd | 2 +- src/ui/logger.gd | 4 ++++ src/ui/questions_generator.gd | 12 +++++++++--- src/ui/reagents_gen.gd | 2 +- src/ui/worktabs.gd | 4 ++-- 12 files changed, 57 insertions(+), 9 deletions(-) create mode 100644 scenes/lab_menu.tscn create mode 100644 src/lab_runtime.gd create mode 100644 src/lab_runtime.gd.uid diff --git a/project.godot b/project.godot index 4bda6ad..84308c8 100644 --- a/project.godot +++ b/project.godot @@ -23,6 +23,7 @@ config/icon="res://icon.svg" GuiSignalBus="*res://src/gui_signal_bus.gd" ReactionRegistry="*res://src/reaction_registry.gd" +LabRuntime="*uid://b00hrs2a68cpp" [global_group] diff --git a/scenes/lab_menu.tscn b/scenes/lab_menu.tscn new file mode 100644 index 0000000..304744d --- /dev/null +++ b/scenes/lab_menu.tscn @@ -0,0 +1,9 @@ +[gd_scene format=3 uid="uid://c2ciwyjf7au6l"] + +[node name="LabMenu" type="Control" unique_id=198999369] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 diff --git a/scenes/tool_generator.gd b/scenes/tool_generator.gd index 4851adf..4d83a08 100644 --- a/scenes/tool_generator.gd +++ b/scenes/tool_generator.gd @@ -3,7 +3,7 @@ extends Node const dnd_button = preload("res://scenes/drag_and_drop.tscn") func _ready() -> void: - for tool in ReactionRegistry.current_lab.tools: + for tool in LabRuntime.current_lab.tools: var button = dnd_button.instantiate() button.draggable = tool button.text = tool.text diff --git a/src/lab_runtime.gd b/src/lab_runtime.gd new file mode 100644 index 0000000..16f3579 --- /dev/null +++ b/src/lab_runtime.gd @@ -0,0 +1,26 @@ +extends Node + +var current_lab: Labwork = preload("res://labs/lab-electrolyte.tres") +var anwsers: Array[int] + +func save(): + var path: String = OS.get_system_dir(OS.SYSTEM_DIR_DESKTOP) + "/" + current_lab.lab_name + "-" + Time.get_datetime_string_from_system() + ".txt" + var file = FileAccess.open(path,FileAccess.WRITE) + file.store_line("Ответы:") + for i in range(len(current_lab.tests)): + file.store_string(("№"+str(i)).lpad(10)) + file.store_line("") + for i in range(len(current_lab.tests)): + if len(anwsers) <= i: + file.store_string("Не дан".lpad(10)) + else: + file.store_string(str(anwsers[i]).lpad(10)) + file.store_line("") + for i in range(len(current_lab.tests)): + if len(anwsers) <= i: + file.store_string("-".lpad(10)) + else: + file.store_string(("+" if anwsers[i] == current_lab.tests[i].correct_anwser else "-").lpad(10)) + file.store_line("") + file.store_line("Ход работы:") + file.store_string(LabLogger.instance.text) diff --git a/src/lab_runtime.gd.uid b/src/lab_runtime.gd.uid new file mode 100644 index 0000000..e9b98a2 --- /dev/null +++ b/src/lab_runtime.gd.uid @@ -0,0 +1 @@ +uid://b00hrs2a68cpp diff --git a/src/reaction_registry.gd b/src/reaction_registry.gd index dd2fc65..6325d38 100644 --- a/src/reaction_registry.gd +++ b/src/reaction_registry.gd @@ -4,7 +4,7 @@ const REACTIONS_DIRECTORY = "res://assets/reactions/" @export var water_soluable: Array[Substance] = [preload("res://assets/substances/AgNO3.tres"),preload("res://assets/substances/CaCl.tres"),preload("res://assets/substances/CaCO3.tres"),preload("res://assets/substances/CH3COONa.tres"),preload("res://assets/substances/CuSO4.tres"),preload("res://assets/substances/FeSO4.tres"),preload("res://assets/substances/KCl.tres"),preload("res://assets/substances/KI.tres"),preload("res://assets/substances/KNO3.tres"),preload("res://assets/substances/LeadNitrate.tres"),preload("res://assets/substances/MethylOrange.tres"),preload("res://assets/substances/Na2CO3.tres"),preload("res://assets/substances/Na2S.tres"),preload("res://assets/substances/Na2SO4.tres"),preload("res://assets/substances/NaCl.tres"),preload("res://assets/substances/NaNO3.tres"),preload("res://assets/substances/NaOH.tres"),preload("res://assets/substances/NH4CL.tres"),preload("res://assets/substances/NH4OH.tres"),preload("res://assets/substances/Phenolphtalein.tres")] -var current_lab: Labwork = preload("res://labs/lab-electrolyte.tres") +var current_lab: Labwork var reactions: Array[Reaction] func _ready() -> void: diff --git a/src/resources/lab/lab_work.gd b/src/resources/lab/lab_work.gd index 846b945..f6948ae 100644 --- a/src/resources/lab/lab_work.gd +++ b/src/resources/lab/lab_work.gd @@ -9,3 +9,4 @@ class_name Labwork @export var tests: Array[LabTest] @export var reagents: Array[Reagent] @export var tools: Array[Draggable] + diff --git a/src/ui/lab_tabs.gd b/src/ui/lab_tabs.gd index 2fb6531..79a432c 100644 --- a/src/ui/lab_tabs.gd +++ b/src/ui/lab_tabs.gd @@ -8,6 +8,6 @@ func _on_tab_clicked(tab: int) -> void: 1: $Questions.visible = true 2: - pass + LabRuntime.save() 3: GuiSignalBus.clear_table.emit() diff --git a/src/ui/logger.gd b/src/ui/logger.gd index 1bdb55e..a482932 100644 --- a/src/ui/logger.gd +++ b/src/ui/logger.gd @@ -1,8 +1,12 @@ extends TextEdit +class_name LabLogger + +static var instance: LabLogger func _ready() -> void: GuiSignalBus.log_pushed.connect(on_log_pushed) + instance = self func on_log_pushed(log_data: String): text += "\n" + log_data diff --git a/src/ui/questions_generator.gd b/src/ui/questions_generator.gd index f6c1c2c..5b031c0 100644 --- a/src/ui/questions_generator.gd +++ b/src/ui/questions_generator.gd @@ -3,7 +3,7 @@ extends Control var current: int = -1 func _ready() -> void: - for question in ReactionRegistry.current_lab.tests: + for question in LabRuntime.current_lab.tests: var options = question.options.duplicate() options.shuffle() var vbox = VBoxContainer.new() @@ -11,11 +11,12 @@ func _ready() -> void: description.text = question.question vbox.add_child(description) vbox.visible = false - for option in options: + for i in range(len(options)): var button = Button.new() - button.text = option + button.text = options[i] vbox.add_child(button) button.pressed.connect(next) + button.pressed.connect(anwser.bind(i)) add_child(vbox) next() @@ -28,3 +29,8 @@ func next() -> void: if current < get_child_count() - 1: current += 1 get_child(current).visible = true + else: + get_parent().visible = false + +func anwser(option: int): + LabRuntime.anwsers.append(option) diff --git a/src/ui/reagents_gen.gd b/src/ui/reagents_gen.gd index beb67d5..e0fc96d 100644 --- a/src/ui/reagents_gen.gd +++ b/src/ui/reagents_gen.gd @@ -3,7 +3,7 @@ extends Node const dnd_button = preload("res://scenes/reactives_drag_and_drop.tscn") func _ready() -> void: - for reagent in ReactionRegistry.current_lab.reagents: + for reagent in LabRuntime.current_lab.reagents: var button = dnd_button.instantiate() button.reagent = reagent get_parent().add_element.call_deferred(button) diff --git a/src/ui/worktabs.gd b/src/ui/worktabs.gd index 1b4312c..c195131 100644 --- a/src/ui/worktabs.gd +++ b/src/ui/worktabs.gd @@ -3,11 +3,11 @@ extends Node # Called when the node enters the scene tree for the first time. func _ready() -> void: - for i in range(len(ReactionRegistry.current_lab.experiments)): + for i in range(len(LabRuntime.current_lab.experiments)): var tab = preload("uid://ce4a3scprw3c7").instantiate() tab.name = "Опыт " + str(i + 1) add_child(tab) - tab.get_node("Text").text = ReactionRegistry.current_lab.experiments[i].description + tab.get_node("Text").text = LabRuntime.current_lab.experiments[i].description func _on_close_button_pressed() -> void: