Gallery Menu initial implementation

This commit is contained in:
2025-11-30 20:17:08 -08:00
parent 725547d388
commit c491ea5050
8 changed files with 323 additions and 2 deletions

View File

@@ -32,6 +32,8 @@ public partial class App : Node, IApp
[Node] private OptionsMenu OptionsMenu { get; set; } [Node] private OptionsMenu OptionsMenu { get; set; }
[Node] private GalleryMenu GalleryMenu { get; set; }
public IInstantiator Instantiator { get; set; } = default!; public IInstantiator Instantiator { get; set; } = default!;
IAppRepo IProvide<IAppRepo>.Value() => AppRepo; IAppRepo IProvide<IAppRepo>.Value() => AppRepo;
@@ -77,6 +79,7 @@ public partial class App : Node, IApp
MainMenu.StartGame += OnStartGame; MainMenu.StartGame += OnStartGame;
MainMenu.EnemyViewer += OnEnemyViewer; MainMenu.EnemyViewer += OnEnemyViewer;
MainMenu.Gallery += OnGallery;
MainMenu.Options += OnOptions; MainMenu.Options += OnOptions;
MainMenu.Quit += OnQuit; MainMenu.Quit += OnQuit;
_loadedScene.Changed += OnGameLoaded; _loadedScene.Changed += OnGameLoaded;
@@ -182,12 +185,20 @@ public partial class App : Node, IApp
private void OnEnemyViewer() => AppLogic.Input(new AppLogic.Input.EnemyViewerOpened()); private void OnEnemyViewer() => AppLogic.Input(new AppLogic.Input.EnemyViewerOpened());
private void OnGalleryViewer() => AppLogic.Input(new AppLogic.Input.GalleryOpened());
private async void OnOptions() private async void OnOptions()
{ {
OptionsMenu.Show(); OptionsMenu.Show();
OptionsMenu.MasterVolumeSlider.GrabFocus(); OptionsMenu.MasterVolumeSlider.GrabFocus();
} }
private async void OnGallery()
{
GalleryMenu.Show();
GalleryMenu.Item1Thumb.GrabFocus();
}
public void OnQuit() => AppLogic.Input(new AppLogic.Input.QuitGame()); public void OnQuit() => AppLogic.Input(new AppLogic.Input.QuitGame());
public void OnSaveFileLoaded() public void OnSaveFileLoaded()

View File

@@ -1,9 +1,10 @@
[gd_scene load_steps=5 format=3 uid="uid://cagfc5ridmteu"] [gd_scene load_steps=6 format=3 uid="uid://cagfc5ridmteu"]
[ext_resource type="Script" uid="uid://d1f8blk5ucqvq" path="res://src/app/App.cs" id="1_rt73h"] [ext_resource type="Script" uid="uid://d1f8blk5ucqvq" path="res://src/app/App.cs" id="1_rt73h"]
[ext_resource type="PackedScene" uid="uid://rfvnddfqufho" path="res://src/menu/MainMenu.tscn" id="2_1uiag"] [ext_resource type="PackedScene" uid="uid://rfvnddfqufho" path="res://src/menu/MainMenu.tscn" id="2_1uiag"]
[ext_resource type="PackedScene" uid="uid://drkl3btdy6uxj" path="res://src/options/OptionsMenu.tscn" id="2_v0mgf"] [ext_resource type="PackedScene" uid="uid://drkl3btdy6uxj" path="res://src/options/OptionsMenu.tscn" id="2_v0mgf"]
[ext_resource type="PackedScene" uid="uid://cpjlj7kxdhv16" path="res://src/menu/LoadingScreen.tscn" id="3_3st5l"] [ext_resource type="PackedScene" uid="uid://cpjlj7kxdhv16" path="res://src/menu/LoadingScreen.tscn" id="3_3st5l"]
[ext_resource type="PackedScene" uid="uid://cm6fo70yb2hip" path="res://src/ui/gallery/GalleryMenu.tscn" id="5_iuu71"]
[node name="App" type="Node"] [node name="App" type="Node"]
process_mode = 3 process_mode = 3
@@ -18,3 +19,7 @@ visible = false
[node name="MainMenu" parent="." instance=ExtResource("2_1uiag")] [node name="MainMenu" parent="." instance=ExtResource("2_1uiag")]
unique_name_in_owner = true unique_name_in_owner = true
[node name="GalleryMenu" parent="." instance=ExtResource("5_iuu71")]
unique_name_in_owner = true
visible = false

View File

@@ -0,0 +1,12 @@
using Chickensoft.Introspection;
using Chickensoft.Serialization;
using Godot;
namespace Zennysoft.Game.Ma;
[Meta, Id("gallery_data")]
public partial class GalleryData : Node
{
[Save("PlaceholderImage1")]
public required bool PlaceholderImage1 { get; set; }
}

View File

@@ -0,0 +1 @@
uid://cy2vuwwvm727f

View File

@@ -0,0 +1,43 @@
using Chickensoft.AutoInject;
using Chickensoft.Introspection;
using Godot;
using Zennysoft.Game.Ma;
[Meta(typeof(IAutoNode))]
public partial class GalleryMenu : Control
{
public override void _Notification(int what) => this.Notify(what);
[Node] public Label Item1Label { get; set; }
[Node] public Label Item2Label { get; set; }
[Node] public Label Item3Label { get; set; }
[Node] public Label Item4Label { get; set; }
[Node] public Label Item5Label { get; set; }
[Node] public Label Item6Label { get; set; }
[Node] public Label Item7Label { get; set; }
[Node] public Label Item8Label { get; set; }
[Node] public ColorRect Item1Thumb { get; set; }
[Node] public ColorRect Item2Thumb { get; set; }
[Node] public ColorRect Item3Thumb { get; set; }
[Node] public ColorRect Item4Thumb { get; set; }
[Node] public ColorRect Item5Thumb { get; set; }
[Node] public ColorRect Item6Thumb { get; set; }
[Node] public ColorRect Item7Thumb { get; set; }
[Node] public ColorRect Item8Thumb { get; set; }
public GalleryData GalleryData { get; set; }
public void OnReady()
{
GalleryData = new GalleryData() { PlaceholderImage1 = true };
if (GalleryData.PlaceholderImage1)
Item1Label.Text = "Placeholder";
}
public void Load(GalleryData galleryData)
{
if (galleryData.PlaceholderImage1)
Item1Label.Text = "Placeholder";
}
}

View File

@@ -0,0 +1 @@
uid://cl0fi7kgimquk

View File

@@ -0,0 +1,248 @@
[gd_scene load_steps=5 format=3 uid="uid://cm6fo70yb2hip"]
[ext_resource type="Script" uid="uid://cl0fi7kgimquk" path="res://src/ui/gallery/GalleryMenu.cs" id="1_lvvvw"]
[ext_resource type="LabelSettings" uid="uid://wc363u5t1yi2" path="res://src/ui/label_settings/HeadingFont.tres" id="1_qekcq"]
[sub_resource type="Gradient" id="Gradient_6y3ag"]
offsets = PackedFloat32Array(0.0501636, 0.745911, 1)
colors = PackedColorArray(0.0770514, 0.225922, 0.0437089, 1, 0.198692, 0.388726, 0.192961, 1, 3.85046e-07, 0.276787, 0.0375416, 1)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_qekcq"]
gradient = SubResource("Gradient_6y3ag")
[node name="GalleryMenu" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3
size_flags_vertical = 3
script = ExtResource("1_lvvvw")
[node name="TextureRect" type="TextureRect" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
texture = SubResource("GradientTexture2D_qekcq")
[node name="MarginContainer" type="MarginContainer" parent="TextureRect"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/margin_left = 95
theme_override_constants/margin_top = 33
theme_override_constants/margin_right = 70
theme_override_constants/margin_bottom = 100
[node name="VBoxContainer" type="VBoxContainer" parent="TextureRect/MarginContainer"]
layout_mode = 2
theme_override_constants/separation = 10
[node name="ColorRect" type="ColorRect" parent="TextureRect/MarginContainer/VBoxContainer"]
custom_minimum_size = Vector2(427, 100)
layout_mode = 2
size_flags_horizontal = 0
color = Color(0.0941176, 0.0941176, 0.0941176, 0.980392)
[node name="MarginContainer" type="MarginContainer" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/margin_left = 15
[node name="Label" type="Label" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect/MarginContainer"]
layout_mode = 2
text = "Gallery"
label_settings = ExtResource("1_qekcq")
[node name="ColorRect2" type="ColorRect" parent="TextureRect/MarginContainer/VBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
color = Color(0.0941176, 0.0941176, 0.0941176, 0.980392)
[node name="MarginContainer" type="MarginContainer" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
size_flags_vertical = 3
theme_override_constants/margin_left = 10
theme_override_constants/margin_top = 10
theme_override_constants/margin_right = 10
theme_override_constants/margin_bottom = 10
[node name="ReferenceRect" type="ReferenceRect" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer"]
layout_mode = 2
border_color = Color(1, 1, 1, 1)
border_width = 2.0
editor_only = false
[node name="MarginContainer" type="MarginContainer" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect"]
layout_mode = 0
offset_right = 40.0
offset_bottom = 40.0
theme_override_constants/margin_left = 25
theme_override_constants/margin_top = 80
theme_override_constants/margin_right = 15
theme_override_constants/margin_bottom = 10
[node name="VBoxContainer" type="VBoxContainer" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer"]
layout_mode = 2
theme_override_constants/separation = 25
[node name="VFlowContainer" type="VFlowContainer" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_constants/h_separation = 25
[node name="Item1Thumb" type="ColorRect" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer"]
unique_name_in_owner = true
custom_minimum_size = Vector2(400, 200)
layout_mode = 2
[node name="Item2Thumb" type="ColorRect" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer"]
unique_name_in_owner = true
custom_minimum_size = Vector2(400, 200)
layout_mode = 2
[node name="Item3Thumb" type="ColorRect" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer"]
unique_name_in_owner = true
custom_minimum_size = Vector2(400, 200)
layout_mode = 2
[node name="Item4Thumb" type="ColorRect" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer"]
unique_name_in_owner = true
custom_minimum_size = Vector2(400, 200)
layout_mode = 2
[node name="VFlowContainer3" type="VFlowContainer" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_constants/h_separation = 25
[node name="CenterContainer" type="CenterContainer" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer3"]
custom_minimum_size = Vector2(400, 0)
layout_mode = 2
size_flags_vertical = 3
[node name="Item1Label" type="Label" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer3/CenterContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "???"
label_settings = ExtResource("1_qekcq")
[node name="CenterContainer2" type="CenterContainer" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer3"]
custom_minimum_size = Vector2(400, 0)
layout_mode = 2
size_flags_vertical = 3
[node name="Item2Label" type="Label" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer3/CenterContainer2"]
unique_name_in_owner = true
layout_mode = 2
text = "???"
label_settings = ExtResource("1_qekcq")
[node name="CenterContainer3" type="CenterContainer" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer3"]
custom_minimum_size = Vector2(400, 0)
layout_mode = 2
size_flags_vertical = 3
[node name="Item3Label" type="Label" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer3/CenterContainer3"]
unique_name_in_owner = true
layout_mode = 2
text = "???"
label_settings = ExtResource("1_qekcq")
[node name="CenterContainer4" type="CenterContainer" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer3"]
custom_minimum_size = Vector2(400, 0)
layout_mode = 2
size_flags_vertical = 3
[node name="Item4Label" type="Label" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer3/CenterContainer4"]
unique_name_in_owner = true
layout_mode = 2
text = "???"
label_settings = ExtResource("1_qekcq")
[node name="VFlowContainer2" type="VFlowContainer" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_constants/h_separation = 25
[node name="Item5Thumb" type="ColorRect" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer2"]
unique_name_in_owner = true
custom_minimum_size = Vector2(400, 200)
layout_mode = 2
[node name="Item6Thumb" type="ColorRect" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer2"]
unique_name_in_owner = true
custom_minimum_size = Vector2(400, 200)
layout_mode = 2
[node name="Item7Thumb" type="ColorRect" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer2"]
unique_name_in_owner = true
custom_minimum_size = Vector2(400, 200)
layout_mode = 2
[node name="Item8Thumb" type="ColorRect" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer2"]
unique_name_in_owner = true
custom_minimum_size = Vector2(400, 200)
layout_mode = 2
[node name="VFlowContainer4" type="VFlowContainer" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_constants/h_separation = 25
[node name="CenterContainer" type="CenterContainer" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer4"]
custom_minimum_size = Vector2(400, 0)
layout_mode = 2
size_flags_vertical = 3
[node name="Item5Label" type="Label" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer4/CenterContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "???"
label_settings = ExtResource("1_qekcq")
[node name="CenterContainer2" type="CenterContainer" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer4"]
custom_minimum_size = Vector2(400, 0)
layout_mode = 2
size_flags_vertical = 3
[node name="Item6Label" type="Label" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer4/CenterContainer2"]
unique_name_in_owner = true
layout_mode = 2
text = "???"
label_settings = ExtResource("1_qekcq")
[node name="CenterContainer3" type="CenterContainer" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer4"]
custom_minimum_size = Vector2(400, 0)
layout_mode = 2
size_flags_vertical = 3
[node name="Item7Label" type="Label" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer4/CenterContainer3"]
unique_name_in_owner = true
layout_mode = 2
text = "???"
label_settings = ExtResource("1_qekcq")
[node name="CenterContainer4" type="CenterContainer" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer4"]
custom_minimum_size = Vector2(400, 0)
layout_mode = 2
size_flags_vertical = 3
[node name="Item8Label" type="Label" parent="TextureRect/MarginContainer/VBoxContainer/ColorRect2/MarginContainer/ReferenceRect/MarginContainer/VBoxContainer/VFlowContainer4/CenterContainer4"]
unique_name_in_owner = true
layout_mode = 2
text = "???"
label_settings = ExtResource("1_qekcq")

View File

@@ -4,5 +4,5 @@
[resource] [resource]
font = ExtResource("1_olalj") font = ExtResource("1_olalj")
font_size = 48 font_size = 70
font_color = Color(0.737255, 0.705882, 0.690196, 1) font_color = Color(0.737255, 0.705882, 0.690196, 1)