MVH/Scripts/UI Types/SongEntry.cs

101 lines
2.3 KiB
C#
Raw Normal View History

2024-06-07 00:47:07 +02:00
using BangerTypes;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.SceneManagement;
using UnityEngine.UIElements;
namespace UITypes
{
public class SongEntry : Button
{
[UnityEngine.Scripting.Preserve]
public new class UxmlFactory : UxmlFactory<SongEntry> { }
public Song Song { get; set; }
private MainMenu menu;
public VisualElement InitEntry()
{
menu = GameObject.FindWithTag("MenuUI").GetComponent<MainMenu>();
AddToClassList("songEntry");
text = "";
VisualElement contentWrapper = new();
Image coverImage = new();
VisualElement labelWrapper = new();
Label titleLabel = new(), artistLabel = new(), albumLabel = new(), durationLabel = new();
titleLabel.AddToClassList("SongEntryLabel");
artistLabel.AddToClassList("SongEntryLabel");
albumLabel.AddToClassList("SongEntryLabel");
durationLabel.AddToClassList("SongEntryLabel");
contentWrapper.AddToClassList("SongEntryContentWrapper");
coverImage.AddToClassList("SongEntryCoverImage");
coverImage.image = Song.CoverArt.texture;
Song.AverageColor = GetAverage(Song.CoverArt);
coverImage.style.backgroundColor = new StyleColor(Song.AverageColor);
labelWrapper.AddToClassList("SongEntryLabelWrapper");
titleLabel.text = Song.Title;
artistLabel.text = Song.Artist;
albumLabel.text = Song.Album;
durationLabel.text = Song.Duration;
this.Add(contentWrapper);
labelWrapper.Add(titleLabel);
labelWrapper.Add(artistLabel);
labelWrapper.Add(albumLabel);
labelWrapper.Add(durationLabel);
contentWrapper.Add(coverImage);
contentWrapper.Add(labelWrapper);
RegisterCallback<ClickEvent>(LoadSong);
return this;
}
public void LoadSong(ClickEvent evt)
{
menu.PlaySong(this);
}
Color32 GetAverage(Sprite image)
{
Color32[] pixels = image.texture.GetPixels32();
int totalR = 0;
int totalG = 0;
int totalB = 0;
foreach (Color32 pixel in pixels)
{
totalR += pixel.r;
totalG += pixel.g;
totalB += pixel.b;
}
int pixelCount = pixels.Length;
int averageR = totalR / pixelCount;
int averageG = totalG / pixelCount;
int averageB = totalB / pixelCount;
Color averageColor = new Color32((byte)averageR, (byte)averageG, (byte)averageB, 255);
return averageColor;
}
}
}