various menu changes and fixes

This commit is contained in:
orosmatthew 2022-01-25 23:06:48 -05:00
parent a3019beef1
commit dda22a8367
6 changed files with 144 additions and 36 deletions

11
Main.cs
View File

@ -6,8 +6,15 @@ public class Main : Node
{ {
public int Seed; public int Seed;
public float Zoom;
private int _nParticles; private int _nParticles;
public override void _Ready()
{
OS.MinWindowSize = new Vector2(1024, 600);
}
public void StartSimulation(int nParticles) public void StartSimulation(int nParticles)
{ {
_nParticles = nParticles; _nParticles = nParticles;
@ -15,7 +22,7 @@ public class Main : Node
var particleSimulationScene = particleSimulationPackedScene.Instance<ParticleSimulationScene>(); var particleSimulationScene = particleSimulationPackedScene.Instance<ParticleSimulationScene>();
particleSimulationScene.Name = Seed.ToString(); particleSimulationScene.Name = Seed.ToString();
AddChild(particleSimulationScene); AddChild(particleSimulationScene);
particleSimulationScene.Initialize(nParticles); particleSimulationScene.Initialize(Seed, nParticles, Zoom);
GetNode<Control>("MainMenu").Hide(); GetNode<Control>("MainMenu").Hide();
} }
@ -30,7 +37,7 @@ public class Main : Node
{ {
GetNode<ParticleSimulationScene>(Seed.ToString()).Hide(); GetNode<ParticleSimulationScene>(Seed.ToString()).Hide();
GetNode(Seed.ToString()).QueueFree(); GetNode(Seed.ToString()).QueueFree();
Seed = (int) GD.Randi(); Seed = Mathf.Abs((int)GD.Randi());
StartSimulation(_nParticles); StartSimulation(_nParticles);
} }

View File

@ -1,3 +1,4 @@
using System.Globalization;
using Godot; using Godot;
public class MainMenu : Control public class MainMenu : Control
@ -10,6 +11,10 @@ public class MainMenu : Control
private TextEdit _seedText; private TextEdit _seedText;
private TextEdit _particleCountText; private TextEdit _particleCountText;
private Button _randomizeButton; private Button _randomizeButton;
private Label _zoomValue;
private HSlider _zoomSlider;
private Label _invalidLabel;
public override void _Ready() public override void _Ready()
{ {
@ -20,19 +25,29 @@ public class MainMenu : Control
_seedText = GetNode("MenuButtons").GetNode("Inputs").GetNode("Seed").GetNode<TextEdit>("SeedText"); _seedText = GetNode("MenuButtons").GetNode("Inputs").GetNode("Seed").GetNode<TextEdit>("SeedText");
_particleCountText = GetNode("MenuButtons").GetNode("Inputs").GetNode("ParticleCount").GetNode<TextEdit>("ParticleCountText"); _particleCountText = GetNode("MenuButtons").GetNode("Inputs").GetNode("ParticleCount").GetNode<TextEdit>("ParticleCountText");
_randomizeButton = GetNode("MenuButtons").GetNode("Inputs").GetNode("Seed").GetNode<Button>("RandomizeButton"); _randomizeButton = GetNode("MenuButtons").GetNode("Inputs").GetNode("Seed").GetNode<Button>("RandomizeButton");
_zoomValue = GetNode("MenuButtons").GetNode("Inputs").GetNode("Zoom").GetNode<Label>("ZoomValue");
_zoomSlider = GetNode("MenuButtons").GetNode("Inputs").GetNode("Zoom").GetNode<HSlider>("ZoomSlider");
_invalidLabel = GetNode<Label>("InvalidLabel");
// Connect signals // Connect signals
_simulateButton.Connect("pressed", this, nameof(_OnSimulatePressed)); _simulateButton.Connect("pressed", this, nameof(_OnSimulatePressed));
_toggleFullScreenButton.Connect("pressed", this, nameof(_OnToggleFullscreenPressed)); _toggleFullScreenButton.Connect("pressed", this, nameof(_OnToggleFullscreenPressed));
_randomizeButton.Connect("pressed", this, nameof(_OnRandomizePressed)); _randomizeButton.Connect("pressed", this, nameof(_OnRandomizePressed));
_zoomSlider.Connect("value_changed", this, nameof(_OnZoomSliderChange));
// Random seed // Random seed
GD.Randomize(); GD.Randomize();
var randomSeed = (int)GD.Randi(); var randomSeed = Mathf.Abs((int)GD.Randi());
_main.Seed = randomSeed; _main.Seed = randomSeed;
RefreshSeedText(); RefreshSeedText();
} }
public void _OnZoomSliderChange(float value)
{
_zoomValue.Text = value.ToString(CultureInfo.InvariantCulture);
_main.Zoom = value;
}
public void RefreshSeedText() public void RefreshSeedText()
{ {
_seedText.Text = _main.Seed.ToString(); _seedText.Text = _main.Seed.ToString();
@ -41,8 +56,16 @@ public class MainMenu : Control
public void _OnSimulatePressed() public void _OnSimulatePressed()
{ {
// Start simulation with seed and number of particles // Start simulation with seed and number of particles
var nParticles = _particleCountText.Text.ToInt(); var particleCountCheck = int.TryParse(_particleCountText.Text, out var nParticles);
_main.Seed = _seedText.Text.ToInt(); var seedCheck = int.TryParse(_seedText.Text, out var seed);
if (!particleCountCheck || !seedCheck)
{
ShowInvalid();
return;
}
_main.Zoom = (float)_zoomSlider.Value;
_main.Seed = seed;
_main.StartSimulation(nParticles); _main.StartSimulation(nParticles);
} }
@ -53,7 +76,7 @@ public class MainMenu : Control
public void _OnRandomizePressed() public void _OnRandomizePressed()
{ {
var randomSeed = (int) GD.Randi(); var randomSeed = Mathf.Abs((int)GD.Randi());
_main.Seed = randomSeed; _main.Seed = randomSeed;
RefreshSeedText(); RefreshSeedText();
} }
@ -66,4 +89,19 @@ public class MainMenu : Control
GetTree().Quit(); GetTree().Quit();
} }
} }
private async void ShowInvalid()
{
GetNode<Tween>("InvalidTween").ResetAll();
GetNode<Timer>("InvalidTimer").Stop();
GetNode<Timer>("InvalidTimer").WaitTime = 3.0f;
_invalidLabel.Modulate = new Color(1, 1, 1, 1);
var invalidTimer = GetNode<Timer>("InvalidTimer");
invalidTimer.Start();
await ToSignal(invalidTimer, "timeout");
var invalidTween = GetNode<Tween>("InvalidTween");
invalidTween.InterpolateProperty(_invalidLabel, "modulate:a", 1, 0, 1);
invalidTween.Start();
await ToSignal(invalidTween, "tween_all_completed");
}
} }

View File

@ -20,12 +20,12 @@ __meta__ = {
[node name="MenuButtons" type="VBoxContainer" parent="."] [node name="MenuButtons" type="VBoxContainer" parent="."]
anchor_left = 0.5 anchor_left = 0.5
anchor_top = 0.5 anchor_top = 0.582
anchor_right = 0.5 anchor_right = 0.5
anchor_bottom = 0.5 anchor_bottom = 0.582
margin_left = -259.5 margin_left = -304.0
margin_top = -114.0 margin_top = -172.5
margin_right = 259.5 margin_right = 304.0
margin_bottom = 172.5 margin_bottom = 172.5
custom_constants/separation = 12 custom_constants/separation = 12
__meta__ = { __meta__ = {
@ -33,17 +33,17 @@ __meta__ = {
} }
[node name="Inputs" type="HBoxContainer" parent="MenuButtons"] [node name="Inputs" type="HBoxContainer" parent="MenuButtons"]
margin_right = 519.0 margin_right = 608.0
margin_bottom = 150.0 margin_bottom = 150.0
alignment = 1 alignment = 1
[node name="Seed" type="VBoxContainer" parent="MenuButtons/Inputs"] [node name="Seed" type="VBoxContainer" parent="MenuButtons/Inputs"]
margin_right = 250.946 margin_right = 200.0
margin_bottom = 150.0 margin_bottom = 150.0
rect_min_size = Vector2( 250.946, 0 ) rect_min_size = Vector2( 200, 0 )
[node name="SeedLabel" type="Label" parent="MenuButtons/Inputs/Seed"] [node name="SeedLabel" type="Label" parent="MenuButtons/Inputs/Seed"]
margin_right = 250.0 margin_right = 200.0
margin_bottom = 27.0 margin_bottom = 27.0
text = "Seed Number" text = "Seed Number"
align = 1 align = 1
@ -53,14 +53,14 @@ __meta__ = {
[node name="SeedText" type="TextEdit" parent="MenuButtons/Inputs/Seed"] [node name="SeedText" type="TextEdit" parent="MenuButtons/Inputs/Seed"]
margin_top = 31.0 margin_top = 31.0
margin_right = 250.0 margin_right = 200.0
margin_bottom = 95.769 margin_bottom = 95.769
rect_min_size = Vector2( 0, 64.769 ) rect_min_size = Vector2( 0, 64.769 )
text = "12345" text = "12345"
[node name="RandomizeButton" type="Button" parent="MenuButtons/Inputs/Seed"] [node name="RandomizeButton" type="Button" parent="MenuButtons/Inputs/Seed"]
margin_top = 99.0 margin_top = 99.0
margin_right = 250.0 margin_right = 200.0
margin_bottom = 150.251 margin_bottom = 150.251
text = "Randomize!" text = "Randomize!"
__meta__ = { __meta__ = {
@ -68,26 +68,55 @@ __meta__ = {
} }
[node name="ParticleCount" type="VBoxContainer" parent="MenuButtons/Inputs"] [node name="ParticleCount" type="VBoxContainer" parent="MenuButtons/Inputs"]
margin_left = 254.0 margin_left = 204.0
margin_right = 519.0 margin_right = 404.0
margin_bottom = 150.0 margin_bottom = 150.0
rect_min_size = Vector2( 200, 0 )
[node name="ParticleCountLabel" type="Label" parent="MenuButtons/Inputs/ParticleCount"] [node name="ParticleCountLabel" type="Label" parent="MenuButtons/Inputs/ParticleCount"]
margin_right = 265.0 margin_right = 200.0
margin_bottom = 27.0 margin_bottom = 27.0
text = "Number of Particles" text = "Particle Count"
align = 1 align = 1
[node name="ParticleCountText" type="TextEdit" parent="MenuButtons/Inputs/ParticleCount"] [node name="ParticleCountText" type="TextEdit" parent="MenuButtons/Inputs/ParticleCount"]
margin_top = 31.0 margin_top = 31.0
margin_right = 265.0 margin_right = 200.0
margin_bottom = 95.769 margin_bottom = 96.0
rect_min_size = Vector2( 0, 64.769 ) rect_min_size = Vector2( 0, 65 )
text = "1000" text = "1000"
[node name="Zoom" type="VBoxContainer" parent="MenuButtons/Inputs"]
margin_left = 408.0
margin_right = 608.0
margin_bottom = 150.0
rect_min_size = Vector2( 200, 0 )
[node name="ZoomLabel" type="Label" parent="MenuButtons/Inputs/Zoom"]
margin_right = 200.0
margin_bottom = 27.0
text = "Zoom"
align = 1
[node name="ZoomValue" type="Label" parent="MenuButtons/Inputs/Zoom"]
margin_top = 31.0
margin_right = 200.0
margin_bottom = 58.0
text = "1.4"
align = 1
[node name="ZoomSlider" type="HSlider" parent="MenuButtons/Inputs/Zoom"]
margin_top = 62.0
margin_right = 200.0
margin_bottom = 104.0
min_value = 0.5
max_value = 5.0
step = 0.1
value = 1.4
[node name="SimulateButton" type="Button" parent="MenuButtons"] [node name="SimulateButton" type="Button" parent="MenuButtons"]
margin_top = 162.0 margin_top = 162.0
margin_right = 519.0 margin_right = 608.0
margin_bottom = 213.251 margin_bottom = 213.251
text = "Simulate!" text = "Simulate!"
__meta__ = { __meta__ = {
@ -96,7 +125,7 @@ __meta__ = {
[node name="Warning" type="Label" parent="MenuButtons"] [node name="Warning" type="Label" parent="MenuButtons"]
margin_top = 225.0 margin_top = 225.0
margin_right = 519.0 margin_right = 608.0
margin_bottom = 270.0 margin_bottom = 270.0
custom_fonts/font = SubResource( 1 ) custom_fonts/font = SubResource( 1 )
text = "Simulation cannot be resized text = "Simulation cannot be resized
@ -105,7 +134,7 @@ align = 1
[node name="HBoxContainer" type="HBoxContainer" parent="MenuButtons"] [node name="HBoxContainer" type="HBoxContainer" parent="MenuButtons"]
margin_top = 282.0 margin_top = 282.0
margin_right = 519.0 margin_right = 608.0
margin_bottom = 282.0 margin_bottom = 282.0
__meta__ = { __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
@ -113,7 +142,7 @@ __meta__ = {
[node name="ToggleFullscreenButton" type="Button" parent="MenuButtons"] [node name="ToggleFullscreenButton" type="Button" parent="MenuButtons"]
margin_top = 294.0 margin_top = 294.0
margin_right = 519.0 margin_right = 608.0
margin_bottom = 345.251 margin_bottom = 345.251
text = "Toggle Fullscreen!" text = "Toggle Fullscreen!"
@ -131,5 +160,41 @@ rect_scale = Vector2( 0.35, 0.35 )
mouse_filter = 2 mouse_filter = 2
texture = ExtResource( 2 ) texture = ExtResource( 2 )
__meta__ = { __meta__ = {
"_edit_lock_": true,
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }
[node name="Controls" type="Label" parent="."]
anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = -183.0
margin_top = -81.0
margin_right = -10.0
margin_bottom = -12.0
custom_fonts/font = SubResource( 1 )
text = "Controls
R to Restart
Esc to Exit"
align = 1
__meta__ = {
"_edit_use_anchors_": false
}
[node name="InvalidLabel" type="Label" parent="."]
modulate = Color( 1, 1, 1, 0 )
margin_left = 15.0
margin_top = 16.0
margin_right = 226.0
margin_bottom = 43.0
text = "Invalid Inputs!"
uppercase = true
__meta__ = {
"_edit_use_anchors_": false
}
[node name="InvalidTween" type="Tween" parent="."]
[node name="InvalidTimer" type="Timer" parent="."]
one_shot = true

View File

@ -10,15 +10,14 @@ public class ParticleSimulationScene : Node2D
private ParticleSimulation _particleSimulation; private ParticleSimulation _particleSimulation;
public float PhysicsInterpolationFraction; public float PhysicsInterpolationFraction;
public void Initialize(int nParticles) public void Initialize(int seed, int nParticles, float zoom)
{ {
_particleNodes = GetNode<Node2D>("ParticleNodes"); _particleNodes = GetNode<Node2D>("ParticleNodes");
var seed = GetParent<Main>().Seed;
GD.Seed((ulong)seed); GD.Seed((ulong)seed);
GD.Print("Last Seed: " + seed); GD.Print("Last Seed: " + seed);
var viewSize = GetViewportRect().Size; var viewSize = GetViewportRect().Size;
var zoom = GetNode<Camera2D>("Camera2D").Zoom; GetNode<Camera2D>("Camera2D").Zoom = new Vector2(zoom, zoom);
var spaceSize = new Vector2(viewSize.x * zoom.x, viewSize.y * zoom.y); var spaceSize = viewSize * zoom;
_particleSimulation = new ParticleSimulation _particleSimulation = new ParticleSimulation
{ {
SpaceSize = spaceSize SpaceSize = spaceSize

View File

@ -2,7 +2,6 @@
[ext_resource path="res://ParticleSimulation/ParticleSimulationScene.cs" type="Script" id=1] [ext_resource path="res://ParticleSimulation/ParticleSimulationScene.cs" type="Script" id=1]
[node name="ParticleSimulationScene" type="Node2D"] [node name="ParticleSimulationScene" type="Node2D"]
script = ExtResource( 1 ) script = ExtResource( 1 )

View File

@ -283,7 +283,7 @@ TextEdit/colors/bookmark_color = Color( 0.08, 0.49, 0.98, 1 )
TextEdit/colors/brace_mismatch_color = Color( 1, 0.2, 0.2, 1 ) TextEdit/colors/brace_mismatch_color = Color( 1, 0.2, 0.2, 1 )
TextEdit/colors/breakpoint_color = Color( 0.8, 0.8, 0.4, 0.2 ) TextEdit/colors/breakpoint_color = Color( 0.8, 0.8, 0.4, 0.2 )
TextEdit/colors/caret_background_color = Color( 0, 0, 0, 1 ) TextEdit/colors/caret_background_color = Color( 0, 0, 0, 1 )
TextEdit/colors/caret_color = Color( 0.88, 0.88, 0.88, 1 ) TextEdit/colors/caret_color = Color( 0, 0, 0, 1 )
TextEdit/colors/code_folding_color = Color( 0.8, 0.8, 0.8, 0.8 ) TextEdit/colors/code_folding_color = Color( 0.8, 0.8, 0.8, 0.8 )
TextEdit/colors/completion_background_color = Color( 0.17, 0.16, 0.2, 1 ) TextEdit/colors/completion_background_color = Color( 0.17, 0.16, 0.2, 1 )
TextEdit/colors/completion_existing_color = Color( 0.87, 0.87, 0.87, 0.13 ) TextEdit/colors/completion_existing_color = Color( 0.87, 0.87, 0.87, 0.13 )