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
This commit is contained in:
2026-02-06 08:19:18 +03:00
parent c0336a55fd
commit 55260e0360
16 changed files with 528 additions and 545 deletions
@@ -0,0 +1,60 @@
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;
}
}
}