Construct Compound

This commit is contained in:
h z
2024-06-22 02:28:37 +08:00
parent 5a5bc2d556
commit d0d90501a5
5 changed files with 34 additions and 31 deletions

View File

@@ -10,11 +10,10 @@ public partial class Bottle : MenuButton, IChemicalContainer
private HeterogeneousMixture HeterogeneousMixture { get; set; } private HeterogeneousMixture HeterogeneousMixture { get; set; }
public double Volume() => ContainerVolume; public double Volume() => ContainerVolume;
public HeterogeneousMixture Content { get; set; } public HeterogeneousMixture Content { get; set; } = HeterogeneousMixture.Null;
public double EnvironmentPressure { get; set; } public double EnvironmentPressure { get; set; }
public double EnvironmentTemperature { get; set; } public double EnvironmentTemperature { get; set; }
public HeterogeneousMixture ChemicalContent { get; set; } = HeterogeneousMixture.Null; public HomogeneousMixture MainComponent => Content.Layers
public HomogeneousMixture MainComponent => ChemicalContent.Layers
.DefaultIfEmpty(HomogeneousMixture.Null) .DefaultIfEmpty(HomogeneousMixture.Null)
.MaxBy(x => x.Amount); .MaxBy(x => x.Amount);
public Compound MainCompound => MainComponent.Compounds public Compound MainCompound => MainComponent.Compounds
@@ -23,12 +22,24 @@ public partial class Bottle : MenuButton, IChemicalContainer
private const string Empty = "Empty"; private const string Empty = "Empty";
private string PotionName => $"Main: {(MainCompound == Compound.Null ? Empty : MainCompound.Expression)}"; private string PotionName => $"Main: {(MainCompound == Compound.Null ? Empty : MainCompound.Expression)}";
private string PotionAmount => $"Amount: {(MainCompound == Compound.Null ? 0d : ChemicalContent.Amount)}"; private string PotionAmount => $"Amount: {(MainCompound == Compound.Null ? 0d : Content.Amount)}";
public Sprite2D ContentTexture { get; set; } public Sprite2D ContentTexture { get; set; }
private void BuildMenu() public void BuildMenu()
{ {
if (Content == HeterogeneousMixture.Null)
ContentTexture.Modulate = Color.Color8(0, 0, 0, 0);
else
{
ContentTexture.Modulate = Color.Color8(
MainComponent.ColorRed,
MainComponent.ColorGreen,
MainComponent.ColorBlue,
MainComponent.ColorTransparent
);
}
PopupMenu menu = GetPopup(); PopupMenu menu = GetPopup();
menu.Clear(); menu.Clear();
foreach (var w in menu.GetSignalConnectionList(PopupMenu.SignalName.IdPressed)) foreach (var w in menu.GetSignalConnectionList(PopupMenu.SignalName.IdPressed))
@@ -55,8 +66,8 @@ public partial class Bottle : MenuButton, IChemicalContainer
GlobalScene.MainScene.SwitchToConstructor(); GlobalScene.MainScene.SwitchToConstructor();
return; return;
case 3: case 3:
ChemicalContent = GlobalScene.Flask.Content; Content = GlobalScene.Flask.Content;
ChemicalContent.Container = this; Content.Container = this;
GlobalScene.Flask.Content = HeterogeneousMixture.Null; GlobalScene.Flask.Content = HeterogeneousMixture.Null;
GlobalScene.Flask.Update(); GlobalScene.Flask.Update();
return; return;
@@ -71,17 +82,6 @@ public partial class Bottle : MenuButton, IChemicalContainer
public override void _Ready() public override void _Ready()
{ {
ContentTexture = GetNode<Sprite2D>("Content"); ContentTexture = GetNode<Sprite2D>("Content");
if (ChemicalContent == HeterogeneousMixture.Null)
ContentTexture.Modulate = new Color(0, 0, 0, 0);
else
{
ContentTexture.Modulate = new Color(
MainComponent.ColorRed,
MainComponent.ColorGreen,
MainComponent.ColorBlue,
MainComponent.ColorTransparent
);
}
BuildMenu(); BuildMenu();
} }

View File

@@ -49,11 +49,12 @@ public partial class CompoundConstructor : Panel
BaseAtom a = AtomResolver.Resolve(idx); BaseAtom a = AtomResolver.Resolve(idx);
Compound c = a.GrabCompound; Compound c = a.GrabCompound;
c.Amount = 1; c.Amount = 1;
a.Compound = c;
Atom at = ResourceLoader.Load<PackedScene>("res://Scenes/Atom.tscn").Instantiate<Atom>(); Atom at = ResourceLoader.Load<PackedScene>("res://Scenes/Atom.tscn").Instantiate<Atom>();
at.BaseAtom = a; at.BaseAtom = a;
AddChild(at); AddChild(at);
at.Position = new(500, 500); at.Position = new(500, 500);
HomogeneousMixture.AddCompound(c); HomogeneousMixture.AddCompound(c, true, true);
Atoms.Add(at); Atoms.Add(at);
} }
@@ -112,6 +113,8 @@ public partial class CompoundConstructor : Panel
{ {
HeterogeneousMixture.Container = GlobalScene.Demo.SelectedBottle; HeterogeneousMixture.Container = GlobalScene.Demo.SelectedBottle;
GlobalScene.Demo.SelectedBottle.Content = HeterogeneousMixture; GlobalScene.Demo.SelectedBottle.Content = HeterogeneousMixture;
GlobalScene.Demo.SelectedBottle.BuildMenu();
Clear(); Clear();
} }
@@ -128,7 +131,8 @@ public partial class CompoundConstructor : Panel
foreach (Atom atom in Atoms) foreach (Atom atom in Atoms)
{ {
RemoveChild(atom); RemoveChild(atom);
if (!BondMap.ContainsKey(atom))
continue;
foreach (Bond bond in BondMap[atom]) foreach (Bond bond in BondMap[atom])
{ {
if (!removedBonds.Contains(bond)) if (!removedBonds.Contains(bond))
@@ -140,6 +144,7 @@ public partial class CompoundConstructor : Panel
Atoms = new(); Atoms = new();
BondMap = new(); BondMap = new();
HeterogeneousMixture = new HeterogeneousMixture(); HeterogeneousMixture = new HeterogeneousMixture();
HomogeneousMixture = HeterogeneousMixture.AddLayer();
} }
private void ForceClear() => Clear(false); private void ForceClear() => Clear(false);

View File

@@ -36,8 +36,6 @@ text = "Clear"
layout_mode = 2 layout_mode = 2
text = "Back" text = "Back"
[node name="MovingLayer" type="CanvasLayer" parent="."]
[connection signal="pressed" from="ControlLayer/Controller/BuildMixture" to="." method="Build"] [connection signal="pressed" from="ControlLayer/Controller/BuildMixture" to="." method="Build"]
[connection signal="pressed" from="ControlLayer/Controller/Clear" to="." method="ForceClear"] [connection signal="pressed" from="ControlLayer/Controller/Clear" to="." method="ForceClear"]
[connection signal="pressed" from="ControlLayer/Controller/Back" to="." method="Back"] [connection signal="pressed" from="ControlLayer/Controller/Back" to="." method="Back"]

View File

@@ -10,7 +10,7 @@ public partial class StringLoader : Window
// Called when the node enters the scene tree for the first time. // Called when the node enters the scene tree for the first time.
public override void _Ready() public override void _Ready()
{ {
Input = GetNode<TextEdit>("Input"); Input = GetNode<TextEdit>("V1/Input");
GlobalScene.StringLoader = this; GlobalScene.StringLoader = this;
} }

View File

@@ -6,7 +6,7 @@
size = Vector2i(500, 250) size = Vector2i(500, 250)
script = ExtResource("1_qoxxp") script = ExtResource("1_qoxxp")
[node name="VBoxContainer" type="VBoxContainer" parent="."] [node name="V1" type="VBoxContainer" parent="."]
anchors_preset = 8 anchors_preset = 8
anchor_left = 0.5 anchor_left = 0.5
anchor_top = 0.5 anchor_top = 0.5
@@ -19,25 +19,25 @@ offset_bottom = 37.5
grow_horizontal = 2 grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
[node name="Label" type="Label" parent="VBoxContainer"] [node name="Label" type="Label" parent="V1"]
layout_mode = 2 layout_mode = 2
text = "Expression:" text = "Expression:"
[node name="Input" type="TextEdit" parent="VBoxContainer"] [node name="Input" type="TextEdit" parent="V1"]
custom_minimum_size = Vector2(450, 40) custom_minimum_size = Vector2(450, 40)
layout_mode = 2 layout_mode = 2
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] [node name="HBoxContainer" type="HBoxContainer" parent="V1"]
layout_mode = 2 layout_mode = 2
alignment = 1 alignment = 1
[node name="Load" type="Button" parent="VBoxContainer/HBoxContainer"] [node name="Load" type="Button" parent="V1/HBoxContainer"]
layout_mode = 2 layout_mode = 2
text = "Load" text = "Load"
[node name="Cancel" type="Button" parent="VBoxContainer/HBoxContainer"] [node name="Cancel" type="Button" parent="V1/HBoxContainer"]
layout_mode = 2 layout_mode = 2
text = "Cancel" text = "Cancel"
[connection signal="pressed" from="VBoxContainer/HBoxContainer/Load" to="." method="Load"] [connection signal="pressed" from="V1/HBoxContainer/Load" to="." method="Load"]
[connection signal="pressed" from="VBoxContainer/HBoxContainer/Cancel" to="." method="Cancel"] [connection signal="pressed" from="V1/HBoxContainer/Cancel" to="." method="Cancel"]