Files
GSS2Rework/GSS2.UI.Core/ViewModels/ResourceBarViewModel.cs
T
2026-02-19 13:14:42 +03:00

69 lines
1.9 KiB
C#

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<ResourceBarViewModel> _logger;
[ObservableProperty] private ObservableCollection<ISeries> _series;
[ObservableProperty] private Rect _bounds;
public ResourceBarViewModel(ILogger<ResourceBarViewModel> logger, IEnumerable<ISeries> series)
{
_logger = logger;
_logger.LogInformation("Initialization");
Series = new ObservableCollection<ISeries>(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<PieSeries<ObservableValue>>())
{
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<ObservableValue> value1 &&
Series.Skip(1).First().Values is ObservableCollection<ObservableValue> value2)
{
value1.First().Value = value > maxValue ? maxValue : value;
value2.First().Value = value > maxValue ? 0 : maxValue - value;
}
}
}