summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSophia Pearson <codergal89@gmail.com>2022-05-27 23:52:37 +0200
committerSophia Pearson <codergal89@gmail.com>2022-05-27 23:52:37 +0200
commit0477b9ab34817165ac7b11ad77a6740995f55892 (patch)
tree5721a9c7a1f0437fb8c526544bc7e63a0ea9cc66
parent1010b138a0e52f860ef73d5552b0be236573c46b (diff)
downloadtexty-0477b9ab34817165ac7b11ad77a6740995f55892.tar.xz
texty-0477b9ab34817165ac7b11ad77a6740995f55892.zip
gui: add signals to start menu
-rw-r--r--Scenes/StartMenu.tscn5
-rw-r--r--Scripts/StartMenu.cs37
-rw-r--r--Tests/ComponentTests/test_StartMenu.gd48
-rw-r--r--Texty.csproj18
4 files changed, 94 insertions, 14 deletions
diff --git a/Scenes/StartMenu.tscn b/Scenes/StartMenu.tscn
index 7ebef31..ba9458b 100644
--- a/Scenes/StartMenu.tscn
+++ b/Scenes/StartMenu.tscn
@@ -40,3 +40,8 @@ margin_top = 98.0
margin_right = 166.0
margin_bottom = 139.0
text = "Quit"
+
+[connection signal="visibility_changed" from="." to="." method="OnVisibilityChanged"]
+[connection signal="pressed" from="MainContainer/Buttons/StartButton" to="." method="OnStartButtonPressed"]
+[connection signal="pressed" from="MainContainer/Buttons/CreditsButton" to="." method="OnCreditsButtonPressed"]
+[connection signal="pressed" from="MainContainer/Buttons/QuitButton" to="." method="OnQuitButtonPressed"]
diff --git a/Scripts/StartMenu.cs b/Scripts/StartMenu.cs
index 70b84b2..a1f64cc 100644
--- a/Scripts/StartMenu.cs
+++ b/Scripts/StartMenu.cs
@@ -2,11 +2,15 @@ using Godot;
namespace Texty.Scripts
{
- public class StartMenu : MarginContainer
- {
- public Button CreditsButton;
- public Button QuitButton;
- public Button StartButton;
+ public class StartMenu : MarginContainer
+ {
+ [Signal] public delegate void QuitGame();
+ [Signal] public delegate void ShowCredits();
+ [Signal] public delegate void StartGame();
+
+ public Button CreditsButton;
+ public Button QuitButton;
+ public Button StartButton;
public override void _Ready()
{
@@ -15,5 +19,28 @@ namespace Texty.Scripts
QuitButton = buttons.GetNode<Button>(nameof(QuitButton));
StartButton = buttons.GetNode<Button>(nameof(StartButton));
}
+
+ public void OnCreditsButtonPressed()
+ {
+ EmitSignal(nameof(ShowCredits));
+ }
+
+ public void OnQuitButtonPressed()
+ {
+ EmitSignal(nameof(QuitGame));
+ }
+
+ public void OnStartButtonPressed()
+ {
+ EmitSignal(nameof(StartGame));
+ }
+
+ public void OnVisibilityChanged()
+ {
+ if(Visible)
+ StartButton.GrabFocus();
+ else
+ StartButton.ReleaseFocus();
+ }
}
} \ No newline at end of file
diff --git a/Tests/ComponentTests/test_StartMenu.gd b/Tests/ComponentTests/test_StartMenu.gd
new file mode 100644
index 0000000..194a2dc
--- /dev/null
+++ b/Tests/ComponentTests/test_StartMenu.gd
@@ -0,0 +1,48 @@
+extends GutTest
+
+const Scene = preload('res://Scenes/StartMenu.tscn')
+const StartMenu = preload('res://Scripts/StartMenu.cs')
+
+var _instance: StartMenu = null
+var _sender = InputSender.new(Input)
+const _quit_game = 'QuitGame'
+const _show_credits = 'ShowCredits'
+const _start_game = 'StartGame'
+
+func before_each():
+ _instance = add_child_autofree(Scene.instance())
+ yield(_instance, 'visibility_changed')
+
+func after_each():
+ _sender.release_all()
+ _sender.clear()
+
+func test_can_instantiate():
+ assert_not_null(_instance)
+
+func test_StartButton_is_focused_when_scene_becomes_visible():
+ assert_true(_instance.StartButton.has_focus())
+
+func test_has_QuitGame_signal():
+ assert_has_signal(_instance, _quit_game)
+
+func test_has_ShowCredits_signal():
+ assert_has_signal(_instance, _show_credits)
+
+func test_has_StartGame_signal():
+ assert_has_signal(_instance, _start_game)
+
+func test_clicking_the_Start_button_emits_ShowCredits_signal():
+ watch_signals(_instance)
+ yield(UiHelpers.click_control(_sender, _instance.CreditsButton), 'idle')
+ assert_signal_emitted(_instance, _show_credits)
+
+func test_clicking_the_Quit_button_emits_QuitGame_signal():
+ watch_signals(_instance)
+ yield(UiHelpers.click_control(_sender, _instance.QuitButton), 'idle')
+ assert_signal_emitted(_instance, _quit_game)
+
+func test_clicking_the_Start_button_emits_StartGame_signal():
+ watch_signals(_instance)
+ yield(UiHelpers.click_control(_sender, _instance.StartButton), 'idle')
+ assert_signal_emitted(_instance, _start_game)
diff --git a/Texty.csproj b/Texty.csproj
index 8fcb0cb..5b156e0 100644
--- a/Texty.csproj
+++ b/Texty.csproj
@@ -8,18 +8,18 @@
<NeutralLanguage>en-US</NeutralLanguage>
</PropertyGroup>
<ItemGroup>
- <Compile Remove="ScriptTemplates\**"/>
- <Compile Remove="Scenes\**"/>
- <Compile Remove="Tests\**"/>
+ <Compile Remove="ScriptTemplates\**" />
+ <Compile Remove="Scenes\**" />
+ <Compile Remove="Tests\**" />
</ItemGroup>
<ItemGroup>
- <EmbeddedResource Remove="ScriptTemplates\**"/>
- <EmbeddedResource Remove="Scenes\**"/>
- <EmbeddedResource Remove="Tests\**"/>
+ <EmbeddedResource Remove="ScriptTemplates\**" />
+ <EmbeddedResource Remove="Scenes\**" />
+ <EmbeddedResource Remove="Tests\**" />
</ItemGroup>
<ItemGroup>
- <Content Include="addons\ClassExporter\plugin.cfg"/>
- <Content Include="Tests\**"/>
- <Content Include="Scenes\**"/>
+ <Content Include="addons\ClassExporter\plugin.cfg" />
+ <Content Include="Tests\**" />
+ <Content Include="Scenes\**" />
</ItemGroup>
</Project> \ No newline at end of file