From 6fcca904a1771ee745f029ea3974f58e23c4315f Mon Sep 17 00:00:00 2001 From: Rendo Date: Fri, 16 Jan 2026 00:37:49 +0500 Subject: [PATCH] pH --- assets/reactions/nh4cl_p_naoh.tres | 45 +++++++++++++++++++++++++++ assets/substances/CH3COOH.tres | 1 + assets/substances/CaCl.tres | 2 +- assets/substances/HCl.tres | 1 + assets/substances/MethylOrange.tres | 7 ++++- assets/substances/NH3.tres | 13 ++++++++ assets/substances/NaOH.tres | 2 ++ assets/substances/Phenolphtalein.tres | 7 ++++- src/inventory.gd | 1 - src/resources/substance.gd | 2 ++ src/substance_display.gd | 20 +++++++++--- 11 files changed, 92 insertions(+), 9 deletions(-) create mode 100644 assets/reactions/nh4cl_p_naoh.tres create mode 100644 assets/substances/NH3.tres diff --git a/assets/reactions/nh4cl_p_naoh.tres b/assets/reactions/nh4cl_p_naoh.tres new file mode 100644 index 0000000..eb025b3 --- /dev/null +++ b/assets/reactions/nh4cl_p_naoh.tres @@ -0,0 +1,45 @@ +[gd_resource type="Resource" script_class="Reaction" load_steps=13 format=3 uid="uid://ujxlydwg6ssk"] + +[ext_resource type="Script" uid="uid://bb8o8l6u6fiai" path="res://src/resources/reaction_substance.gd" id="1_en87o"] +[ext_resource type="Resource" uid="uid://30ym4xb0uu3y" path="res://assets/substances/NaOH.tres" id="2_hfcrl"] +[ext_resource type="Script" uid="uid://dwks86y6383p4" path="res://src/resources/reaction.gd" id="2_x4xxd"] +[ext_resource type="Resource" uid="uid://b0pdv8e1ybr8h" path="res://assets/substances/NH4CL.tres" id="3_wvwtp"] +[ext_resource type="Resource" uid="uid://dp0e62nxlnaeg" path="res://assets/substances/H2O.tres" id="4_g78ug"] +[ext_resource type="Resource" uid="uid://chdrv5i45chwe" path="res://assets/substances/NaCl.tres" id="5_uu17e"] +[ext_resource type="Resource" uid="uid://cmmeaprxcpfvc" path="res://assets/substances/NH3.tres" id="6_wvwtp"] + +[sub_resource type="Resource" id="Resource_ldouh"] +script = ExtResource("1_en87o") +coefficient = 1 +substance = ExtResource("2_hfcrl") +metadata/_custom_type_script = "uid://bb8o8l6u6fiai" + +[sub_resource type="Resource" id="Resource_eih03"] +script = ExtResource("1_en87o") +coefficient = 1 +substance = ExtResource("3_wvwtp") +metadata/_custom_type_script = "uid://bb8o8l6u6fiai" + +[sub_resource type="Resource" id="Resource_wv1d1"] +script = ExtResource("1_en87o") +coefficient = 1 +substance = ExtResource("4_g78ug") +metadata/_custom_type_script = "uid://bb8o8l6u6fiai" + +[sub_resource type="Resource" id="Resource_504df"] +script = ExtResource("1_en87o") +coefficient = 1 +substance = ExtResource("5_uu17e") +metadata/_custom_type_script = "uid://bb8o8l6u6fiai" + +[sub_resource type="Resource" id="Resource_koqi2"] +script = ExtResource("1_en87o") +coefficient = 1 +substance = ExtResource("6_wvwtp") +metadata/_custom_type_script = "uid://bb8o8l6u6fiai" + +[resource] +script = ExtResource("2_x4xxd") +input_substances = Array[ExtResource("1_en87o")]([SubResource("Resource_ldouh"), SubResource("Resource_eih03")]) +output_substances = Array[ExtResource("1_en87o")]([SubResource("Resource_wv1d1"), SubResource("Resource_504df"), SubResource("Resource_koqi2")]) +metadata/_custom_type_script = "uid://dwks86y6383p4" diff --git a/assets/substances/CH3COOH.tres b/assets/substances/CH3COOH.tres index 18602e7..c5e87d1 100644 --- a/assets/substances/CH3COOH.tres +++ b/assets/substances/CH3COOH.tres @@ -8,5 +8,6 @@ formula = &"CH_3COOH" scientific_name = &"Уксусная кислота" melting_point = 16.75 boiling_point = 118.1 +pH = 2.4 color = Color(1, 1, 1, 0.3372549) metadata/_custom_type_script = "uid://b8q5buwgvppyh" diff --git a/assets/substances/CaCl.tres b/assets/substances/CaCl.tres index c1be936..a189def 100644 --- a/assets/substances/CaCl.tres +++ b/assets/substances/CaCl.tres @@ -4,7 +4,7 @@ [resource] script = ExtResource("1_iebgm") -formula = &"CaCl" +formula = &"CaCl2" scientific_name = &"Хлорид кальция" melting_point = 772.0 boiling_point = 1935.0 diff --git a/assets/substances/HCl.tres b/assets/substances/HCl.tres index de96954..87f184f 100644 --- a/assets/substances/HCl.tres +++ b/assets/substances/HCl.tres @@ -8,5 +8,6 @@ formula = &"HCl" scientific_name = &"Соляная кислота" melting_point = -30.0 boiling_point = 48.0 +pH = -1.0 color = Color(1, 1, 1, 1) metadata/_custom_type_script = "uid://b8q5buwgvppyh" diff --git a/assets/substances/MethylOrange.tres b/assets/substances/MethylOrange.tres index 85cbf9a..30982d9 100644 --- a/assets/substances/MethylOrange.tres +++ b/assets/substances/MethylOrange.tres @@ -1,7 +1,11 @@ -[gd_resource type="Resource" script_class="Substance" load_steps=2 format=3 uid="uid://bnywd2asdr3eo"] +[gd_resource type="Resource" script_class="Substance" load_steps=3 format=3 uid="uid://bnywd2asdr3eo"] [ext_resource type="Script" uid="uid://b8q5buwgvppyh" path="res://src/resources/substance.gd" id="1_iruga"] +[sub_resource type="Gradient" id="Gradient_iruga"] +offsets = PackedFloat32Array(0.43, 0.5, 0.57) +colors = PackedColorArray(1, 0, 0, 1, 1, 0.26666668, 0, 1, 1, 0.7, 0, 1) + [resource] script = ExtResource("1_iruga") formula = &"C_14H_14N_3O_3SNa" @@ -9,6 +13,7 @@ scientific_name = &"Метиловый оранжевый" melting_point = 300.0 boiling_point = 520.0 color = Color(1, 0.26666665, 0, 1) +pHColor = SubResource("Gradient_iruga") prefer_scientific_name = true is_solution = true metadata/_custom_type_script = "uid://b8q5buwgvppyh" diff --git a/assets/substances/NH3.tres b/assets/substances/NH3.tres new file mode 100644 index 0000000..dedc346 --- /dev/null +++ b/assets/substances/NH3.tres @@ -0,0 +1,13 @@ +[gd_resource type="Resource" script_class="Substance" load_steps=2 format=3 uid="uid://cmmeaprxcpfvc"] + +[ext_resource type="Script" uid="uid://b8q5buwgvppyh" path="res://src/resources/substance.gd" id="1_0e0io"] + +[resource] +script = ExtResource("1_0e0io") +formula = &"NH3" +scientific_name = &"Аммиак" +melting_point = -77.73 +boiling_point = -33.34 +color = Color(1, 1, 1, 1) +prefer_scientific_name = true +metadata/_custom_type_script = "uid://b8q5buwgvppyh" diff --git a/assets/substances/NaOH.tres b/assets/substances/NaOH.tres index 6d9a26a..8319baf 100644 --- a/assets/substances/NaOH.tres +++ b/assets/substances/NaOH.tres @@ -8,5 +8,7 @@ formula = &"NaOH" scientific_name = &"Гидроксид натрия" melting_point = 323.0 boiling_point = 1403.0 +pH = 13.0 color = Color(1, 1, 1, 1) +is_solution = true metadata/_custom_type_script = "uid://b8q5buwgvppyh" diff --git a/assets/substances/Phenolphtalein.tres b/assets/substances/Phenolphtalein.tres index 6d71db1..47c5218 100644 --- a/assets/substances/Phenolphtalein.tres +++ b/assets/substances/Phenolphtalein.tres @@ -1,7 +1,11 @@ -[gd_resource type="Resource" script_class="Substance" load_steps=2 format=3 uid="uid://brih4gryc1acx"] +[gd_resource type="Resource" script_class="Substance" load_steps=3 format=3 uid="uid://brih4gryc1acx"] [ext_resource type="Script" uid="uid://b8q5buwgvppyh" path="res://src/resources/substance.gd" id="1_td2hf"] +[sub_resource type="Gradient" id="Gradient_td2hf"] +offsets = PackedFloat32Array(0.4198718, 0.5, 0.99) +colors = PackedColorArray(1, 0.20999998, 0.96050024, 1, 1, 1, 1, 0.43529412, 1, 1, 1, 0.43529412) + [resource] script = ExtResource("1_td2hf") formula = &"C_20H_14O_4" @@ -9,6 +13,7 @@ scientific_name = &"Фенолфталеин" melting_point = 278.0 boiling_point = 557.8 color = Color(1, 1, 1, 0.43529412) +pHColor = SubResource("Gradient_td2hf") prefer_scientific_name = true is_solution = true metadata/_custom_type_script = "uid://b8q5buwgvppyh" diff --git a/src/inventory.gd b/src/inventory.gd index c9087dc..b0c5ef0 100644 --- a/src/inventory.gd +++ b/src/inventory.gd @@ -161,4 +161,3 @@ func check_for_reactions() -> void: check_for_reactions() recalculate_temperature() inventory_changed.emit(inventory.values()) - print(inventory) diff --git a/src/resources/substance.gd b/src/resources/substance.gd index f62a23b..3b79e47 100644 --- a/src/resources/substance.gd +++ b/src/resources/substance.gd @@ -7,7 +7,9 @@ class_name Substance @export var melting_point: float @export var boiling_point: float @export var liquid_transparency: float = 0.5 +@export var pH: float = 7.0 @export var color: Color +@export var pHColor: Gradient @export var prefer_scientific_name: bool @export var is_solution: bool diff --git a/src/substance_display.gd b/src/substance_display.gd index dfbab0c..38a9376 100644 --- a/src/substance_display.gd +++ b/src/substance_display.gd @@ -21,17 +21,27 @@ func update_material(substances: Array[RuntimeSubstanceData]) -> void: total_weight += sub.amount var alpha: float = 0 - var color: Color = Color.WHITE + var pH: float = 0 + var color: Color = Color(0,0,0,0) - for sub in substances: + for sub: RuntimeSubstanceData in substances: + var weight: float = sub.amount/total_weight + pH += sub.substance.pH * weight + + for sub: RuntimeSubstanceData in substances: + var weight: float = sub.amount/total_weight if display_type == DisplayType.Fluid: - alpha += sub.substance.liquid_transparency - color = color.lerp(sub.substance.color,sub.amount/total_weight - ) + alpha += sub.substance.liquid_transparency * weight + if sub.substance.pHColor != null: + color += sub.substance.pHColor.sample(pH/14.0) * weight + else: + color += sub.substance.color * weight + if display_type == DisplayType.Fluid: alpha /= len(substances) color.a = alpha + mat.albedo_color = color func update_material_unfiltered(substances: Array[RuntimeSubstanceData]):