diff --git a/assets/reactions/na2co3_p_cacl2.tres b/assets/reactions/na2co3_p_cacl2.tres index 0edd457..0ed45c5 100644 --- a/assets/reactions/na2co3_p_cacl2.tres +++ b/assets/reactions/na2co3_p_cacl2.tres @@ -1,4 +1,4 @@ -[gd_resource type="Resource" script_class="Reaction" load_steps=11 format=3 uid="uid://b4x586j255rh7"] +[gd_resource type="Resource" script_class="Reaction" format=3 uid="uid://b4x586j255rh7"] [ext_resource type="Script" uid="uid://bb8o8l6u6fiai" path="res://src/resources/reaction_substance.gd" id="1_q3co2"] [ext_resource type="Script" uid="uid://dwks86y6383p4" path="res://src/resources/reaction.gd" id="2_bwaxw"] diff --git a/assets/reactions/na2co3_p_hcl.tres b/assets/reactions/na2co3_p_hcl.tres new file mode 100644 index 0000000..8d14b89 --- /dev/null +++ b/assets/reactions/na2co3_p_hcl.tres @@ -0,0 +1,45 @@ +[gd_resource type="Resource" script_class="Reaction" format=3 uid="uid://bpkydu1iy7ps"] + +[ext_resource type="Script" uid="uid://bb8o8l6u6fiai" path="res://src/resources/reaction_substance.gd" id="1_lk0fm"] +[ext_resource type="Resource" uid="uid://df17c818irsju" path="res://assets/substances/Na2CO3.tres" id="2_xd3oy"] +[ext_resource type="Resource" uid="uid://bj3cdfwvgksee" path="res://assets/substances/HCl.tres" id="3_lk0fm"] +[ext_resource type="Resource" uid="uid://chdrv5i45chwe" path="res://assets/substances/NaCl.tres" id="5_x63nk"] +[ext_resource type="Resource" uid="uid://dp0e62nxlnaeg" path="res://assets/substances/H2O.tres" id="5_xd3oy"] +[ext_resource type="Resource" uid="uid://dk604b5skdxn1" path="res://assets/substances/CO2.tres" id="6_xd3oy"] +[ext_resource type="Script" uid="uid://dwks86y6383p4" path="res://src/resources/reaction.gd" id="6_yn22r"] + +[sub_resource type="Resource" id="Resource_qs4v7"] +script = ExtResource("1_lk0fm") +coefficient = 1 +substance = ExtResource("2_xd3oy") +metadata/_custom_type_script = "uid://bb8o8l6u6fiai" + +[sub_resource type="Resource" id="Resource_5wjtx"] +script = ExtResource("1_lk0fm") +coefficient = 2 +substance = ExtResource("3_lk0fm") +metadata/_custom_type_script = "uid://bb8o8l6u6fiai" + +[sub_resource type="Resource" id="Resource_i3fna"] +script = ExtResource("1_lk0fm") +coefficient = 2 +substance = ExtResource("5_x63nk") +metadata/_custom_type_script = "uid://bb8o8l6u6fiai" + +[sub_resource type="Resource" id="Resource_b2l6v"] +script = ExtResource("1_lk0fm") +coefficient = 1 +substance = ExtResource("5_xd3oy") +metadata/_custom_type_script = "uid://bb8o8l6u6fiai" + +[sub_resource type="Resource" id="Resource_nnkfn"] +script = ExtResource("1_lk0fm") +coefficient = 1 +substance = ExtResource("6_xd3oy") +metadata/_custom_type_script = "uid://bb8o8l6u6fiai" + +[resource] +script = ExtResource("6_yn22r") +input_substances = Array[ExtResource("1_lk0fm")]([SubResource("Resource_qs4v7"), SubResource("Resource_5wjtx")]) +output_substances = Array[ExtResource("1_lk0fm")]([SubResource("Resource_i3fna"), SubResource("Resource_b2l6v"), SubResource("Resource_nnkfn")]) +metadata/_custom_type_script = "uid://dwks86y6383p4" diff --git a/assets/substances/CO2.tres b/assets/substances/CO2.tres new file mode 100644 index 0000000..e4c7a32 --- /dev/null +++ b/assets/substances/CO2.tres @@ -0,0 +1,13 @@ +[gd_resource type="Resource" script_class="Substance" format=3 uid="uid://dk604b5skdxn1"] + +[ext_resource type="Script" uid="uid://b8q5buwgvppyh" path="res://src/resources/substance.gd" id="1_qyshc"] + +[resource] +script = ExtResource("1_qyshc") +formula = &"CO2" +scientific_name = &"Углекислый газ" +melting_point = -79.0 +boiling_point = -79.0 +prefer_scientific_name = true +is_solution = false +metadata/_custom_type_script = "uid://b8q5buwgvppyh" diff --git a/scenes/bubbles.gd b/scenes/bubbles.gd index 227b91f..d74ed11 100644 --- a/scenes/bubbles.gd +++ b/scenes/bubbles.gd @@ -2,17 +2,16 @@ extends GPUParticles3D @export var inventory: Inventory -@export var particles: GPUParticles3D var tween: Tween func _on_inventory_reacted_with_gasses(gasses: Array[RuntimeSubstanceData]) -> void: if tween: tween.kill() tween = create_tween() - particles.emitting = true + emitting = true tween.tween_interval(2.) tween.tween_callback(func(): - particles.emitting = false + emitting = false for gas in gasses: inventory.extract_substance(gas.substance.get_formula(),gas.amount) ) diff --git a/scenes/flask.tscn b/scenes/flask.tscn index d04cc86..f02ef14 100644 --- a/scenes/flask.tscn +++ b/scenes/flask.tscn @@ -76,17 +76,26 @@ bottom_radius = 0.772 radial_segments = 16 rings = 0 +[sub_resource type="Curve" id="Curve_tvmew"] +_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(0.8611111, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] +point_count = 3 + +[sub_resource type="CurveTexture" id="CurveTexture_aukgj"] +curve = SubResource("Curve_tvmew") + [sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_u7u8q"] emission_shape_scale = Vector3(0.755, 0.93, 0.755) emission_shape = 1 emission_sphere_radius = 1.0 gravity = Vector3(0, 1, 0) +alpha_curve = SubResource("CurveTexture_aukgj") collision_mode = 1 collision_friction = 0.0 collision_bounce = 0.0 [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_t5c10"] transparency = 1 +vertex_color_use_as_albedo = true albedo_texture = ExtResource("6_rqua0") billboard_mode = 1 @@ -127,16 +136,19 @@ script = ExtResource("3_0xufn") display_type = 1 [node name="GPUParticlesCollisionBox3D" type="GPUParticlesCollisionBox3D" parent="Flash" unique_id=330053589] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5932534, 0) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.593, 0) size = Vector3(2.7734375, 1.1738281, 3.2333984) -[node name="GPUParticles3D" type="GPUParticles3D" parent="Flash" unique_id=2054685714] +[node name="GPUParticles3D" type="GPUParticles3D" parent="Flash" unique_id=2054685714 node_paths=PackedStringArray("inventory")] emitting = false +amount = 16 lifetime = 3.0 +speed_scale = 3.0 local_coords = true process_material = SubResource("ParticleProcessMaterial_u7u8q") draw_pass_1 = SubResource("QuadMesh_iuc1c") script = ExtResource("7_wadb5") +inventory = NodePath("../../Inventory") [node name="Inventory" type="Node" parent="." unique_id=1748297338] unique_name_in_owner = true diff --git a/scenes/substance_jar.tscn b/scenes/substance_jar.tscn index 7f7a947..90f0dcb 100644 --- a/scenes/substance_jar.tscn +++ b/scenes/substance_jar.tscn @@ -50,10 +50,14 @@ offset_bottom = 40.0 [node name="ProgressBar" type="HSlider" parent="Interaction/HBoxContainer" unique_id=1037338095] layout_mode = 2 size_flags_horizontal = 3 +max_value = 10.0 +step = 0.5 allow_greater = true [node name="SpinBox" type="SpinBox" parent="Interaction/HBoxContainer" unique_id=194740698] layout_mode = 2 +max_value = 10.0 +step = 0.5 allow_greater = true suffix = "мл." diff --git a/scenes/ui.tscn b/scenes/ui.tscn index c02b4f5..4a6d282 100644 --- a/scenes/ui.tscn +++ b/scenes/ui.tscn @@ -27,8 +27,8 @@ grow_vertical = 2 [node name="TabBar" parent="HSplitContainer" unique_id=877427232 instance=ExtResource("1_p7vwb")] layout_mode = 2 -tab_count = 3 tab_2/title = "Завершить отчёт" +tab_3/title = "Очистить стол" [node name="InspectorPanel" type="PanelContainer" parent="HSplitContainer" unique_id=918152974] layout_mode = 2 diff --git a/src/inventory.gd b/src/inventory.gd index 5a95666..49c7de4 100644 --- a/src/inventory.gd +++ b/src/inventory.gd @@ -199,7 +199,7 @@ func find_gases() -> Array[RuntimeSubstanceData]: return gasses func find_odor() -> Array[RuntimeSubstanceData]: - var result = [] + var result: Array[RuntimeSubstanceData] = [] for key in inventory: if inventory[key].substance in [preload("res://assets/substances/CH3COOH.tres")]: result.push_back(inventory[key]) diff --git a/src/lab_runtime.gd b/src/lab_runtime.gd index 74c71bb..980820d 100644 --- a/src/lab_runtime.gd +++ b/src/lab_runtime.gd @@ -1,3 +1,4 @@ +@tool extends Node const LAB_PREFAB: PackedScene = preload("uid://c7r4rhgj3ucao") @@ -7,12 +8,18 @@ var current_lab: Labwork var anwsers: Array[int] var correctness: Array[bool] var tries: int +var debug_correct: bool + +@export_tool_button("Complete test") var complete_test = force_correct func questions_anwsered() -> bool: - return float(correctness.count(true))/len(correctness) >= 0.6 + return float(correctness.count(true))/len(correctness) >= 0.6 or debug_correct func test_failed() -> bool: - return float(correctness.count(true))/len(correctness) < 0.6 + return float(correctness.count(true))/len(correctness) < 0.6 and not debug_correct + +func force_correct() -> void: + debug_correct = true func save(): var path: String = OS.get_system_dir(OS.SYSTEM_DIR_DESKTOP) + "/" + current_lab.lab_name + "-" + Time.get_datetime_string_from_system() + ".txt" diff --git a/src/resources/substance.gd b/src/resources/substance.gd index 368e0b5..975a2c6 100644 --- a/src/resources/substance.gd +++ b/src/resources/substance.gd @@ -12,7 +12,7 @@ class_name Substance @export var color: Color @export var pHColor: Gradient @export var prefer_scientific_name: bool -@export var is_solution: bool +@export var is_solution: bool = true func get_formula() -> StringName: return scientific_name if prefer_scientific_name else formula diff --git a/src/substance_display.gd b/src/substance_display.gd index a9f3b60..85d5cb1 100644 --- a/src/substance_display.gd +++ b/src/substance_display.gd @@ -106,5 +106,5 @@ func update_material_unfiltered(substances: Array[RuntimeSubstanceData],capacity var solids = substances.filter(filter_solids) update_solid_material(solids) -func filter_liquids(sub: RuntimeSubstanceData): return sub.substance.melting_point < sub.temperature or sub.is_solution +func filter_liquids(sub: RuntimeSubstanceData): return sub.substance.melting_point < sub.temperature and sub.substance.boiling_point > sub.temperature or sub.is_solution func filter_solids(sub: RuntimeSubstanceData): return sub.substance.melting_point > sub.temperature and not sub.is_solution