From 634c503c7c094c728776711837f6830277f3b550 Mon Sep 17 00:00:00 2001 From: hzhang Date: Mon, 24 Jun 2024 07:27:50 +0800 Subject: [PATCH] Demo fix --- Scenes/Bottle.cs | 29 ++++++++++++++++++++++++----- Scenes/Flask.cs | 10 ++++++---- Scenes/Flask.tscn | 13 +++++++++++++ Scenes/FlaskContent.cs | 14 +++++++++++++- Scenes/FlaskContent.tscn | 1 + Scenes/MainControlPanel.cs | 4 +++- Scenes/StringLoader.cs | 1 + Scenes/VirtualChemDemo.cs | 6 ++++++ 8 files changed, 67 insertions(+), 11 deletions(-) diff --git a/Scenes/Bottle.cs b/Scenes/Bottle.cs index 1b48eb4..5480be5 100755 --- a/Scenes/Bottle.cs +++ b/Scenes/Bottle.cs @@ -7,7 +7,6 @@ using VirtualChemistry.Chemistry.Mixtures.Implements; public partial class Bottle : MenuButton, IChemicalContainer { private double ContainerVolume { get; set; } - private HeterogeneousMixture HeterogeneousMixture { get; set; } public double Volume() => ContainerVolume; public HeterogeneousMixture Content { get; set; } = HeterogeneousMixture.Null; @@ -64,18 +63,38 @@ public partial class Bottle : MenuButton, IChemicalContainer case 2: GlobalScene.Demo.SelectedBottle = this; GlobalScene.MainScene.SwitchToConstructor(); - return; + break; case 3: Content = GlobalScene.Flask.Content; Content.Container = this; GlobalScene.Flask.Content = HeterogeneousMixture.Null; GlobalScene.Flask.Update(); - return; + break; case 4: - return; + GlobalScene.Demo.SelectedBottle = this; + GlobalScene.Demo.PopupStringLoader(); + break; + case 5: + foreach (HomogeneousMixture m in Content.Layers.ToArray()) + { + m.Volume = m.FreeVolume; + GlobalScene.Flask.Content.AddLayer(m); + } + //GlobalScene.Flask.Content = Content; + //Content.Container = GlobalScene.Flask; + Content = HeterogeneousMixture.Null; + GlobalScene.Flask.Update(); + break; + case 6: + GlobalScene.Demo.FullRepr.Text = Content.Dump(); + break; + case 7: + Content = HeterogeneousMixture.Null; + break; default: - return; + break; } + BuildMenu(); } // Called when the node enters the scene tree for the first time. diff --git a/Scenes/Flask.cs b/Scenes/Flask.cs index 9c13998..bc1e39e 100755 --- a/Scenes/Flask.cs +++ b/Scenes/Flask.cs @@ -5,8 +5,8 @@ using VirtualChemistry.Chemistry.Mixtures.Implements; public partial class Flask : TextureRect, IChemicalContainer { - public double ContainerVolume { get; set; } = 100; - + public double ContainerVolume { get; set; } = 0.5; + private TextureRect InnerLayer { get; set; } public double Volume() => ContainerVolume; public HeterogeneousMixture Content { get; set; } @@ -24,8 +24,9 @@ public partial class Flask : TextureRect, IChemicalContainer .Load("res://Scenes/FlaskContent.tscn") .Instantiate(); fc.Mixture = m; - AddChild(fc); + InnerLayer.AddChild(fc); fc.Position = new(0, -(float)fc.StartFrom); + Map[m] = fc; } } @@ -50,7 +51,8 @@ public partial class Flask : TextureRect, IChemicalContainer public override void _Ready() { GlobalScene.Flask = this; - Content = HeterogeneousMixture.Null; + Content = new(this); + InnerLayer = GetNode("InnerLayer"); } // Called every frame. 'delta' is the elapsed time since the previous frame. diff --git a/Scenes/Flask.tscn b/Scenes/Flask.tscn index f5c68f5..9f5590a 100644 --- a/Scenes/Flask.tscn +++ b/Scenes/Flask.tscn @@ -8,3 +8,16 @@ offset_right = 40.0 offset_bottom = 40.0 texture = ExtResource("1_b34pm") script = ExtResource("2_j1pe5") + +[node name="InnerLayer" type="TextureRect" parent="."] +layout_mode = 0 +offset_right = 40.0 +offset_bottom = 40.0 +texture = ExtResource("1_b34pm") + +[node name="OuterLayer" type="TextureRect" parent="."] +layout_mode = 0 +offset_right = 40.0 +offset_bottom = 40.0 +mouse_filter = 2 +texture = ExtResource("1_b34pm") diff --git a/Scenes/FlaskContent.cs b/Scenes/FlaskContent.cs index 5c3882d..5b64b52 100755 --- a/Scenes/FlaskContent.cs +++ b/Scenes/FlaskContent.cs @@ -1,3 +1,4 @@ +using System; using Godot; using Skeleton.DataStructure.Link; using VirtualChemistry.Chemistry.Mixtures.Implements; @@ -28,6 +29,16 @@ public partial class FlaskContent : ColorRect public void UpdateVolumeAndPosition() { double height = (Volume / ContainerVolume) * ContainerHeight; + Position = new Vector2(Position.X, 512-(float)(StartFrom + height)); + Size = new Vector2(Size.X, (float)height); + //Mask.Size = Size; + Color = Color.Color8( + Mixture.ColorRed, + Mixture.ColorGreen, + Mixture.ColorGreen, + Mixture.ColorTransparent + ); + /* Animation a = AP.GetAnimation("HeightChange"); a.TrackSetKeyValue(0, 0, Size); a.TrackSetKeyValue(0, 1, new Vector2(Size.X, (float)height)); @@ -36,7 +47,8 @@ public partial class FlaskContent : ColorRect a = AP.GetAnimation("PositionChange"); a.TrackSetKeyValue(0,0,Position); a.TrackSetKeyValue(0,1, new Vector2(Position.X, -(float)StartFrom)); - AP.Play(); + Color = Color.Color8(Mixture.ColorRed, Mixture.ColorGreen, Mixture.ColorGreen, Mixture.ColorTransparent); + AP.Play();*/ } // Called when the node enters the scene tree for the first time. diff --git a/Scenes/FlaskContent.tscn b/Scenes/FlaskContent.tscn index 0b4b625..f0be837 100644 --- a/Scenes/FlaskContent.tscn +++ b/Scenes/FlaskContent.tscn @@ -82,3 +82,4 @@ offset_bottom = 4.0 [connection signal="resized" from="." to="." method="OnSizeChange"] [connection signal="mouse_entered" from="Mask" to="." method="OnMouseEnter"] [connection signal="mouse_exited" from="Mask" to="." method="OnMouseExit"] +[connection signal="pressed" from="Mask" to="." method="OnClick"] diff --git a/Scenes/MainControlPanel.cs b/Scenes/MainControlPanel.cs index 6b099a9..e1ddbf6 100644 --- a/Scenes/MainControlPanel.cs +++ b/Scenes/MainControlPanel.cs @@ -26,6 +26,7 @@ public partial class MainControlPanel : HBoxContainer Amount = GetNode