Implement core game functionality with AppRoot, SaveClient, PlayerRepository, and LevelRepository classes
This commit is contained in:
58
features/ui/menus/MainMenu.cs
Normal file
58
features/ui/menus/MainMenu.cs
Normal file
@@ -0,0 +1,58 @@
|
||||
using Chickensoft.AutoInject;
|
||||
using Chickensoft.Introspection;
|
||||
using Godot;
|
||||
using Mr.BrickAdventures.game.repositories;
|
||||
using Mr.BrickAdventures.game.services;
|
||||
|
||||
namespace Mr.BrickAdventures.features.ui.menus;
|
||||
|
||||
[Meta(typeof(IAutoNode))]
|
||||
public partial class MainMenu : Control
|
||||
{
|
||||
public override void _Notification(int what) => this.Notify(what);
|
||||
|
||||
[Export] public Control MainMenuControl { get; set; } = null!;
|
||||
[Export] public Button NewGameButton { get; set; } = null!;
|
||||
[Export] public Button ContinueButton { get; set; } = null!;
|
||||
[Export] public Button SettingsButton { get; set; } = null!;
|
||||
[Export] public Button CreditsButton { get; set; } = null!;
|
||||
[Export] public Button ExitButton { get; set; } = null!;
|
||||
[Export] public Label VersionLabel { get; set; } = null!;
|
||||
[Export] public Control SettingsControl { get; set; } = null!;
|
||||
[Export] public Control CreditsControl { get; set; } = null!;
|
||||
[Export] public PackedScene FirstLevelScene { get; set; } = null!;
|
||||
|
||||
[Dependency] public SaveService Save => this.DependOn<SaveService>();
|
||||
[Dependency] public LevelRepository Levels => this.DependOn<LevelRepository>();
|
||||
|
||||
public void OnReady() {
|
||||
VersionLabel.Text = $"v. {ProjectSettings.GetSetting("application/config/version")}";
|
||||
|
||||
NewGameButton.Pressed += OnNewGamePressed;
|
||||
ContinueButton.Pressed += OnContinuePressed;
|
||||
SettingsButton.Pressed += () => SettingsControl.Show();
|
||||
CreditsButton.Pressed += () => CreditsControl.Show();
|
||||
ExitButton.Pressed += () => GetTree().Quit();
|
||||
}
|
||||
|
||||
public void OnResolved()
|
||||
{
|
||||
ContinueButton.Disabled = !Save.Exists();
|
||||
(ContinueButton.Disabled ? NewGameButton : ContinueButton).GrabFocus();
|
||||
}
|
||||
|
||||
private void OnNewGamePressed() {
|
||||
Save.NewGame();
|
||||
Levels.SetCurrent(0);
|
||||
GetTree().ChangeSceneToPacked(FirstLevelScene);
|
||||
}
|
||||
|
||||
private void OnContinuePressed() {
|
||||
if (!Save.TryLoad()) {
|
||||
// Fallback: start new game
|
||||
OnNewGamePressed();
|
||||
return;
|
||||
}
|
||||
GetTree().ChangeSceneToPacked(FirstLevelScene);
|
||||
}
|
||||
}
|
1
features/ui/menus/MainMenu.cs.uid
Normal file
1
features/ui/menus/MainMenu.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://fcsg0e8s36in
|
6
features/ui/menus/PauseMenu.cs
Normal file
6
features/ui/menus/PauseMenu.cs
Normal file
@@ -0,0 +1,6 @@
|
||||
namespace Mr.BrickAdventures.features.ui.menus;
|
||||
|
||||
public class PauseMenu
|
||||
{
|
||||
|
||||
}
|
1
features/ui/menus/PauseMenu.cs.uid
Normal file
1
features/ui/menus/PauseMenu.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bwgs02wcfnm8u
|
84
features/ui/menus/main_menu.tscn
Normal file
84
features/ui/menus/main_menu.tscn
Normal file
@@ -0,0 +1,84 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://8b6ol5sssbgo"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://fcsg0e8s36in" path="res://features/ui/menus/MainMenu.cs" id="1_q8hru"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_qv2q0"]
|
||||
bg_color = Color(0, 0, 0, 1)
|
||||
|
||||
[node name="MainMenu" type="Control" node_paths=PackedStringArray("MainMenuControl", "NewGameButton", "ContinueButton", "SettingsButton", "CreditsButton", "ExitButton", "VersionLabel")]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_q8hru")
|
||||
MainMenuControl = NodePath(".")
|
||||
NewGameButton = NodePath("PanelContainer/MarginContainer/VBoxContainer/NewGameButton")
|
||||
ContinueButton = NodePath("PanelContainer/MarginContainer/VBoxContainer/ContinueButton")
|
||||
SettingsButton = NodePath("PanelContainer/MarginContainer/VBoxContainer/SettingsButton")
|
||||
CreditsButton = NodePath("PanelContainer/MarginContainer/VBoxContainer/CreditsButton")
|
||||
ExitButton = NodePath("PanelContainer/MarginContainer/VBoxContainer/QuitButton")
|
||||
VersionLabel = NodePath("PanelContainer/MarginContainer/VBoxContainer/version")
|
||||
|
||||
[node name="PanelContainer" type="PanelContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_qv2q0")
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/margin_left = 32
|
||||
theme_override_constants/margin_top = 32
|
||||
theme_override_constants/margin_right = 32
|
||||
theme_override_constants/margin_bottom = 32
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer/MarginContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 16
|
||||
|
||||
[node name="Label" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "GAME_TITLE"
|
||||
horizontal_alignment = 1
|
||||
uppercase = true
|
||||
|
||||
[node name="Spacer" type="Control" parent="PanelContainer/MarginContainer/VBoxContainer"]
|
||||
custom_minimum_size = Vector2(0, 32)
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="ContinueButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "CONTINUE_BUTTON"
|
||||
flat = true
|
||||
|
||||
[node name="NewGameButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "NEW_GAME_BUTTON"
|
||||
flat = true
|
||||
|
||||
[node name="SettingsButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "SETTINGS_BUTTON"
|
||||
flat = true
|
||||
|
||||
[node name="CreditsButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "CREDITS_BUTTON"
|
||||
flat = true
|
||||
|
||||
[node name="QuitButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "QUIT_BUTTON"
|
||||
flat = true
|
||||
|
||||
[node name="version" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 0
|
||||
size_flags_vertical = 8
|
||||
text = "v. in-dev"
|
Reference in New Issue
Block a user