using System; using System.Collections.ObjectModel; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using PKHeX.Core; using static System.Buffers.Binary.BinaryPrimitives; namespace PKHeX.Avalonia.ViewModels.Subforms; /// /// Model for a single berry plot entry. /// public partial class BerryPlotModel : ObservableObject { public int Index { get; } [ObservableProperty] private int _berry; [ObservableProperty] private int _u1; [ObservableProperty] private int _u2; [ObservableProperty] private int _u3; [ObservableProperty] private int _u4; [ObservableProperty] private int _u5; [ObservableProperty] private int _u6; [ObservableProperty] private int _u7; public string DisplayName => $"Plot {Index + 1}"; public BerryPlotModel(int index) => Index = index; } /// /// ViewModel for the Gen 6 XY Berry Field viewer. /// Read-only display of berry plots (no save, just viewing). /// public partial class SAVBerryFieldXYViewModel : SaveEditorViewModelBase { private readonly SAV6XY _sav; public ObservableCollection Plots { get; } = []; [ObservableProperty] private BerryPlotModel? _selectedPlot; [ObservableProperty] private int _selectedPlotIndex = -1; public SAVBerryFieldXYViewModel(SAV6XY sav) : base(sav) { _sav = sav; for (int i = 0; i < BerryField6XY.Count; i++) { var model = new BerryPlotModel(i); Plots.Add(model); } if (Plots.Count > 0) SelectedPlotIndex = 0; } partial void OnSelectedPlotIndexChanged(int value) { if (value < 0 || value >= Plots.Count) return; LoadPlot(value); SelectedPlot = Plots[value]; } private void LoadPlot(int index) { var span = _sav.BerryField.GetPlot(index); var model = Plots[index]; model.Berry = ReadUInt16LittleEndian(span); model.U1 = ReadUInt16LittleEndian(span[(2 * 1)..]); model.U2 = ReadUInt16LittleEndian(span[(2 * 2)..]); model.U3 = ReadUInt16LittleEndian(span[(2 * 3)..]); model.U4 = ReadUInt16LittleEndian(span[(2 * 4)..]); model.U5 = ReadUInt16LittleEndian(span[(2 * 5)..]); model.U6 = ReadUInt16LittleEndian(span[(2 * 6)..]); model.U7 = ReadUInt16LittleEndian(span[(2 * 7)..]); } }