This commit is contained in:
rendo 2026-02-18 10:44:36 +05:00
commit 309bbcac5e
12 changed files with 57 additions and 9 deletions

View file

@ -23,6 +23,7 @@ config/icon="res://icon.svg"
GuiSignalBus="*res://src/gui_signal_bus.gd" GuiSignalBus="*res://src/gui_signal_bus.gd"
ReactionRegistry="*res://src/reaction_registry.gd" ReactionRegistry="*res://src/reaction_registry.gd"
LabRuntime="*uid://b00hrs2a68cpp"
[global_group] [global_group]

9
scenes/lab_menu.tscn Normal file
View file

@ -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

View file

@ -3,7 +3,7 @@ extends Node
const dnd_button = preload("res://scenes/drag_and_drop.tscn") const dnd_button = preload("res://scenes/drag_and_drop.tscn")
func _ready() -> void: func _ready() -> void:
for tool in ReactionRegistry.current_lab.tools: for tool in LabRuntime.current_lab.tools:
var button = dnd_button.instantiate() var button = dnd_button.instantiate()
button.draggable = tool button.draggable = tool
button.text = tool.text button.text = tool.text

26
src/lab_runtime.gd Normal file
View file

@ -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)

1
src/lab_runtime.gd.uid Normal file
View file

@ -0,0 +1 @@
uid://b00hrs2a68cpp

View file

@ -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")] @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] var reactions: Array[Reaction]
func _ready() -> void: func _ready() -> void:

View file

@ -9,3 +9,4 @@ class_name Labwork
@export var tests: Array[LabTest] @export var tests: Array[LabTest]
@export var reagents: Array[Reagent] @export var reagents: Array[Reagent]
@export var tools: Array[Draggable] @export var tools: Array[Draggable]

View file

@ -8,6 +8,6 @@ func _on_tab_clicked(tab: int) -> void:
1: 1:
$Questions.visible = true $Questions.visible = true
2: 2:
pass LabRuntime.save()
3: 3:
GuiSignalBus.clear_table.emit() GuiSignalBus.clear_table.emit()

View file

@ -1,8 +1,12 @@
extends TextEdit extends TextEdit
class_name LabLogger
static var instance: LabLogger
func _ready() -> void: func _ready() -> void:
GuiSignalBus.log_pushed.connect(on_log_pushed) GuiSignalBus.log_pushed.connect(on_log_pushed)
instance = self
func on_log_pushed(log_data: String): func on_log_pushed(log_data: String):
text += "\n" + log_data text += "\n" + log_data

View file

@ -3,7 +3,7 @@ extends Control
var current: int = -1 var current: int = -1
func _ready() -> void: func _ready() -> void:
for question in ReactionRegistry.current_lab.tests: for question in LabRuntime.current_lab.tests:
var options = question.options.duplicate() var options = question.options.duplicate()
options.shuffle() options.shuffle()
var vbox = VBoxContainer.new() var vbox = VBoxContainer.new()
@ -11,11 +11,12 @@ func _ready() -> void:
description.text = question.question description.text = question.question
vbox.add_child(description) vbox.add_child(description)
vbox.visible = false vbox.visible = false
for option in options: for i in range(len(options)):
var button = Button.new() var button = Button.new()
button.text = option button.text = options[i]
vbox.add_child(button) vbox.add_child(button)
button.pressed.connect(next) button.pressed.connect(next)
button.pressed.connect(anwser.bind(i))
add_child(vbox) add_child(vbox)
next() next()
@ -28,3 +29,8 @@ func next() -> void:
if current < get_child_count() - 1: if current < get_child_count() - 1:
current += 1 current += 1
get_child(current).visible = true get_child(current).visible = true
else:
get_parent().visible = false
func anwser(option: int):
LabRuntime.anwsers.append(option)

View file

@ -3,7 +3,7 @@ extends Node
const dnd_button = preload("res://scenes/reactives_drag_and_drop.tscn") const dnd_button = preload("res://scenes/reactives_drag_and_drop.tscn")
func _ready() -> void: func _ready() -> void:
for reagent in ReactionRegistry.current_lab.reagents: for reagent in LabRuntime.current_lab.reagents:
var button = dnd_button.instantiate() var button = dnd_button.instantiate()
button.reagent = reagent button.reagent = reagent
get_parent().add_element.call_deferred(button) get_parent().add_element.call_deferred(button)

View file

@ -3,11 +3,11 @@ extends Node
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready() -> void: 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() var tab = preload("uid://ce4a3scprw3c7").instantiate()
tab.name = "Опыт " + str(i + 1) tab.name = "Опыт " + str(i + 1)
add_child(tab) 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: func _on_close_button_pressed() -> void: