diff options
Diffstat (limited to 'Scripts')
| -rw-r--r-- | Scripts/GodotExtensions/ArrayExtensions.cs | 13 | ||||
| -rw-r--r-- | Scripts/GodotExtensions/NodeExtensions.cs | 14 | ||||
| -rw-r--r-- | Scripts/Menus/MainMenu.cs | 26 | ||||
| -rw-r--r-- | Scripts/Menus/MainMenuButtons.cs | 39 | ||||
| -rw-r--r-- | Scripts/Terminal/ButtonBlock.cs | 28 | ||||
| -rw-r--r-- | Scripts/Terminal/MenuScreen.cs | 27 |
6 files changed, 147 insertions, 0 deletions
diff --git a/Scripts/GodotExtensions/ArrayExtensions.cs b/Scripts/GodotExtensions/ArrayExtensions.cs new file mode 100644 index 0000000..aa3a9c4 --- /dev/null +++ b/Scripts/GodotExtensions/ArrayExtensions.cs @@ -0,0 +1,13 @@ +using System; +using Godot.Collections; + +namespace Texty.Scripts.GodotExtensions +{ + public static class ArrayExtensions + { + public static void ForEach<T>(this Array<T> array, Action<T> action) + { + foreach (var element in array) action.Invoke(element); + } + } +}
\ No newline at end of file diff --git a/Scripts/GodotExtensions/NodeExtensions.cs b/Scripts/GodotExtensions/NodeExtensions.cs new file mode 100644 index 0000000..b398985 --- /dev/null +++ b/Scripts/GodotExtensions/NodeExtensions.cs @@ -0,0 +1,14 @@ +using System.Linq; +using Godot; +using Godot.Collections; + +namespace Texty.Scripts.GodotExtensions +{ + public static class NodeExtensions + { + public static Array<T> GetChildren<T>(this Node node) + { + return new Array<T>(node.GetChildren().OfType<T>()); + } + } +}
\ No newline at end of file diff --git a/Scripts/Menus/MainMenu.cs b/Scripts/Menus/MainMenu.cs new file mode 100644 index 0000000..3beaead --- /dev/null +++ b/Scripts/Menus/MainMenu.cs @@ -0,0 +1,26 @@ +using Godot; + +namespace Texty.Scripts.Menus +{ + public class MainMenu : Node + { + public override void _Ready() + { + } + + public void OnStartButtonPressed() + { + GD.Print("Start button was pressed."); + } + + public void OnCreditsButtonPressed() + { + GD.Print("Credits button was pressed."); + } + + public void OnQuitButtonPressed() + { + GetTree().Quit(); + } + } +}
\ No newline at end of file diff --git a/Scripts/Menus/MainMenuButtons.cs b/Scripts/Menus/MainMenuButtons.cs new file mode 100644 index 0000000..c2af034 --- /dev/null +++ b/Scripts/Menus/MainMenuButtons.cs @@ -0,0 +1,39 @@ +using System; +using Godot; +using Texty.Scripts.Terminal; + +namespace Texty.Scripts.Menus +{ + public class MainMenuButtons : ButtonBlock + { + [Signal] public delegate void CreditsButtonPressed(); + [Signal] public delegate void QuitButtonPressed(); + [Signal] public delegate void StartButtonPressed(); + + protected override void OnButtonPressed(int index) + { + if (!Enum.IsDefined(typeof(Buttons), 1)) return; + switch ((Buttons)index) + { + case Buttons.Start: + EmitSignal(nameof(StartButtonPressed)); + break; + case Buttons.Credits: + EmitSignal(nameof(CreditsButtonPressed)); + break; + case Buttons.Quit: + EmitSignal(nameof(QuitButtonPressed)); + break; + default: + throw new ArgumentOutOfRangeException(nameof(index), index, "Button not implemented!"); + } + } + + private enum Buttons + { + Start = 0, + Credits = 1, + Quit = 2 + } + } +}
\ No newline at end of file diff --git a/Scripts/Terminal/ButtonBlock.cs b/Scripts/Terminal/ButtonBlock.cs new file mode 100644 index 0000000..769fdf8 --- /dev/null +++ b/Scripts/Terminal/ButtonBlock.cs @@ -0,0 +1,28 @@ +using System.Linq; +using Godot; +using Godot.Collections; +using Texty.Scripts.GodotExtensions; + +namespace Texty.Scripts.Terminal +{ + [Tool] + public abstract class ButtonBlock : MarginContainer + { + private VBoxContainer Buttons => GetNodeOrNull<VBoxContainer>($"%{nameof(Buttons)}"); + + public override void _Ready() + { + ConnectButtons(); + Buttons.GetChildren<Button>().ForEach(button => button.MouseFilter = MouseFilterEnum.Ignore); + Buttons.GetChildren<Button>().FirstOrDefault()?.GrabFocus(); + } + + protected abstract void OnButtonPressed(int index); + + private void ConnectButtons() + { + foreach (var (button, index) in Buttons.GetChildren<Button>().Select((button, index) => (button, index))) + button.Connect("pressed", this, nameof(OnButtonPressed), new Array(index)); + } + } +}
\ No newline at end of file diff --git a/Scripts/Terminal/MenuScreen.cs b/Scripts/Terminal/MenuScreen.cs new file mode 100644 index 0000000..5c3abfb --- /dev/null +++ b/Scripts/Terminal/MenuScreen.cs @@ -0,0 +1,27 @@ +using Godot; + +namespace Texty.Scripts.Terminal +{ + [Tool] + public class MenuScreen : Control + { + private string _title = ""; + private StatusArea TitleArea => GetNodeOrNull<StatusArea>($"%{nameof(TitleArea)}"); + + [Export] + public string Title + { + get => _title; + set + { + _title = value; + if (TitleArea != null) TitleArea.Title = $"[center]{GodotSharp.Singleton.Tr(_title)}[/center]"; + } + } + + public override void _Ready() + { + Title = _title; + } + } +}
\ No newline at end of file |
