/
romashov.z
/
PPAGame
Обзор
Документация
Войти
/
romashov.z
/
PPAGame
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
gameUI-clean
PPAGameUI/ViewModels/ArmyViewModel.cs
77 строк
2 KB
Artemiy Ivanov
PPAGame + PPAGameUI Avalonia UI
02 июн 2026, 13:42
02 июн 2026, 13:42
c122c02
Код
Авторство
О чём код?
using System.Collections.ObjectModel; using System.ComponentModel; using System.Runtime.CompilerServices; using ArmyBattleGame; namespace PPAGameUI.ViewModels; public class ArmyViewModel : INotifyPropertyChanged { private Army _army; private string _name; public string Name => _name; // Сетка: строки × столбцы (строка 0 = передовая) public ObservableCollection<ObservableCollection<UnitViewModel?>> Grid { get; } = new(); public int ColumnCount => _army.ColumnCount; public int AliveCount { get { int count = 0; foreach (var unit in _army.AllUnits) if (unit.IsAlive) count++; return count; } } public ArmyViewModel(Army army, string name) { _army = army; _name = name; RebuildGrid(); } public void RebuildGrid() { Grid.Clear(); for (int r = 0; r < _army.RowCount; r++) { var row = new ObservableCollection<UnitViewModel?>(); for (int c = 0; c < _army.ColumnCount; c++) { var unit = _army.GetAt(r, c); // r == 0 — передовая линия, участвует в рукопашном бою первой row.Add(unit != null ? new UnitViewModel(unit, isFrontRow: r == 0) : null); } Grid.Add(row); } OnPropertyChanged(nameof(Grid)); OnPropertyChanged(nameof(AliveCount)); OnPropertyChanged(nameof(ColumnCount)); } public void Refresh() { foreach (var row in Grid) foreach (var cell in row) cell?.Refresh(); OnPropertyChanged(nameof(AliveCount)); } public void UpdateArmy(Army army) { _army = army; RebuildGrid(); } public event PropertyChangedEventHandler? PropertyChanged; private void OnPropertyChanged([CallerMemberName] string? name = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); }