154 lines
4.0 KiB
C#
154 lines
4.0 KiB
C#
using Godot;
|
|
using System.Linq;
|
|
using VirtualChemistry.Chemistry.Compounds.Implements;
|
|
using VirtualChemistry.Chemistry.Mixtures.Implements;
|
|
|
|
public partial class MainControlPanel : HBoxContainer
|
|
{
|
|
private HSlider EnvTemperature { get; set; }
|
|
private HSlider ContainerVolume { get; set; }
|
|
private HomogeneousMixture SelectedMixture { get; set; }
|
|
private Label Density { get; set; }
|
|
private Label Volume { get; set; }
|
|
private Label HeatConductivity { get; set; }
|
|
private Label Amount { get; set; }
|
|
private Label Temperature { get; set; }
|
|
private Label FreeVolume { get; set; }
|
|
private Label Stiffness { get; set; }
|
|
private Tree Compounds { get; set; }
|
|
|
|
public override void _Ready()
|
|
{
|
|
EnvTemperature = GetNode<HSlider>("V1/EnvTemperature");
|
|
ContainerVolume = GetNode<HSlider>("V1/ContainerVolume");
|
|
Density = GetNode<Label>("V2/HDensity/Density");
|
|
Volume = GetNode<Label>("V2/HVolume/Volume");
|
|
HeatConductivity = GetNode<Label>("V2/HHeatConductivity/HeatConductivity");
|
|
Amount = GetNode<Label>("V2/HAmount/Amount");
|
|
Temperature = GetNode<Label>("V2/HTemperature/Temperature");
|
|
FreeVolume = GetNode<Label>("V2/HFreeVolume/FreeVolume");
|
|
Stiffness = GetNode<Label>("V2/HStiffnesss/Stiffness");
|
|
Compounds = GetNode<Tree>("V3/Compounds");
|
|
|
|
GlobalScene.MainControlPanel = this;
|
|
}
|
|
|
|
public void Update(HomogeneousMixture mixture)
|
|
{
|
|
SelectedMixture = mixture;
|
|
Update();
|
|
}
|
|
|
|
public void Update()
|
|
{
|
|
if (SelectedMixture == HomogeneousMixture.Null)
|
|
return;
|
|
Density.Text = $"{SelectedMixture.Density}";
|
|
Volume.Text = $"{SelectedMixture.Volume}";
|
|
HeatConductivity.Text = $"{SelectedMixture.HeatConductivity.Get}";
|
|
Amount.Text = $"{SelectedMixture.Amount}";
|
|
Temperature.Text = $"{SelectedMixture.Temperature}";
|
|
FreeVolume.Text = $"{SelectedMixture.FreeVolume}";
|
|
Stiffness.Text = $"{SelectedMixture.CompressionStiffness}";
|
|
BuildTree();
|
|
}
|
|
|
|
public void BuildAllTree()
|
|
{
|
|
Compounds.Clear();
|
|
TreeItem root = Compounds.CreateItem();
|
|
root.SetText(0, $"Mixtures({GlobalScene.Flask.Content.Layers.Count}): ");
|
|
root.SetMeta("isoExp", GlobalScene.Flask.Content.Dump());
|
|
int i = 1;
|
|
foreach (HomogeneousMixture h in GlobalScene.Flask.Content.LayerOrder)
|
|
{
|
|
TreeItem sRoot = Compounds.CreateItem(root);
|
|
sRoot.SetText(0,$"Mixture{i} Amt{h.Amount}");
|
|
sRoot.SetMeta("isoExp", h.Dump());
|
|
foreach (var group in h.Compounds.GroupBy(x => x.Expression))
|
|
{
|
|
TreeItem t = Compounds.CreateItem(root);
|
|
t.SetText(0, group.Key);
|
|
t.SetSelectable(0, false);
|
|
int j = 1;
|
|
foreach (Compound c in group)
|
|
{
|
|
TreeItem x = Compounds.CreateItem(t);
|
|
x.SetText(0, $"{j}th isomer");
|
|
x.SetMeta("isoExp", c.IsoRepresentation);
|
|
j++;
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void BuildTree()
|
|
{
|
|
Compounds.Clear();
|
|
var groups = SelectedMixture.Compounds.GroupBy(x => x.Expression);
|
|
TreeItem root = Compounds.CreateItem(null);
|
|
root.SetText(0, "Compounds: ");
|
|
foreach (var group in groups)
|
|
{
|
|
TreeItem t = Compounds.CreateItem(root);
|
|
t.SetText(0, group.Key);
|
|
t.SetSelectable(0, false);
|
|
int i = 1;
|
|
foreach (Compound c in group)
|
|
{
|
|
TreeItem x = Compounds.CreateItem(t);
|
|
x.SetText(0, $"{i}th isomer");
|
|
x.SetMeta("isoExp", c.IsoRepresentation);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void IsomerSelectedHandler()
|
|
{
|
|
GlobalScene.Demo.FullRepr.Text = Compounds
|
|
.GetSelected()
|
|
.GetMeta("isoExp")
|
|
.AsString();
|
|
}
|
|
|
|
private void OneStep()
|
|
{
|
|
GlobalScene.Flask.Content.OneStep();
|
|
GlobalScene.Flask.Update();
|
|
}
|
|
|
|
private void RemoveTop()
|
|
{
|
|
GlobalScene.Flask.Content.RemoveTop();
|
|
GlobalScene.Flask.Update();
|
|
}
|
|
|
|
private void RemoveBottom()
|
|
{
|
|
GlobalScene.Flask.Content.RemoveBottom();
|
|
GlobalScene.Flask.Update();
|
|
}
|
|
|
|
private void SetTemperature(float temp)
|
|
{
|
|
GlobalScene.Flask.EnvironmentTemperature = temp;
|
|
}
|
|
|
|
private void SetVolume(float vol)
|
|
{
|
|
GlobalScene.Flask.ContainerVolume = vol;
|
|
GlobalScene.Flask.Update();
|
|
}
|
|
|
|
private void SetElasticContainer(bool on)
|
|
{
|
|
GlobalScene.ElasticContainer = on;
|
|
if (on)
|
|
ContainerVolume.Editable = false;
|
|
else
|
|
ContainerVolume.Editable = true;
|
|
|
|
}
|
|
}
|