using System.Collections.ObjectModel; using CommunityToolkit.Mvvm.ComponentModel; using Avalonia; using LiveChartsCore; using LiveChartsCore.Defaults; using LiveChartsCore.SkiaSharpView; using Microsoft.Extensions.Logging; namespace GSS2.UI.Core.ViewModels; public partial class ResourceBarViewModel : ViewModelBase { private readonly ILogger _logger; [ObservableProperty] private ObservableCollection _series; [ObservableProperty] private Rect _bounds; public ResourceBarViewModel(ILogger logger, IEnumerable series) { _logger = logger; _logger.LogInformation("Initialization"); Series = new ObservableCollection(series); _logger.LogInformation("Initialized"); } partial void OnBoundsChanged(Rect value) { var size = Math.Min(value.Width, value.Height); var textSize = size switch { < 100 => 8, < 150 => 10, < 175 => 12, _ => 14 }; var innerRadius = size switch { < 50 => size / 2, < 120 => size / 3, _ => size / 4, }; foreach (var series in Series.OfType>()) { series.DataLabelsSize = textSize; series.InnerRadius = innerRadius; series.OuterRadiusOffset = 0; series.RelativeOuterRadius = 1; } } public void UpdateValue(double value, double maxValue) { if (Series.Count() == 2 && Series.Skip(0).First().Values is ObservableCollection value1 && Series.Skip(1).First().Values is ObservableCollection value2) { value1.First().Value = value > maxValue ? maxValue : value; value2.First().Value = value > maxValue ? 0 : maxValue - value; } } }