From 67d7986330581a9af58803fd125d9eb30cb506f1 Mon Sep 17 00:00:00 2001 From: Maddo Date: Thu, 27 Feb 2025 10:01:50 +0100 Subject: [PATCH] Music room visualizer --- Scenes/HUD/MusicRoom.tscn | 10 ++++-- Scripts/Resources/MusicResource.cs | 3 ++ Scripts/UI/AudioNameVisualizer.cs | 4 +-- Scripts/UI/MusicRoom.cs | 55 +++++++++++++++++++++++++++-- Scripts/UI/MusicVisualizerCanvas.cs | 2 +- 5 files changed, 67 insertions(+), 7 deletions(-) diff --git a/Scenes/HUD/MusicRoom.tscn b/Scenes/HUD/MusicRoom.tscn index 640588d5..868ad1d8 100644 --- a/Scenes/HUD/MusicRoom.tscn +++ b/Scenes/HUD/MusicRoom.tscn @@ -1,11 +1,14 @@ -[gd_scene load_steps=5 format=3 uid="uid://c84shrj84g4t2"] +[gd_scene load_steps=8 format=3 uid="uid://c84shrj84g4t2"] [ext_resource type="Script" uid="uid://c06tspxwnj7pg" path="res://Scripts/UI/MusicRoom.cs" id="1_u3ui8"] [ext_resource type="LabelSettings" uid="uid://wr7cb2qa6w71" path="res://Resources/Styles/Title_Text_Style.tres" id="1_w47yj"] +[ext_resource type="Script" uid="uid://cx63lvsuj1787" path="res://Scripts/Resources/MusicResource.cs" id="2_kybwj"] [ext_resource type="Theme" uid="uid://dnsadvmunm76k" path="res://Resources/Styles/MainMenuButtons.tres" id="2_rcbhv"] +[ext_resource type="Resource" uid="uid://byo74ews118nl" path="res://Resources/Music/No_Reason.tres" id="3_nkbmj"] [ext_resource type="Texture2D" uid="uid://bpd4ldfmt3s51" path="res://Sprites/UI/Note.png" id="3_u3ui8"] +[ext_resource type="Resource" uid="uid://b0aryixgv2vkj" path="res://Resources/Music/No_Restraint.tres" id="4_cv0ke"] -[node name="MusicRoom" type="VBoxContainer"] +[node name="MusicRoom" type="VBoxContainer" node_paths=PackedStringArray("TracksContainer")] anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 @@ -14,6 +17,9 @@ grow_vertical = 2 size_flags_horizontal = 3 size_flags_vertical = 3 script = ExtResource("1_u3ui8") +Tracks = Array[ExtResource("2_kybwj")]([ExtResource("3_nkbmj"), ExtResource("4_cv0ke")]) +TracksContainer = NodePath("HBoxContainer/ItemList") +Icon = ExtResource("3_u3ui8") [node name="Label" type="Label" parent="."] layout_mode = 2 diff --git a/Scripts/Resources/MusicResource.cs b/Scripts/Resources/MusicResource.cs index 3999742a..20a059f2 100644 --- a/Scripts/Resources/MusicResource.cs +++ b/Scripts/Resources/MusicResource.cs @@ -12,6 +12,9 @@ public partial class MusicResource : Resource [Export] public string AuthorName { get; set; } + [Export] + public string Description { get; set; } + [Export] public bool ShowAuthor { get; set; } diff --git a/Scripts/UI/AudioNameVisualizer.cs b/Scripts/UI/AudioNameVisualizer.cs index 02b7e600..31cab5e5 100644 --- a/Scripts/UI/AudioNameVisualizer.cs +++ b/Scripts/UI/AudioNameVisualizer.cs @@ -11,7 +11,7 @@ using Cirno.Scripts.Resources; public partial class AudioNameVisualizer : AudioStreamPlayer2D { [Export] - public MusicResource MusicData { get; private set; } + public MusicResource MusicData { get; set; } [Export] public PackedScene CanvasTemplate; @@ -23,7 +23,7 @@ public partial class AudioNameVisualizer : AudioStreamPlayer2D if (Autoplay) { - ShowName(); + PlayWithName(); } } diff --git a/Scripts/UI/MusicRoom.cs b/Scripts/UI/MusicRoom.cs index 65bc3964..f2ca69c2 100644 --- a/Scripts/UI/MusicRoom.cs +++ b/Scripts/UI/MusicRoom.cs @@ -1,5 +1,56 @@ -public partial class MusicRoom : MenuBase +using Cirno.Scripts.Resources; +using Godot; +using Godot.Collections; + +public partial class MusicRoom : MenuBase { + [Export] + public Array Tracks { get; private set; } = new(); -} \ No newline at end of file + [Export] + public ItemList TracksContainer { get; private set; } + + [Export] + public Texture2D Icon { get; private set; } + + private Dictionary _tracks = new(); + + public override void _Ready() + { + TracksContainer.Clear(); + foreach (var track in Tracks) + { + var index = TracksContainer.AddItem($"{track.TrackName} ({track.AuthorName})", Icon); + + var visualizer = new AudioNameVisualizer(); + visualizer.MusicData = track; + TracksContainer.CallDeferred("add_child", visualizer); + + _tracks.Add((long)index, visualizer); + + } + + TracksContainer.ItemSelected += (long selectedItem) => + { + var vis = _tracks[selectedItem]; + if (vis.MusicData is null) { return; } + StopAllTracks(); + vis.PlayWithName(); + UpdateDescription(vis.MusicData.Description); + }; + } + + private void StopAllTracks() + { + foreach (var track in _tracks) + { + track.Value.Stop(); + } + } + + private void UpdateDescription(string name) + { + + } +} diff --git a/Scripts/UI/MusicVisualizerCanvas.cs b/Scripts/UI/MusicVisualizerCanvas.cs index 54b9376b..8be44cb5 100644 --- a/Scripts/UI/MusicVisualizerCanvas.cs +++ b/Scripts/UI/MusicVisualizerCanvas.cs @@ -18,7 +18,7 @@ public partial class MusicVisualizerCanvas : CanvasLayer private void ResetLabel(string trackName, string authorName) { - _nameLabel.Text = string.IsNullOrWhiteSpace(authorName) ? authorName : $"{trackName} ({authorName})"; + _nameLabel.Text = string.IsNullOrWhiteSpace(authorName) ? trackName : $"{trackName} ({authorName})"; _nameLabel.SetAnchorsAndOffsetsPreset(Control.LayoutPreset.BottomRight, margin: 0); _nameLabel.Modulate = Colors.White; _nameLabel.Hide();