Files
GSS2Rework/GSS2.UI.Core/ViewModels/ResourceBarViewModel.cs
T
amkovkov 55260e0360 refactor: ResouceView
Move ResourceView and all related to ui core namespace GSS2.UI.Core
Split ResourceView on separate elements
Make parts folding depended on size
2026-02-06 08:19:18 +03:00

60 lines
1.6 KiB
C#

using System.Collections.ObjectModel;
using Avalonia;
using CommunityToolkit.Mvvm.ComponentModel;
using LiveChartsCore;
using LiveChartsCore.Defaults;
using LiveChartsCore.SkiaSharpView;
namespace GSS2.UI.Core.ViewModels;
public partial class ResourceBarViewModel : ViewModelBase
{
[ObservableProperty] private ObservableCollection<ISeries> _series;
[ObservableProperty] private Rect _bounds;
public ResourceBarViewModel(IEnumerable<ISeries> series)
{
Series = new ObservableCollection<ISeries>(series);
}
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;
}
}
}