This commit is contained in:
Rendo 2026-01-16 00:37:49 +05:00
commit 6fcca904a1
11 changed files with 92 additions and 9 deletions

View file

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

View file

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

View file

@ -4,7 +4,7 @@
[resource]
script = ExtResource("1_iebgm")
formula = &"CaCl"
formula = &"CaCl2"
scientific_name = &"Хлорид кальция"
melting_point = 772.0
boiling_point = 1935.0

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -161,4 +161,3 @@ func check_for_reactions() -> void:
check_for_reactions()
recalculate_temperature()
inventory_changed.emit(inventory.values())
print(inventory)

View file

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

View file

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